2

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

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

WorkManager api 也准备好生产了吗?

4

2 回答 2

5

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

它有一个稳定的版本2.4.0并准备好投入生产。

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

作为 Android 8.0(API 级别 26)为延长电池寿命而引入的更改之一,当您的应用进入缓存状态且没有活动组件时,系统会释放应用持有的任何唤醒锁。

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

于 2018-06-06T15:07:17.543 回答
1

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

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

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

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

于 2018-06-06T15:18:18.553 回答