In meiner Anwendung laufen mehrere Dienste. Wenn Benutzer die Anwendung stoppen (UI-Teil), bleiben die Dienste im Hintergrund aktiv und zeigen Benachrichtigungen (jeder Dienst hat einen) in der Statusleiste an. Wenn Sie darauf klicken, erscheint der Dialog mit der Auswahl, um den entsprechenden Dienst zu beenden.
Und hier ist mein Problem. Wenn etwas schief läuft und die Anwendung abstürzt, bleiben die Benachrichtigungen im Statusleistenbereich erhalten. Ist es möglich, alle Benachrichtigungen zu löschen, bevor der standard android force close-Dialog angezeigt wird?
Der eigentliche Fehler ist NPE, wenn ich versuche, die Aktivität zu öffnen und auf die Benachrichtigung zu klicken. Es ist repariert. Aber ich möchte nur wissen, wie man alles löscht, wenn die Anwendung abstürzt.
Hier ist meine letzte Lösung, inspiriert von der Post der Maus. In der Anwendung in create-Methode registriere ich Thread.setDefaultUncaughtExceptionHandler ()
%Vor%Danke
Sie können
anrufenThread.setDefaultUncaughtExceptionHandler ()
mit einem Handler, der aufgerufen wird, wenn eine Ausnahme nicht von Ihrer App im Thread behandelt wird. Dieser Handler wird aufgerufen, wenn Thread aufgrund einer unbehandelten Ausnahme abstirbt.
Hier würden Sie Aufräumarbeiten durchführen.
Genau so wird die ACRA Crash-Reporting-Bibliothek abstürzen.
Als Erstes müssen Sie sicherstellen, dass Ihr application should not get crashed at any cost
und Ihre Frage beantworten, Sie sollten onDestroy()
-Methode des Dienstes überschreiben und die Benachrichtigung dort abbrechen, da sie in beiden Fällen funktioniert, wenn der Dienst stoppt oder abstürzt .
Da Sie onDestroy()
nicht im Fall von crash
verwenden können, müssen Sie try catch block
eingeben und nach dem Auslösen die entsprechende Aktion ausführen.
Tags und Links android notifications