JobIntentService не удаляет поток после завершения, как IntentService - PullRequest
0 голосов
/ 01 октября 2018

У меня 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 также не удаляет поток

...