Что происходит с потоком (Thread) при закрытии активности?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
samodelkin
Сообщения: 52
Зарегистрирован: 27 ноя 2013, 15:23

Что происходит с потоком (Thread) при закрытии активности?

Сообщение samodelkin » 20 фев 2014, 05:53

Здравствуйте, скажите пожайлуста если в активности выполняется поток (Thread) в бесконечно цикле, то при закрытии активности методом finish() поток уничтожится?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Что происходит с потоком (Thread) при закрытии активност

Сообщение Foenix » 20 фев 2014, 07:32

он будет продолжать работать, но управлять им ты уже не сможешь, поэтому сколько он проработает - это будет решать система.
Вообще тема потоков очень интересная, советую почитать об этом в учебнике, так просто в теме этот вопрос не раскроешь, там много нюансов.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Что происходит с потоком (Thread) при закрытии активност

Сообщение anber » 20 фев 2014, 09:44

Если вкратце посмотри этот ответ и камменты к нему: http://stackoverflow.com/a/11541256/1159507
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
Talik
Сообщения: 7
Зарегистрирован: 09 янв 2014, 10:42

Re: Что происходит с потоком (Thread) при закрытии активност

Сообщение Talik » 25 фев 2014, 16:08

Еще вот http://habrahabr.ru/post/133413/
и вот http://habrahabr.ru/post/124484/
сам сегодня интересовался.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Что происходит с потоком (Thread) при закрытии активност

Сообщение altwin » 25 фев 2014, 16:39

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

&nbspОтсюда какой вывод можно сделать? Это обычная POSIX и никто ваш поток в системе трогать не будет до тех пор, пока не произойдет исключение(к примеру он исчерпает свои ресурсы). Либо в стеке(Runtime thread stack) его "вытолкнут".
&nbspВывод Activity не имеет отношения к потоку и ваш метод finish() ему(потоку) пофиг...
P.S. забудьте о подобеных вопросах - поведение потоков в java непредсказуемо(вы обязанны так думать), ВСЕГДА убивайте свой поток явно, НИКОГДА не полагайтесь на состояние потока, единственный разумный способ отслеживания состояния - возврат результата либо exception. Иначе тушите свет и начинайте с начала... потом будет хуже ;) т.е. по теме вопроса, если вы вызвав finish()(или любой другой метод) не получили exception из потока или он не вернул значение - поток жив... более того, он работает(running), потому как опять, для того чтобы перейти даже в стадию "ожидания" ему опять таки нужна явная команда.
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Что происходит с потоком (Thread) при закрытии активност

Сообщение Mikhail_dev » 25 фев 2014, 17:34

Отсюда какой вывод можно сделать? Это обычная POSIX и никто ваш поток в системе трогать не будет до тех пор, пока не произойдет исключение(к примеру он исчерпает свои ресурсы).
Как вариант, превратить поток в демон поток, тогда он умрет при закрытии приложения.

Ответить