2017-01-05 1 views
1

В моем приложении у меня есть обработчик в MainActivity. В этом обработчике я получаю значение timestamp из локальной базы данных, меняю его значение на текущую временную метку и обновляю локальную базу данных. Это событие происходит каждые 2 минуты.Как экземпляр обработчика запускает runnable, даже приложение убито в android?

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

Как остановить обработчик, когда я убью свое приложение? Стоит объяснить, как работает обработчик.

Исходный код:

addEventHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
       mockSpeedEventHandler.postDelayed(this, realTimeEventFrequency * 60 * 1000); 
     } 
    }, 60000); 
+1

У вас есть этот 'handler.removeCallbacksAndMessages (null)' в 'onStop()' или в любом другом месте в активности? – Raghunandan

+0

Я остановил addEventHandler в onDestroy(), вызвав addEventHandler.removeCallbacksAndMessages (null); – Madhan

ответ

1

Я не уверен, почему вы используете 2 обработчиков, но если предположить, что код, который работает срабатывающий при 2-го. Решение должно состоять в том, чтобы остановить и addEventHandler, и mockSpeedEventHandler.

+0

Хорошо, спасибо. Не могли бы вы объяснить, почему Android не остановил обработчик, когда приложение было убито? – Madhan

+0

выполнение обработчика как запланировано не освобождается, а ссылки, используемые внутри потока обработчика, также не освобождаются, поэтому вам нужно быть осторожным с ним, вы можете создать утечку памяти таким образом – petrumo

+0

Хорошо, спасибо за ваши объяснения. Один последний вопрос. Я не могу понять это: «Каждый экземпляр Handler связан с одним потоком и очереди сообщений потока». В этом утверждении «поток» относится к параметру «runnable», который мы даем обработчику в методе postDelayed(), или относится к потоку основного потока (UI), в котором мы создали этот экземпляр Handler? – Madhan

 Смежные вопросы

  • Нет связанных вопросов^_^