Android 工作管理器与服务?

Posted

技术标签:

【中文标题】Android 工作管理器与服务?【英文标题】:Android Work Manager vs Services? 【发布时间】:2018-10-24 21:30:56 【问题描述】:

在我的 android 应用程序中,我有多个 Intent 服务一个接一个地运行,第一个 Intent 服务由广播触发。几天前我遇到了Work Manager,我非常喜欢 Worker 和 WorkManager 类的简单性。与常规意图服务相比,Work Manager 的优缺点是什么?考虑到我将来可能需要编写更多的意图服务,我现在应该切换到工作经理吗?还有哪个选项可以帮助我轻松测试代码?

【问题讨论】:

你需要这个api来显示通知吗? 【参考方案1】:

WorkManager 具有以下功能:

提供可以在进程死亡后存活的任务 它可以唤醒应用程序和应用程序的进程来做工作,从而保证工作将被执行。 允许观察工作状态和创建复杂工作链的能力 允许工作链,允许将大块工作分离成小工作,并根据不同的约束执行它们 优雅地管理打盹模式或操作系统施加的其他限制。

以下情况会有所帮助:

执行长时间运行的后台任务,例如上传媒体 在数据库中解析和存储数据。 需要在进程死亡中幸存下来的关键任务

考虑到我将来可能需要编写更多 Intent 服务,我现在应该切换到工作经理吗?

在大多数情况下,它应该是 IntentService 的替代品,但您必须在使用前仔细考虑。 IntentService 一开始可能不是最好的选择。

WorkManager 无法回答所有后台任务。例如。您不应该使用它来处理付款,因为它不需要在流程死亡中幸存下来,并且这些任务需要立即执行。考虑使用前台服务。使用它们来解析数据和视图内容也不是一个好主意。

在使用它之前,您确实需要权衡是否需要它的功能。由于谷歌几乎要重新改造我们的编码方式,WorkManager 将成为我们后台处理问题的解决方案。当然,这将是最重要的选择,因为它抽象了对操作系统施加的几个约束的处理。您应该考虑将其用于未来的实现。

还有哪个选项可以帮助我轻松测试代码?

Google 还提供了测试库,方便 WorkManager 的测试。它仍在开发中,但在发布之前应该会变得更强大。

【讨论】:

嗨,由于 doWork() 方法是同步的,有没有办法用 RxJava 做一些异步工作? @MehdiJahedManesh doWork() 将在后台线程中执行。 @NicolasJafelle 是的。您可以使用 PeriodicWorkRequest。即使您的应用程序被强制退出或设备重新启动,该任务也保证运行 现在还有理由继续使用IntentService吗? 应该每 5 分钟运行一次的关键上传呢?因为有时如果用户长时间不打开应用程序,工作人员会暂停。在这种情况下,拥有服务或工人是谨慎的做法吗?

以上是关于Android 工作管理器与服务?的主要内容,如果未能解决你的问题,请参考以下文章

Android开发笔记(一百八十八)工作管理器WorkManager

Android开发笔记(一百八十八)工作管理器WorkManager

Android开发笔记(一百八十八)工作管理器WorkManager

android (Service & PhoneStateListener) - 当应用程序被任务管理器、杀手或内存不足杀死时,服务确实重新启动但不工作

计划的警报管理器无法正常工作 Android

linux 的常用命令---------第十四阶段(ntp时间同步管理器与DNS域名解析服务)