调用JobIntentService的onDestroy后会发生什么?

时间:2019-04-25 05:41:21

标签: android observable rx-java android-jobscheduler jobintentservice

我有一个与 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyboard_container" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello world"/> </RelativeLayout> 的生命周期有关的问题。从文档中,我发现JobIntentService返回后就立即销毁了JobIntentServiceonHandleWork(Intent intent)在后​​台运行,因此我可以在此处运行阻止操作。然后,如果我想异步运行实际的执行该怎么办?我似乎一切都按预期运行,但是很难理解即使调用onHandleWork后该服务仍在后台运行。以下是我对onDestroy的实现。

onHandleWork

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

1 个答案:

答案 0 :(得分:0)

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

如果onHandleWork直接执行您的逻辑(包括一个较长的过程),那么一旦过程完成,onDestroy()将被调用

要完全了解它们之间的区别,您需要知道onHandleWork方法会简单地执行您的逻辑。

示例:

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

2-{{​​1}}-> for循环-> onHandleWork

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

在(2-)上,您告诉.execute()方法执行循环,该循环阻止onHandleWork的调用,直到循环结束。