JobIntentService 和 IntentService 之间有什么区别?

我不明白这两个API之间有什么区别。我的意思是什么时候使用第一个。为什么有JobIntentService?提前致谢


答案 1

我建议阅读这篇文章,解释意图服务和工作意图服务之间的区别。当我们第一次寻找这些术语时,它们看起来几乎相似 - 以某种方式,它们会在后台执行一些操作(用户没有注意到)。但是它们的运作方式几乎没有区别,ServiceIntentServiceJobIntentService

  • 服务 - 这在同一主线程上运行,该主线程调用此服务并执行一些后台操作。对于在主线程上发生的任何长时间运行的操作,建议创建一个新线程并通过不影响主线程的性能来执行该工作(例如; )。Handler

    缺点:在主线程上运行

  • 意向服务 - 意向服务还有助于执行一些长时间运行(无限期)的后台任务。唯一的区别是它会创建一个新线程来执行此任务,并且不在主线程上运行。给定的工作是否在它上面。onHandleIntent

    缺点:当应用程序被终止时,提供给 IntentService 的作业会丢失

  • JobIntentService - Job Intent Service与IntentService非常相似,但几乎没有什么好处,例如应用程序可以随时终止此作业,并且一旦应用程序重新创建/启动,它可以从头开始启动作业。

但从Oreo开始,如果应用程序在后台运行,则不允许在后台启动服务。Android要求我们显式启动服务,而不是,当服务在5秒内启动时,它必须绑定到通知才能具有与其关联的UI元素。context.startForegroundServicecontext.startService

参考资料 : https://developer.android.com/about/versions/oreo/background.html


答案 2

两者的工作方式相同,但与 JobIntentService 的唯一区别是,如果应用程序在执行服务时被终止,则 JobIntentService 会重新启动。OnHandleWork() 在应用程序被终止后重新启动。


推荐