【问题标题】:Should a WorkManager be used with a SyncAdapter?WorkManager 是否应该与 SyncAdapter 一起使用?
【发布时间】:2020-08-17 19:30:08
【问题描述】:

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

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

WorkManager api 也准备好生产了吗?

【问题讨论】:

    标签: android android-syncadapter android-workmanager


    【解决方案1】:

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

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

    关于唤醒锁:在 Android 8.0 中有以下变化:

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

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

    【讨论】:

    • Android 是否有可能会在中间中断其中一项工作?唤醒锁是为了确保不会中断,如果 WorkManager 可以被中断,则需要将作业分成更小的部分并进行检查以避免损坏......
    • 设备总是有可能关闭或类似情况,但WorkManager 旨在运行下载等长时间任务,并在任务中断时重新启动任务。它在文档中说明:WorkManager 适用于需要保证即使应用程序退出系统也会运行它们的任务,例如将应用程序数据上传到服务器。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 你在生产中使用这个?
    • 不,但我敢打赌,应用程序已经完成了一半,最终版本将会发布,并且只有最小的版本,如果需要任何更改的话。至少这是我的猜测,因为它看起来非常适合我。
    猜你喜欢
    • 2021-11-26
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2020-02-23
    相关资源
    最近更新 更多