JobIntentService не удаляет поток после завершения, как IntentService
У меня есть JobIntentService из официального документа:
public class SimpleJobIntentService extends JobIntentService {
static final int JOB_ID = 1000;
static void enqueueWork(Context context, Intent work) {
enqueueWork(context, SimpleJobIntentService.class, JOB_ID, work);
}
@Override
protected void onHandleWork(Intent intent) {
// We have received work to do. The system or framework is already
// holding a wake lock for us at this point, so we can just go.
Log.i("SimpleJobIntentService", "Executing work: " + intent);
String label = intent.getStringExtra("label");
if (label == null) {
label = intent.toString();
}
toast("Executing: " + label);
for (int i = 0; i < 5; i++) {
Log.i("SimpleJobIntentService", "Running service " + (i + 1)
+ "/5 @ " + SystemClock.elapsedRealtime());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
Log.i("SimpleJobIntentService", "Completed service @ " + SystemClock.elapsedRealtime());
}
@Override
public void onDestroy() {
super.onDestroy();
toast("All work complete");
}
final Handler mHandler = new Handler();
// Helper for showing tests
void toast(final CharSequence text) {
mHandler.post(new Runnable() {
@Override public void run() {
Toast.makeText(SimpleJobIntentService.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}
Перед запуском этого сервиса, после звонка Thread.activeCount()
Я получил номер 33. После окончания первого запуска службы я получил 34, следующие 35 и так далее.
Зачем? Кто-то может мне объяснить? Как убить эту ветку после окончания? Это нормальное поведение JobIntentService? IntentService работает идеально, всегда завершает поток после завершения.
Я запускаю этот сервис из фрагмента, используя:
Intent intent = new Intent(getActivity(), SimpleJobIntentService.class);
SimpleJobIntentService.enqueueWork(getActivity(), intent);
во всяком случае, если я запустил службу таким образом:
getActivity().startService(new Intent(getActivity(), SimpleJobIntentService.class));
JobIntentService также не удаляет поток