Как остановить обработчик?
У меня есть сомнения. У меня есть помощник в моей работе. Хотя моя деятельность уничтожила обработчик, который все еще функционирует. Работает ли он на другом процессе, отличном от процесса приложения? Может ли кто-нибудь объяснить, почему он работает так?
Можно ли остановить обработчик во время ondestroy активности?
Спасибо заранее.
Ответы
Ответ 1
Как описано в документации
http://developer.android.com/reference/android/os/Handler.html
"Каждый экземпляр Handler связан с одним потоком и этой очереди сообщений потока."
Когда вы собираетесь закончить свою деятельность, например. в onDestroy()
вам также необходимо отменить обратный вызов для запуска, для которого он был запущен:
mHandler.removeCallbacks(previouslyStartedRunnable);
Это можно сделать даже без проверки того, была ли запущена runnable во время активной активности.
UPDATE:
Существует два дополнительных случая:
1.) Вы внедрили свой Обработчик таким образом, чтобы вы создали новый класс для Runnable, например.
private class HandleUpdateInd implements Runnable...
Обычно вам нужно это делать, если вам нужно запустить задержку с текущим набором параметров (которые могут измениться до тех пор, пока не будут запущены огни). Чтобы отменить его, вам нужно использовать
mHandler.removeCallbacksAndMessages(HandleUpdateInd.class);
2.) Если вы используете встроенный вызов (JPM спасибо за комментарий)
handler = new Handler() { public void handleMessage(Message msg) { ... } };
Затем вам нужно определить значение "что" для этого сообщения. Позже, если вам нужно отменить его, вы можете использовать
handler.removeMessages(what);
для выполнения этой задачи.
Ответ 2
Вы имеете в виду, что у вас есть нить где-то в вашей деятельности? остановить поток довольно просто, вам нужно иметь ссылку на этот поток. как:
private Thread mMyThread;
mMyThread = new Thread .......
и если вы хотите его остановить, просто проверьте, не ссылается ли ссылка на нуль и метод прерывания вызова:
if (mMyThread != null) {
mMyThread.interrupt();
}
надеюсь, что это поможет
Ответ 3
Мне нравится ответ Zelimir, просто дополнительная информация по этому вопросу. Android не определяет ограничения на срок службы приложения, приложение создается при первом запуске и может оставаться в живых между несколькими циклами onCreate/onDestroy. Обработчики связаны с одним единственным потоком/очередью событий приложения, поэтому активность не может "остановить" его (хотя вы, вероятно, могли бы это сделать через Handler.getLooper(). Quit(), но я не уверен, t вызвать проблемы. Также вы можете убить все приложение, как описано здесь здесь).
Вероятно, концепция Android заключается в том, чтобы как можно больше использовать экземпляры приложений, поэтому ваша главная задача при разработке Activity - это надлежащее оформление ресурсов Activity на вызове onDestroy. Статические переменные, потоки, AsyncTasks и сообщения/обратные вызовы в обработчиках - это элементы, о которых нужно беспокоиться.