我不明白这两个API之间的区别。我的意思是什么时候使用第一个。为什么会有JobIntentService? 预先感谢
答案 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之间的区别。当我们第一次查看这些术语Service
,IntentService
,JobIntentService
时,它们看起来几乎相似-以一种或其他方式,它们将在后台执行某些操作(用户不会注意)。但是它们的运作方式几乎没有什么区别,
服务-它在调用该服务并执行某些后台操作的同一主线程上运行。对于在主线程上发生的任何长时间运行的操作,建议创建一个新线程并通过不影响主线程的性能来完成工作(例如Handler
)。
缺点:在主线程上运行
IntentService-Intent服务还有助于执行一些长期运行的(不确定的)后台任务。唯一的区别是它创建了一个新线程来执行此任务,并且不在主线程上运行。给定的工作是onHandleIntent
吗?
缺点:应用程序被杀死后,分配给IntentService的工作将丢失
JobIntentService-作业意图服务与IntentService非常相似,但是没有什么好处,例如应用程序可以随时取消该作业,并且一旦重新创建/启动应用程序,它就可以从头开始。
但是从Oreo,如果应用程序在后台运行,则不允许在后台启动该服务。 Android要求我们通过content.startForegroundService
而不是context.startService
显式启动该服务,并且当该服务在5秒钟内启动时,必须将其绑定到通知上,以使其具有UI元素。
参考:https://developer.android.com/about/versions/oreo/background.html