JobIntentService 和 IntentService 有什么区别?

What are differences between JobIntentService and IntentService?

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

基本上,两者起着相同的作用,不同之处在于 IntentService 它是 Service 的基础 class 处理带有 Intent on demand 的显式异步请求的 Service,它是通过 startService 启动的(通过服务的意图),因此可以根据需要启动服务,从 Android Oreo JobIntentService 开始,它还执行工作处理,但是它能够在旧版本中保留 运行,它也使过程更简单。事实上,这 2 个 API 具有相同的跟进。对于 Oreo 使用的工作的执行,如果 JobScheduler.enqueue 已经在旧版本的平台中,它将被使用 Context.startService

希望对您有所帮助。

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

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

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

    缺点:在主线程上运行

  • IntentService - Intent 服务还有助于完成一些长时间的 运行ning(无限期)后台任务。唯一的区别是它创建了一个新线程来执行此任务,而不是在主线程上 运行。在 onHandleIntent.

    上执行给定的作业

    缺点:当应用程序被杀死时,分配给 IntentService 的作业会丢失

  • JobIntentService - 工作意图服务与 IntentService 非常相似,但没有什么好处,例如应用程序可以随时终止此工作,一旦应用程序获得 recreated/up,它可以从头开始工作。

但是对于 Oreo,如果应用 运行 在后台运行,则不允许在后台启动服务。 Android 要求我们通过 context.startForegroundService 而不是 context.startService 显式启动服务,并且当服务在 5 秒内启动时,它必须绑定到通知以具有 UI 元素与之相关联。

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