Очистить уведомление в строке состояния после сбоя приложения

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

И вот моя проблема. Когда что-то идет не так, и уведомления о сбоях приложений остаются в области строки состояния. Можно ли очистить все уведомления, прежде чем показывать стандартный диалог закрытия силовой системы?

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


Вот мое окончательное решение, вдохновленное записью мышей. В приложении in on create метод регистрирую Thread.setDefaultUncaughtExceptionHandler ()

@Override public void onCreate() { super.onCreate(); this.notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); UncaughtExceptionHandler appHandler = new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { this.notificationManager.cancelAll(); defaultHandler.uncaughtException(thread, ex); } }; Thread.setDefaultUncaughtExceptionHandler(appHandler); } 

благодаря

Solutions Collecting From Web of "Очистить уведомление в строке состояния после сбоя приложения"

Вы можете позвонить

Thread.setDefaultUncaughtExceptionHandler ()

С обработчиком, который вызывается, когда какое-либо исключение не обрабатывается вашим приложением в потоке. Этот обработчик вызывается в случае, если нить умирает из-за необработанного исключения.

Здесь вам понадобится работа по очистке.

Это именно то, как библиотека отчетов об авариях ACRA ломает сбои.

Прежде всего, вам нужно убедиться, что ваше application should not get crashed at any cost и отвечать на ваш вопрос, вы должны переопределить onDestroy() службы и отменить уведомление там, поскольку оно будет работать для вас в обоих случаях, когда служба останавливается или Он падает.

Поскольку вы не можете использовать onDestroy() в случае crash , вам нужно поставить try catch block и после получения исключения выполнить соответствующие действия.