Android工作管理器与服务的区别?

65
在我的Android应用程序中,我有多个意图服务,这些服务依次运行,第一个意图服务是由广播触发的。我在几天前了解到Work Manager,真的很喜欢Worker和WorkManager类的简单性。相比常规的意图服务,Work Manager有哪些优缺点?考虑到我将来可能会编写更多的意图服务,是否应该现在就切换到工作管理器?还有哪种选项能帮助我轻松地测试代码?

您需要使用此 API 来显示通知吗? - IgorGanapolsky
1个回答

73

WorkManager提供以下功能:

  • 提供能够在进程死亡时继续执行的任务
  • 它可以唤醒应用和应用程序进程来执行工作,从而确保工作将被执行。
  • 允许观察工作状态并能够创建复杂的工作链
  • 允许工作链接,这允许将大块工作分成小块,并根据不同约束条件执行它们
  • 优雅地管理doze模式或OS强制实施的其他限制。

以下是使用它有帮助的情况:

  • 执行长时间运行的后台任务,如上传媒体文件
  • 解析并将数据存储在数据库中。
  • 需要在进程死亡时继续执行的关键任务

考虑到未来可能需要编写更多的IntentService,我现在应该转换为WorkManager吗?

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

WorkManager并不是处理所有后台任务的答案。例如,您不应将其用于处理付款,因为它不需要在进程死亡时保持存活,并且这些任务需要立即执行。可以考虑使用前台服务。此外,也不建议将其用于解析数据和视图内容。

在使用之前,确实需要权衡是否需要其功能。由于Google正在重构我们编写代码的方式,WorkManager将成为解决我们后台处理问题的最佳选择。肯定会成为最重要的选项,因为它抽象了操作系统施加的多种限制的处理。您应该考虑在未来的实现中使用它。

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

Google还提供了测试库,可轻松进行WorkManager的测试。目前仍在开发中,但应在发布前变得更加强大。


3
doWork() 将在后台线程执行。 - Sagar
3
可以使用PeriodicWorkRequest。即使您的应用程序被强制退出或设备重新启动,该任务也将保证运行。 - Sagar
10
现在还有使用IntentService的理由吗? - IgorGanapolsky
1
那么关于每5分钟运行一次的关键上传怎么办呢?因为有时候如果用户很长时间不打开应用程序,工作人员会暂停。在这种情况下,使用服务还是工作人员更明智呢? - Anirudh Ganesh
我想补充一下这个很好的答案,即安卓的“数据节省”设置会影响行为。在我的应用中,Work Manager 执行的工作被视为后台任务,如果开启了数据节省模式,则来自 Work Manager 任务的 Web 服务调用将无法成功。 - GregHNZ
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接