Подтвердить что ты не робот

Как остановить обработчик?

У меня есть сомнения. У меня есть помощник в моей работе. Хотя моя деятельность уничтожила обработчик, который все еще функционирует. Работает ли он на другом процессе, отличном от процесса приложения? Может ли кто-нибудь объяснить, почему он работает так? Можно ли остановить обработчик во время ondestroy активности?

Спасибо заранее.

4b9b3361

Ответ 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 и сообщения/обратные вызовы в обработчиках - это элементы, о которых нужно беспокоиться.