【问题标题】:Android periodic work friendly to doze mode and app standbyAndroid周期性工作对打盹模式和应用待机友好
【发布时间】:2018-07-01 10:38:12
【问题描述】:

我正在尝试找到一种在 android 中执行定期工作的最佳方法,该方法可以很好地与打盹模式和应用程序待机配合使用。 我用定期请求尝试了 WorkManager,它在开始时工作正常(15 分钟请求),但随着时间的推移,时隙会减少,一周后它似乎每天只触发一次。

获得所需行为并且仍然保持打盹模式和应用待机友好的最佳方式是什么?

【问题讨论】:

  • 如果您有服务器,我认为 FCM 这是您的最佳选择:developer.android.com/training/monitoring-device-state/…
  • 我想过(FCM),但在阅读了 FCM 文档后,我认为这不是方式,在文档中它是这样声明的“。高优先级消息通常应该导致用户与您的应用程序交互。如果 FCM 检测到他们没有检测到的模式,您的消息可能会被取消优先级。"
  • 我也读到了,所以不要使用高优先级,我认为它仍然是你最好的选择......当你得到推送时,排队 OneTimeWorkRequest ,它会在系统决定(可能立即),但最终会触发。在我的应用中,我同时使用了由 FCM 触发的 PeriodicWorkRequestOneTimeWorkRequest,它们都触发了相同的工作。
  • 您需要网络访问吗?
  • 在某些情况下,我确实需要网络访问权限。您多久发送一次 FCM 消息?不违反谷歌政策吗?

标签: android android-background android-workmanager


【解决方案1】:

在我们在问题 cmets 中的对话之后,我有关于我的测试的更新。

我今天不得不停止它,但测试时间几乎是一周,你可以看到日期。我可以肯定 WorkManagerFCM没有高优先级)对我来说非常有用。

我所做的是 - 不管我注册的 PeriodicWorkRequest 是什么,在收到的每个 FCM 上,我都会为在 PeriodicWorkRequest 注册的相同工作加入一个 OneTimeWorkRequest

我的条件:

  • targetSDK - 27
  • WorkManager 版本 - 1.0.0alpha04
  • PeriodicWorkRequest,15 分钟。 NetworkType.CONNECTED 约束。
  • com.google.android.gms:play-services-gcm:11.8.0
  • 推送(无高优先级)每 1 小时发送一次如果工作未运行
  • 测试设备:Galaxy S8、华为 p20 lite、Galaxy S7、Pixel 2。(均运行 Oreo)
  • 应用安装后死机,测试时根本没有打开

行为因设备而异,但总体行为如下:

在最初几天(例如 Galaxy S8 为 3 天),工作每约 15 分钟运行一次,其余几天每 1-5 小时运行一次。出于我的背景和电池效率工作的目的,它是完美的。而且它比没有你描述的推动的一天一次要好。

【讨论】:

  • 谢谢分享。这是一个很好的信息。奇怪的是,虽然没有高优先级 FCM 进行更改,但我假设您由接收器而不是由操作系统处理 fcm,这会使您的应用程序退出待机模式。
  • FCM 被操作系统接收,操作系统唤醒应用程序(即使它被杀死)并传递 FCM。当使用高优先级时,操作系统可以选择何时唤醒应用并交付 FCM,在某些情况下这可能需要几个小时。当 FCM 为高优先级时,操作系统将唤醒应用程序并立即传送 FCM,但您必须显示您已经知道的通知...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多