Ich verwende diesen Code, um alle nicht abgefangenen Ausnahmen zu behandeln, die zum Absturz meiner Anwendung führen können.
%Vor%Wenn ich es mit einer bekannten, aber nicht abgefangenen Ausnahme (nur zum Testen) starte, wird die Aktivität "CrashActivity" aufgerufen, aber der Toast, der kommen muss, bevor er nicht erscheint.
Eigentlich wollte ich nur Toast zeigen und dann myContext.finish () aufrufen; anstatt zur CrashActivity zu gehen. Aber dieser Toast ist nicht sichtbar.
Wo irre ich mich?
Diese Frage beim googlen für genau das gleiche Problem gefunden.
Soweit ich das beurteilen kann, ist es nicht notwendig, dass Toast.show()
vom Benutzeroberflächenthread aufgerufen wird, solange es einen Anwendungskontext gibt.
AFAIK: Das Problem, das hier auftritt, ist das Folgende: Sie versuchen, einen Toast zu zeigen, und unmittelbar danach wird Ihre Anwendung von der VM heruntergefahren, was bedeutet, dass Ihr Toast ebenfalls heruntergefahren wird.
Eine Lösung für das Problem ist die folgende:
Was ich mache ist folgendes:
In Application::onCreate()
:
Es ist ähnlich wie die Toast-Benachrichtigung in ACRA funktioniert (tatsächlich ist das der Punkt, von dem ich den Hinweis erhalten habe).
Aufruf von System.exit(0)
aus Android UncaughtExceptionHandler
hilft der Anwendung, den Fehler zu beheben und die letzte Aktivität neu zu starten. IMHO, Benutzererfahrung wird deutlich verbessert. Dieser Ansatz muss jedoch auf mehreren Android-Plattformen erprobt und getestet werden. Habe das bei GB und JB probiert. Es hat gut funktioniert. Außerdem habe ich von anderen gehört (ich bin neu in Android), dass das Aufrufen von System.exit()
in Android nicht empfohlen wird, aber ... das als eine gute Wiederherstellungsoption für Android-Anwendungen verwenden könnte.
Tags und Links android toast uncaught-exception uncaughtexceptionhandler