Android WorkManager是否应与SyncAdapter一起使用?

Android WorkManager是否应与SyncAdapter一起使用?,android,android-syncadapter,android-workmanager,Android,Android Syncadapter,Android Workmanager,以前,可以使用IntentService或SyncAdapter(带WakeLock)确保一系列更新 现在有了新的打盹模式和节省电池的限制,WakeLock是否仍然足够可靠,还是应该使用WorkManager在IntentService或SyncAdapter中启动更长的进程 WorkManager api生产准备就绪了吗?据我所知,WorkManager可以完全取代IntentService和SyncAdapter。例如,您在SyncAdapter.onPerformSync()中执行的所有操

以前,可以使用IntentService或SyncAdapter(带WakeLock)确保一系列更新

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


WorkManager api生产准备就绪了吗?

据我所知,
WorkManager
可以完全取代
IntentService
SyncAdapter
。例如,您在
SyncAdapter.onPerformSync()
中执行的所有操作现在都可以在
WorkManager.doWork()中执行

它得到了一个稳定的版本,并准备生产

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

作为安卓8.0(API级别26)为提高电池寿命而引入的一项更改,当您的应用程序进入缓存状态且没有活动组件时,系统会释放应用程序持有的所有唤醒锁


所以我不再依赖唤醒锁了。我认为在未来的Android版本中,它们将被完全删除。大多数情况下,您不需要使用
WorkManager

我也不会费心使用JobScheduler或AlarmManager。WorkManager位于这些之上,为您处理一切,不管您的应用程序运行的是哪一个android版本

这里有一个关于WorkManager的好例子,在这里他们使用Worker进行图像处理,但这对于执行任何长时间运行的任务都是非常好的。 您可以指定各种约束,包括是否希望设备空闲以运行辅助进程。您还可以链接工作线程,将数据从一个工作线程传递到另一个工作线程,甚至将它们分组并运行一些并行操作,等待所有工作线程完成,然后继续使用另一个(或多个)工作线程。 根据您的用例,您基本上可以从任何地方启动worker(活动、广播接收器、stc)

事实上,我使用从广播接收器开始的工作人员来进行一些api调用,当然只有当您有internet连接(可设置的约束)并且它设置非常容易并且工作非常好时,我才可以推荐使用它(并祝福Google最终制作这些AC库)。 我还非常喜欢WorkManager将工作保存到db with room中,这样它就可以在所有条件都满足的情况下提取工作,即使您在这段时间内重新启动设备。如果您设置了一些监控(例如stetho),您实际上可以看到它如何将作业保存到自己的数据库中


它仍然是alpha版本,但它的构建非常稳固,我认为在发布最终版本之前,他们不会做太多更改。

您在生产中使用了它吗?没有,但我打赌应用程序完成了一半,最终版本将发布,如果需要任何更改,只会有很小的更改。至少这是我的猜测,因为它看起来对我来说非常坚固。Android有机会中断中间的一个工作吗?设置唤醒锁是为了确保没有中断,如果WorkManager可以中断,则需要将作业拆分为更小的部分,并进行检查以避免损坏…设备总是有可能关闭或类似情况,但是
WorkManager
设计用于运行长任务,如下载,并在任务中断时重新启动任务。文档中有说明:WorkManager适用于需要保证即使应用程序退出系统也能运行它们的任务,例如将应用程序数据上载到服务器。