У меня была очень похожая проблема, потому что я только создавал экземпляры runnables при определенных условиях, а также только фактически запускал postDelayed при определенных условиях.
Например
if (conditions){
myRunnable = new Runnable(){
@Override
public void run(){
}
}
myHandler.postDelayed(myRunnable, 1000*60*1);
}
@Override
public void onDestroy(){
myHandler.removeCallbacks
}
Чтобы убедиться, что это не может привести к закрытию силы, я изменил его на
@Override
public void onDestroy(){
try {
if (conditions)
myHandler.removeCallbacks;
} catch (Exception e){//do nothing
}
Теперь, если по ошибке ошибочно вызваны мои обратные вызовы remove, исключение перехватывается и не вызывает принудительное закрытие.
Возможно, что postDelayed иногда не запускался из-за невыполнения определенных условий, или до того, как postDelayed был запущен, система могла уничтожить службу, вызывая вызов обратных вызовов в ondestroy. Таким образом, если вы поместите его в блок try, то, хотя removecallbacks все еще может потерпеть неудачу, это не повлияет на пользователя
Я знаю, что об этом спрашивали 8 месяцев назад, но я подумал, что мой ответ может помочь кому-то еще. :)
Надеюсь, это поможет.