обработчик никогда не останавливается, даже если приложение или активность не видны / не используются

#android #multithreading #user-interface #handler #runnable

#Android #многопоточность #пользовательский интерфейс #обработчик #доступно для выполнения

Вопрос:

У меня есть приведенный ниже обработчик

 private Handler uiHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        switch (msg.what)
        {
        case UPDATE:
            // Perform UI updates here 

            // UI Updates done, schedule WORK in 15 seconds:
            this.sendMessageDelayed(this.obtainMessage(WORK), 15000);

            break;

        case WORK:
        {
            new Thread(checkUpdates).start();
        }
            break;

        default:
            super.handleMessage(msg);
        }
    }
};
  

Внутри onResume() я делаю следующее :

uiHandler.sendMessageDelayed(uiHandler.obtainMessage(WORK), 1000);

Внутри onPause() я делаю следующее

uiHandler.removeCallbacksAndMessages(null);

НО обработчик никогда не останавливается и продолжает повторяться.

Как это остановить?

(Побочные вопросы: является ли использование задачи таймера с флагами, работает ли пользовательский интерфейс для выполнения некоторых обновлений, лучшим вариантом)

Комментарии:

1. вызовите Looper.dump после удаления обратных вызовов и сообщений

2. @pskink как это называется? можете ли вы быть более конкретным?

3. либо вызовите Looper.setMessageLogging один раз, либо Looper.dump всякий раз, когда вы хотите увидеть MessageQueue циклического ввода