Страница 1 из 1
Что происходит с потоком (Thread) при закрытии активности?
Добавлено: 20 фев 2014, 05:53
samodelkin
Здравствуйте, скажите пожайлуста если в активности выполняется поток (Thread) в бесконечно цикле, то при закрытии активности методом finish() поток уничтожится?
Re: Что происходит с потоком (Thread) при закрытии активност
Добавлено: 20 фев 2014, 07:32
Foenix
он будет продолжать работать, но управлять им ты уже не сможешь, поэтому сколько он проработает - это будет решать система.
Вообще тема потоков очень интересная, советую почитать об этом в учебнике, так просто в теме этот вопрос не раскроешь, там много нюансов.
Re: Что происходит с потоком (Thread) при закрытии активност
Добавлено: 20 фев 2014, 09:44
anber
Если вкратце посмотри этот ответ и камменты к нему:
http://stackoverflow.com/a/11541256/1159507
Re: Что происходит с потоком (Thread) при закрытии активност
Добавлено: 25 фев 2014, 16:08
Talik
Re: Что происходит с потоком (Thread) при закрытии активност
Добавлено: 25 фев 2014, 16:39
altwin
samodelkin писал(а):Здравствуйте, скажите пожайлуста если в активности выполняется поток (Thread) в бесконечно цикле, то при закрытии активности методом finish() поток уничтожится?
по сути создавая любой поток и вызывая метод thread.start() происходит следующее:
1. отрабатывает нативный метод
VMThread_create()
2. метод JNI:
Dalvik_java_lang_VMThread_create(const u4* args, JValue* pResult)
3. метод Dalvik:
dvmCreateInterpThread(Object* threadObj, int reqStackSize)
4. главная часть - метод linux kernel:
pthread_create
 Отсюда какой вывод можно сделать? Это обычная
POSIX и никто ваш поток в системе трогать не будет до тех пор, пока не произойдет исключение(к примеру он исчерпает свои ресурсы). Либо в стеке(Runtime thread stack) его "вытолкнут".
 Вывод Activity не имеет отношения к потоку и ваш метод finish() ему(потоку) пофиг...
P.S. забудьте о подобеных вопросах - поведение потоков в java непредсказуемо(вы обязанны так думать), ВСЕГДА убивайте свой поток явно, НИКОГДА не полагайтесь на состояние потока, единственный разумный способ отслеживания состояния - возврат результата либо exception. Иначе тушите свет и начинайте с начала... потом будет хуже

т.е. по теме вопроса, если вы вызвав finish()(или любой другой метод) не получили exception из потока или он не вернул значение - поток жив... более того, он работает(running), потому как опять, для того чтобы перейти даже в стадию "ожидания" ему опять таки нужна явная команда.
Re: Что происходит с потоком (Thread) при закрытии активност
Добавлено: 25 фев 2014, 17:34
Mikhail_dev
Отсюда какой вывод можно сделать? Это обычная POSIX и никто ваш поток в системе трогать не будет до тех пор, пока не произойдет исключение(к примеру он исчерпает свои ресурсы).
Как вариант, превратить поток в демон поток, тогда он умрет при закрытии приложения.