Intereting Posts
Упаковка android facebook sdk как апклиб с maven Тестирование биллинга в приложении: «Издатель не может купить этот товар» Android SDK 22 – проблемы с поиском SearchView Android Black Скриншот в DDMS: проблема? Или Причина безопасности? Play Store Бета-тестирование не работает Как я могу сделать сканер отпечатков пальцев USB, подключенный к мобильному телефону / планшету, успешно? Как начать другое действие с некоторой задержкой после нажатия кнопки в android? Не удалось найти цель с хеш-строкой 'android-25' Компиляция FFmpeg 2.3 с Android NDK r10 Ограничьте drawableLeft и высоту drawableRight до высоты TextView Разница между финишем () и System.exit (0) Всего страниц арены для JIT – что это значит? Как Android обрабатывает несколько R.java? Исключение, возникающее при рендеринге: невозможно найти макет для панели действий Почему Android Studio перестраивает проект так медленно, даже если никаких изменений в источниках нет?

Как остановить Handler в Android

В моем приложении я создал календарь с Gridview, и в этом Gridview я показываю даты и некоторую доступность событий с помощью Imageview, и для этого я создал обработчик.

Теперь я хочу остановить обработчик.

MainActivity.java

// inside oncreate Handler handler = new Handler(); refreshCalendar(); // outside oncreate public void refreshCalendar() { calAdapter.refreshDays(); calAdapter.notifyDataSetChanged(); handler.post(calendarUpdater); calTitle.setText(android.text.format.DateFormat.format("MMMM yyyy", cal)); } public Runnable calendarUpdater = new Runnable() { @Override public void run() { items.clear(); allData = new ArrayList<HashMap<String,String>>(); allData.clear(); allData = db.showAllEvents(); String currentDate = (String)android.text.format.DateFormat.format("MM/yyyy", cal); for(int i=0; i<allData.size(); i++) { String date[] = allData.get(i).get("date").split("/"); String md[] = currentDate.split("/"); if(date[1].equals(md[0]) && date[2].equals(md[1])) { items.add(date[0]); System.out.println("dates: "+date[0]); } } calAdapter.setItems(items); calAdapter.notifyDataSetChanged(); } }; 

Скажите, пожалуйста, как и где я должен отключить эту тему.

Solutions Collecting From Web of "Как остановить Handler в Android"

Вы можете использовать это, чтобы остановить этот runnable

 handler.removeCallbacks(calendarUpdater); 

RemoveCallbacks (Runnable r) : удалить все ожидающие сообщения Runnable r которые находятся в очереди сообщений.

редактировать

Вы можете упорядочить свой код таким образом

В onCreate of MainActivity.java

 Handler handler = new Handler(); refreshCalendar() //outside oncreate public void refreshCalendar() { calAdapter.refreshDays(); calAdapter.notifyDataSetChanged(); startRepeatingTask(); calTitle.setText(android.text.format.DateFormat.format("MMMM yyyy", cal)); } public Runnable calendarUpdater = new Runnable() { @Override public void run() { items.clear(); allData = new ArrayList<HashMap<String,String>>(); allData.clear(); allData = db.showAllEvents(); String currentDate = (String)android.text.format.DateFormat.format("MM/yyyy", cal); for(int i=0; i<allData.size(); i++) { String date[] = allData.get(i).get("date").split("/"); String md[] = currentDate.split("/"); if(date[1].equals(md[0]) && date[2].equals(md[1])) { items.add(date[0]); System.out.println("dates: "+date[0]); } } calAdapter.setItems(items); calAdapter.notifyDataSetChanged(); handler.postDelayed(calendarUpdater,5000); // 5 seconds } }; void startRepeatingTask() { calendarUpdater.run(); } void stopRepeatingTask() { handler.removeCallbacks(calendarUpdater); } 

Теперь вы можете просто вызвать startRepeatingTask() для публикации сообщения и прекратить использование stopRepeatingTask()

Унаследовано от следующей ссылки

Повторить задачу с задержкой?

Попробуй это,

handler.removeMessages (0);

Удалите все ожидающие сообщения сообщений с кодом, what находится в очереди сообщений.

Обработчику нечего останавливать или начинать . Это всего лишь шлюз для отправки сообщений и Runnables в очередь потоков. В вашем случае вы публикуете Runnable, который будет запускаться в потоке обработчика. Вы должны остановить этот Runnable. Итак, поставьте чек в том, что for цикла, чтобы разбить его.

Вы также можете использовать removeCallbacks(Runnable r) для Handler для отмены опубликованных Runnable . Но это не удалит те Runnable , которые уже запущены.

Сделайте обработчик полем. Затем в вашей деятельности переопределите метод onStop и вызовите обратные вызовы обработчика так:

 @Override protected void onStop() { super.onStop(); handler.removeCallbacks(calendarUpdater); }