Обработчик не удаляет обратные вызовы из метода removeCallbacksAndMessages () - PullRequest
0 голосов
/ 11 апреля 2019

Когда пользователь открывает фрагмент, мне нужно позвонить в сервис через 30 секунд.Итак, я выполняю следующий код:

handler.postDelayed(runnable, 30000); 

runnable = new Runnable() {
    public void run() {
       fetchData(true);
    }
};

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

@Override
public void onStop() {
    super.onStop();
    if(handler!=null) {
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
}


@Override
public void onPause() {
    super.onPause();
    if(handler !=null){
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
    }
}


@Override
public void onDetach() {
    super.onDetach();
    if(handler !=null){
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
    }
}

Мне нужно знать, как отменить обработчик.

1 Ответ

1 голос
/ 11 апреля 2019

Мне нужно знать, как отменить обработчик

Нет ничего похожего на Start, Stop или Cancel для Handler. Его работа заключается в том, чтобы просто публиковать Runnables и сообщения в очереди потоков.

вы уже написали handler.removeCallbacks(runnable);, чтобы удалить колбэки, которые вы запускали ранее. Я думаю, тебе этого достаточно.

...