Toast wird nicht in UnCaughtExceptionHandler angezeigt

8

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?

    
Archie.bpgc 23.07.2012, 09:19
quelle

3 Antworten

3

Sie rufen wahrscheinlich den Toast aus einem Thread heraus, während ein Toast vom UI-Thread aufgerufen werden sollte ...

Wenn dies nicht hilft, geben Sie uns bitte die logcat-Ausgabe, damit wir sehen können, welche Art von Fehler Sie bekommen.

    
Ferdau 23.07.2012, 09:26
quelle
7

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:

  • Führe den Toast aus einem separaten Thread
  • aus
  • Verzögern Sie das Herunterfahren Ihrer Anwendung im Uncaught Exception Handler.

Was ich mache ist folgendes:

In Application::onCreate() :

%Vor%

Es ist ähnlich wie die Toast-Benachrichtigung in ACRA funktioniert (tatsächlich ist das der Punkt, von dem ich den Hinweis erhalten habe).

    
GeneSys 07.11.2012 18:40
quelle
3

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.

%Vor%     
user2144389 07.03.2013 13:36
quelle