WorkManager 应该与 SyncAdapter 一起使用吗?

Should a WorkManager be used with a SyncAdapter?

以前可以使用带有唤醒锁的 IntentService 或 SyncAdapter 来确保一系列更新。

现在有了新的 Doze 模式和节省电池的限制,WakeLock 是否仍然足够可靠,还是应该使用 WorkManager 在 IntentService 或 SyncAdapter 中启动更长的进程?

还有 WorkManager api 生产就绪了吗?

据我了解,WorkManager可以完全替代IntentServiceSyncAdapter。例如。您在 SyncAdapter.onPerformSync() 中所做的一切现在都可以在 WorkManager.doWork().

它已获得稳定版本 2.4.0 并已准备好投入生产。

关于唤醒锁:在 Android 8.0 中有以下更改:

As one of the changes that Android 8.0 (API level 26) introduces to improve battery life, when your app enters the cached state, with no active components, the system releases any wakelocks that the app holds.

所以我不会再依赖唤醒锁了。我认为它们将在未来的 Android 版本中被完全删除。大多数时候你不需要它们 WorkManager.

我不会费心使用 JobScheduler 或 AlarmManager。 WorkManager 位于这些之上,并为您处理所有事情,无论您的应用 运行 使用什么 android 版本。

https://codelabs.developers.google.com/codelabs/android-workmanager 这是关于 WorkManager 的一个很好的示例,他们使用 Worker 进行图像处理,但它非常适合执行任何长时间的 运行ning 任务。 您可以指定对各种事物的约束,包括您是否希望设备对 运行 工作人员空闲。您还可以链接工作人员,将数据从一个工作人员传递给另一个工作人员,甚至将他们分组并 运行 一些并行,等待所有工作人员完成,然后继续另一个(或更多)工作人员。 根据您的用例,您基本上可以从任何地方启动一个工作人员(activity、广播接收器、stc)。

事实上,我使用从广播接收器开始的 worker 来做一些 api 调用,当然只有当你有互联网连接(可设置的约束)并且它很容易设置并且工作得很好时,我只能推荐它使用(并祝福 Google 最终制作这些 AC 库)。 我也非常喜欢 WorkManager 将工作保存到有空间的 db,因此它可以在所有条件检查完毕时获取它,即使您在两者之间重新启动设备也是如此。如果您设置了一些监控(例如 Stetho),您实际上可以看到它如何将作业保存到自己的数据库中。

它仍处于 alpha 阶段,但它构建得非常坚固,我认为在发布最终版本之前它们不会有太大变化。