为了账号安全,请及时绑定邮箱和手机立即绑定

JobIntentService 和 IntentService 有什么区别?

JobIntentService 和 IntentService 有什么区别?

繁星点点滴滴 2022-01-12 16:50:56
我不明白这两个 API 有什么区别。我的意思是什么时候使用第一个。为什么会有 JobIntentService ?提前致谢
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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

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

    缺点:在主线程上运行

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

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

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

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

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


查看完整回答
反对 回复 2022-01-12
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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


查看完整回答
反对 回复 2022-01-12
?
湖上湖

TA贡献2003条经验 获得超2个赞

基本上,两者遵循相同的角色,不同之处在于 IntentService 它是 Service 的基类,它根据需要处理带有 Intent 的显式异步请求,它通过 startService 启动(传递服务的 Intent ),因此该服务按照您的意愿启动,从 Android Oreo JobIntentService 它也执行工作处理,但是它能够在旧版本中继续运行,它也使过程更简单。事实上,这 2 个 API 具有相同的后续功能。对于 Oreo 使用的工作的执行,如果JobScheduler.enqueue已经在旧版本的平台中,它将被使用Context.startService



查看完整回答
反对 回复 2022-01-12
  • 3 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信