2015-08-09 3 views
0

Я просто тестирую почти пустой проект андроида .Daemon Thread все еще жив после закрытия приложения

Я создал поток демона в главной деятельности.

Запустил приложение и нажал кнопку «Назад» на телефоне, чтобы закрыть приложение.

Но нить демона никогда не умирает.

Daemon Thread отлично работает с пустым JAVA PROJECT.

Но с android, не работает.

Я искал решение в течение нескольких часов, но получил это.

Нищий демона работает только до тех пор, пока существуют не-демонные потоки работает. Когда закончится последний не-демонный поток, среда выполнения завершится. Это обычно не относится к приложениям с пользовательским интерфейсом.

Кто-нибудь знает, как это решить?

PS. Я остановил приложение, не нажав кнопку возврата оборудования, а нажав кнопку «Принудительная остановка» в «Информация о приложении», и оба приложения и поток исчезли!

Я впервые узнал о Daemon Thread из некоторых примеров кода для Android-разработчика.

Но никто не упоминал о том, что я пережил.

Разве разработчики Android не верят, что потоки Daemon будут убиты точно?

ответ

2

Но нить демона никогда не умирает.

Предположительно, вы не сделали cancel() нить. Вам нужно сделать это в подходящем месте.

Но с android, не работает.

Все работает отлично. Он работает так же, как и на Java, как вы можете сказать, прочитав свой цитированный отрывок. Разница заключается в how long your process lives и в потоках в этом процессе (в Android-процессах есть другие темы, кроме тех, что вы используете fork).

Кто-нибудь знает, как это решить?

Позвоните cancel() по вашей теме в соответствующей точке.

+0

Спасибо за ваш любезный ответ CommonsWare! Но я тебя не понимаю. Во-первых, я не знаю, что означает «cancel()». Я знаю только метод stop() и interrupt(). Во-вторых, я тестирую пустой проект, поэтому я думаю, что нажатие кнопки «Назад» может остановить все потоки, и мне не нужно ничего кодировать для потоков. В-третьих, я планировал использовать Daemon Thread, потому что я думал, что мне не нужны коды, чтобы остановить определенные потоки. Если мне нужно отменить поток, нет никакой пользы в использовании Daemon для меня. – Jenix

+0

@Jenix: Приносим извинения за имя метода; Я думал о 'AsyncTask', который использует' cancel() '. «Я подумал, что нажатие кнопки« Назад »может остановить все потоки, и мне не нужно ничего кодировать для потоков» - нет. Навигация (BACK, HOME и т. Д.) Не оказывает прямого влияния на потоки. Они могут влиять на продолжительность жизни вашего процесса, но если вы хотите остановить фоновый поток при уничтожении активности, вам необходимо самому это обработать. «Если мне нужно отменить нить, нет смысла использовать Daemon для меня», - согласился. – CommonsWare

+0

@Jenix: «нажав кнопку« Force stop »в« Информация о приложении », и оба приложения, и нить пропали!» - это потому, что «Force Stop» завершает ваш процесс. «Разве разработчики Android просто верят, что потоки Daemon будут убиты точно?» - Разработчики Android не используют потоки демона. Нам нужно лучше контролировать время жизни нити. – CommonsWare

2

Нажатие кнопки «Назад» не закрывает приложение (при условии, что закрытие означает завершение процесса). Это только завершает работу, но процесс все еще работает. Для достижения желаемого поведения вы можете использовать, например. AsyncTask и вызовите cancel() из соответствующего обратного вызова вашей деятельности, например.в onDestroy() или onBackPressed(), если вас интересуют именно нажатие на кнопки.

+0

Я понял! спасибо, koral! – Jenix

1

извинения за указание основного элемента, но следуйте своей проблеме после того, как вы закрыли его, не запуская в нем диспетчер задач (ctrl + alt + delete) .. есть диспетчер задач, работающий рядом с вашим демоном, а затем во время закрытия демон демонстрации что происходит во время и после закрытия в диспетчере задач, поскольку это может быть резервное копирование файлов в соответствии с параметрами проверки настроек в демонах .... или вы использовали ExecutorService для запуска в качестве Daemon на Java, и в этом случае это предотвратит вашу программу от выключая смотреть здесь ExecutorService - 10 tips and tricks

Java Applicatioin Process Hangs on Windows and Cached Thread Pool

+0

Устройства Android не используют «ctrl + alt + delete». – CommonsWare

+0

Я знал об этом, но, как мне кажется, он предположил, что он разрабатывает приложение для Android на компьютере с Windows, используя Android-приложение sdk для Windows, которое позволяет вам работать в среде Android. Простите мое невежество, сэр. – fuzzzy37

Смежные вопросы