JobIntentService 和 IntentService 有什么区别?

Moa*_*leq 16 java android background-process android-intentservice jobintentservice

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

rm *_*tar 25

我建议阅读这篇文章,解释Intent Service 和 Job Intent Service之间的区别。当我们第一次查找这些术语ServiceIntentServiceJobIntentService它们看起来几乎相似——以某种方式,它们会在后台执行一些操作(用户不会注意到)。但它们的运作方式几乎没有什么不同,

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

    缺点:在主线程上运行

  • IntentService - Intent 服务还有助于执行一些长时间运行(不确定)的后台任务。唯一的区别是它创建了一个新线程来执行这个任务,而不是在主线程上运行。给定的工作是否在它的onHandleIntent.

    缺点:当应用程序被终止时,分配给 IntentService 的工作会丢失

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

但是从奥利奥开始,如果应用程序在后台运行,则不允许在后台启动服务。Android 要求我们显式启动服务,context.startForegroundService而不是context.startService当服务在 5 秒内启动时,它必须与通知绑定,以便有一个与之关联的 UI 元素。

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

  • IntentService 的缺点似乎很奇怪。我的意思是,如果我们使用 setIntentRedelivery() 方法启用 mRedeliver 布尔值会怎样。这将重新启动服务并再次传递意图,因此最终不会丢失作业。 (3认同)

小智 5

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