2015-08-15 3 views
1

Когда мое приложение сбой по какой-либо причине onDestroy() метод не вызывается. Мое уведомление также не удаляется. Где должен быть вызван метод notifi.cancel(1);, чтобы удалить уведомление при сбое приложения?Android Удалить уведомление, когда активность была разрушена или приложение разбито

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    if (nm != null) { 
     nm.cancel(0); 
    } 

} 

ответ

4

К сожалению, onDestroy() не вызывается, когда приложение разбилось. Чтобы получить обратный вызов до того, как приложение разбилось, вы должны использовать обработчик исключений, как указано here. Вы должны написать код для удаления уведомления в обработчике исключений.

Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() { 

     @Override 
     public void uncaughtException(Thread thread, Throwable ex) { 
      new Thread() { 
       @Override 
       public void run() { 
        Looper.prepare(); 
        // Cancel Notification 
        if (nm != null) { 
         nm.cancel(0); 
        } 
        Looper.loop(); 
       } 
      }.start(); 
     } 
    }); 

Также вы можете взглянуть на это very similar question.

0

onDestory() метод вызывается, когда система низкой памяти или при вызове метода finish(). Поэтому, когда ваше приложение разбилось, не назовете метод onDestory(). check thischeck this also

где наилучшее положение для выполнения notifi.cancel (1); метод?

Вы можете позвонить всем где notifi.cancel(1);. Это все требует от того, что нужно.

+1

Надеюсь, я вам понятен. – mubeen

+0

если приложение разбилось, как мне отменить уведомления? – grizzly

+1

Заданный вопрос касается места вызова метода 'notifi.cancel (1)', когда приложение выходит из строя, а ваш ответ неверен. Вы не можете просто назвать это где угодно. Предполагается, что он будет вызван только в случае сбоя приложения. – Antrromet

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