【问题标题】:Firebase and wake locks issue in AndroidAndroid 中的 Firebase 和唤醒锁问题
【发布时间】:2018-06-23 14:49:27
【问题描述】:

我在一个 Android 应用中使用多个 Firebase 产品:

compile 'com.google.firebase:firebase-core:11.0.1'
compile 'com.google.firebase:firebase-database:11.0.1'
compile 'com.google.firebase:firebase-storage:11.0.1'
compile 'com.google.firebase:firebase-auth:11.0.1'
compile 'com.google.firebase:firebase-messaging:11.0.1'

这些产品中的一个或多个似乎正在使用WAKE_LOCK 权限。可能是 Analytics 或 FCM。

我能理解哪里需要它。然而问题在于,在 Google Play 控制台的 Android Vitals 部分中,Google 警告我 Stuck partial wake locks 百分比为 2.30%,大​​于 2.30% strong>不良行为阈值,即0.70%。同样,背景卡住的部分唤醒锁1.40%,再次大于 不良行为阈值,即 0.10%强>。

换句话说,Google 认为这个数量的唤醒锁是一种“不良行为”。

我不使用唤醒锁,所以问题似乎来自 Firebase SDK。

谁知道是什么原因造成的?我们可以解决这个问题吗?

【问题讨论】:

    标签: android firebase firebase-cloud-messaging firebase-analytics android-wake-lock


    【解决方案1】:

    在查看应用的清单文件时,您可以使用Android Studio's Merged Manifest tab 来判断 Android 清单项的来源。当您在清单中查看此内容时,您会看到 WAKE_LOCK 来自 firebase-iid。

    要找出包含 firebase-iid 的内容,您可以使用 gradle 显示依赖关系图。

    ./gradlew dependencies
    

    这个输出表明它被 firebase-core 和 firebase-messaging 所包含:

    +--- com.google.firebase:firebase-messaging:11.6.0
    |    +--- com.google.firebase:firebase-iid:11.6.0
    |    |    +--- com.google.android.gms:play-services-basement:11.6.0 (*)
    |    |    +--- com.google.firebase:firebase-common:11.6.0 (*)
    |    |    +--- com.google.android.gms:play-services-tasks:11.6.0 (*)
    |    |    \--- com.google.firebase:firebase-iid-license:11.6.0
    |    +--- com.google.android.gms:play-services-basement:11.6.0 (*)
    |    +--- com.google.firebase:firebase-common:11.6.0 (*)
    |    \--- com.google.firebase:firebase-messaging-license:11.6.0
    \--- com.google.firebase:firebase-core:11.6.0
         \--- com.google.firebase:firebase-analytics:11.6.0
              +--- com.google.android.gms:play-services-basement:11.6.0 (*)
              +--- com.google.firebase:firebase-common:11.6.0 (*)
              +--- com.google.firebase:firebase-analytics-impl:11.6.0
              |    +--- com.google.android.gms:play-services-basement:11.6.0 (*)
              |    +--- com.google.firebase:firebase-iid:11.6.0 (*)
              |    +--- com.google.firebase:firebase-common:11.6.0 (*)
              |    +--- com.google.android.gms:play-services-tasks:11.6.0 (*)
              |    \--- com.google.firebase:firebase-analytics-impl-license:11.6.0
              \--- com.google.firebase:firebase-analytics-license:11.6.0
    

    这里没有什么需要“修复”的。 Firebase 只是使用唤醒锁来完成其正常业务。您可以随时尝试remove the permission,但 Firebase 可能不再正常工作。别管它。

    【讨论】:

    • 肯定有一些问题需要修复,因为 Google 将其标记为 不良行为。 Google 还提供了一份官方指南,建议了可能的解决方案,主要是使用 JobScheduler:developer.android.com/topic/performance/vitals/wakelock.html
    • 您误解了这条消息。唤醒锁的使用并不总是坏事。 不正确使用唤醒锁是不好的。
    • 唤醒锁定权限不会很快消失,但如果您认为 Firebase 可证明有任何问题,请提交错误报告。 firebase.google.com/support/contact/bugs-features
    • 当然唤醒锁并不总是坏事。然而,谷歌在 Android Vitals 中将大量唤醒锁标记为“不良行为”。 “不良行为”问题会影响应用在 Play 商店搜索中的排名(来源:developer.android.com/distribute/best-practices/develop/…)。他们还建议,当使用唤醒锁时,应用程序应该在前台,而 Firebase Analytics 似乎在使用唤醒锁在后台上传数据。同样,我个人对此没有任何问题,但在 Google Play 控制台中已将其标记为问题。
    • 无论如何,我都会提交错误报告
    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多