Если служба Android уничтожена, уничтожаются ли потоки, порожденные службой?

#android #multithreading #service

#Android #многопоточность #Обслуживание

Вопрос:

Предположим, я реализую службу, которая запускает потоки, выполняющие длительные операции. Если служба будет уничтожена, будет ли это автоматически уничтожать и эти запущенные потоки?

Спасибо.

Комментарии:

1. Спасибо @Perroloco — имеет смысл. Я предполагаю, что «единица уничтожения» всегда является уровнем процесса, что приводит к удалению любых потоков.

2. @Cumbayah Я не слишком уверен в этом «Если действие приостановлено или остановлено, система может удалить его из памяти, либо попросив его завершить (вызывая его метод finish()), либо просто завершив его процесс». Не похоже, что это всегда уровень процесса. developer.android.com/guide/components /…

Ответ №1:

Служба выполняется в том же процессе, что и ваше приложение, если вы не укажете иное в манифесте. Если он будет уничтожен (т. Е. Произойдет сбой), все потоки, принадлежащие процессу, исчезнут, но я не думаю, что это то, о чем вы спрашиваете. Потоки, запущенные службой, не будут автоматически завершены, если служба остановлена обычным способом, если только служба не запущена в другом процессе и процесс также не завершен. Возможно, это не так. Android имеет тенденцию поддерживать процессы даже после того, как действие или служба, которые в них выполнялись, были остановлены и уничтожены.

Ответ №2:

Я обнаружил, что это тоже верно. Я хотел поток в фоновой службе (основной процесс пользовательского интерфейса). Я хотел, чтобы служба была уничтожена, когда основное действие было прекращено, однако я обнаружил, что мои потоки будут продолжать работать, даже когда действие и служба (stopSelf) были остановлены / остановлены.

Мне пришлось явно убить поток. Я сделал это, вызвав yourThread.interrupt() .