JobIntentService和IntentService有什么区别?

时间:2018-11-11 20:14:35

标签: java android background-process android-intentservice jobintentservice

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

3 个答案:

答案 0 :(得分:2)

两者的工作原理相同,但与JobIntentService的唯一区别是,如果在执行服务时杀死应用程序,则JobIntentService将重新启动。在杀死应用程序后,将重新启动OnHandleWork()。

答案 1 :(得分:1)

基本上,这两个角色具有相同的作用,不同之处在于IntentService是Service的基类,可以按需处理具有Intent的显式异步请求,它是通过startService(传递服务的Intent)启动的,因此您可以根据需要从Android Oreo JobIntentService启动该服务,它还执行工作处理,但是它能够保持在旧版本中运行,这也使过程变得更简单。实际上,这两个API具有相同的后续处理。如果平台上的旧版本中已有JobScheduler.enqueue,则执行Oreo的作品时,将使用Context.startService

希望这会有所帮助。

答案 2 :(得分:1)

我建议阅读这篇文章,以解释intent service and job intent service之间的区别。当我们第一次查看这些术语ServiceIntentServiceJobIntentService时,它们看起来几乎相似-以一种或其他方式,它们将在后台执行某些操作(用户不会注意)。但是它们的运作方式几乎没有什么区别,

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

    缺点:在主线程上运行

  • IntentService-Intent服务还有助于执行一些长期运行的(不确定的)后台任务。唯一的区别是它创建了一个新线程来执行此任务,并且不在主线程上运行。给定的工作是onHandleIntent吗?

    缺点:应用程序被杀死后,分配给IntentService的工作将丢失

  • JobIntentService-作业意图服务与IntentService非常相似,但是没有什么好处,例如应用程序可以随时取消该作业,并且一旦重新创建/启动应用程序,它就可以从头开始。

但是从Oreo,如果应用程序在后台运行,则不允许在后台启动该服务。 Android要求我们通过content.startForegroundService而不是context.startService显式启动该服务,并且当该服务在5秒钟内启动时,必须将其绑定到通知上,以使其具有UI元素。

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