以前可以使用带有WakeLock的IntentService或SyncAdapter确保一系列更新。
现在使用新的打盹模式和节省电池的限制,WakeLock是否足够可靠,还是应该使用WorkManager在IntentService或SyncAdapter中启动更长的进程?
还是WorkManager api生产就绪吗?
答案 0 :(得分:1)
据我了解,WorkManager
可以完全替换IntentService
和SyncAdapter
。例如。您在SyncAdapter.onPerformSync()
中所做的一切现在都可以在WorkManager.doWork()
中。
它仍处于alpha阶段(目前为1.0.0-alpha02
):https://developer.android.com/topic/libraries/architecture/adding-components#workmanager
关于唤醒锁:在Android 8.0中有以下更改:
作为Android 8.0(API级别26)为改善电池续航时间而引入的一项更改,当您的应用进入缓存状态且没有活动组件时,系统会释放应用程序所拥有的任何唤醒锁。
所以我不再依赖唤醒锁了。我认为它们将在未来的Android版本中被完全删除。大多数情况下,您不需要使用WorkManager
。
答案 1 :(得分:1)
我不会使用JobScheduler或AlarmManager。 WorkManager位于其中,并为您处理所有内容,与您的应用运行的Android版本无关。
https://codelabs.developers.google.com/codelabs/android-workmanager 这是一个关于WorkManager的好例子,他们使用Worker进行图像处理,但是执行任何长时间运行的任务都非常好。 您可以在各种事物上指定约束,包括您希望设备空闲以运行工作程序。您还可以链接工作人员,将数据从一个传递到另一个,甚至将它们分组并运行一些并行,等待所有人完成,然后继续与另一个(或更多)工作人员。 根据您的使用情况,您基本上可以从任何地方(活动,广播接收器,stc)启动工作人员。
事实上,我使用从广播接收器开始的工作人员做一些api呼叫,只有当你有互联网连接时(可设置约束)并且它很容易设置并且工作得很好,我只能这样做建议使用(并祝福谷歌最终制作这些AC库)。 我也非常喜欢WorkManager将工作保存到具有空间的数据库这一事实,因此即使您在所有条件之间检出,它也可以在所有条件检出时进行检索。如果您有一些监控设置(例如stetho),您实际上可以看到它如何将作业保存到自己的数据库中。
它还处于阿尔法状态,但它的构造非常稳固,我认为它们在发布最终版本之前不会发生太大的变化。