JobIntentService 的 onDestroy 被调用后会发生啥?
Posted
技术标签:
【中文标题】JobIntentService 的 onDestroy 被调用后会发生啥?【英文标题】:What happens after JobIntentService's onDestroy is called?JobIntentService 的 onDestroy 被调用后会发生什么? 【发布时间】:2019-09-14 11:38:37 【问题描述】:我有一个与JobIntentService
的生命周期相关的问题。从文档中,我发现JobIntentService
在onHandleWork(Intent intent)
返回后立即被销毁。 onHandleWork
在后台运行,所以我可以在这里运行阻塞操作。那么,如果我想异步运行实际执行会发生什么?我似乎一切都按预期运行,但很难理解即使在调用onDestroy
之后服务仍在后台运行。下面是我对onHandleWork
的实现。
override fun onHandleWork(intent: Intent)
if (!processor.isProcessing)
subscription.add(processor.startProcessing()
.subscribe(
// Do something
, t ->
t.printStackTrace()
// Do something
))
当服务实际上被“销毁”时,这实际上是如何在后台运行的?
【问题讨论】:
【参考方案1】:onHandleWork
方法执行你的逻辑,如果你的逻辑启动异步任务,JobIntentService
告诉自己你给它的任务被执行(你给它的任务是简单地执行一个异步任务)因此你收到@ 987654323@立即
如果onHandleWork
直接执行您的逻辑(包括一个长流程),那么您的流程完成后将立即调用onDestroy()
要完全理解差异,您需要知道onHandleWork
方法只是执行您的逻辑。
例子:
1 - onHandleWork
-> Asynctask.execute()
-> onDestroy()
2 - onHandleWork
-> for 循环 -> onDestroy()
在(1-)上你告诉onHandleWork
方法执行一个异步任务,但不继续跟踪进程的进度,onHandlework
执行.execute()
(只需要几毫秒)
在 (2-) 上,您告诉 onHandleWork
方法执行一个循环,这会阻止调用 onDestroy()
直到您的循环结束。
【讨论】:
以上是关于JobIntentService 的 onDestroy 被调用后会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
JobIntentService 的 onDestroy 被调用后会发生啥?
JobIntentService - onHandleWork 并不总是被调用?
JobIntentService 不调用 OnHandleWork
JobIntentService 不会在 Android 8.0 上立即启动
Proguard:JobIntentService IllegalArgumentException启用模糊处理
在 JobIntentService 中可以在没有 onHandleWork() 的情况下调用 onDestroy() 吗?