1

我有一个与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
                }))
    }
}

当服务实际上被“销毁”时,这实际上是如何在后台运行的?

4

1 回答 1

1

onHandleWork方法执行您的逻辑,如果您的逻辑启动异步任务,JobIntentService则告诉自己您给它的任务已执行(您给它的任务是简单地执行异步任务)因此您会onDestroy()立即收到

如果onHandleWork直接执行您的逻辑(其中包括一个较长的过程),那么onDestroy()将在您的过程完成后立即调用

要完全理解差异,您需要知道该onHandleWork方法简单地执行您的逻辑。

例子:

1 - onHandleWork-> Asynctask.execute()->onDestroy()

2 - onHandleWork-> for 循环 ->onDestroy()

在(1-)你告诉onHandleWork方法执行一个异步任务,但不继续跟踪进程的进度,onHandlework执行.execute()(只需要几毫秒)

在 (2-) 上,您告诉该onHandleWork方法执行一个循环,该循环会阻塞调用 ofonDestroy()直到您的循环结束。

于 2020-01-31T11:32:36.850 回答