Wenn meine App abstürzt, bleibt sie einige Sekunden lang hängen, bevor Android mir mitteilt, dass die App abgestürzt ist und geschlossen werden muss. Also dachte ich daran, alle Ausnahmen in meiner App mit einem allgemeinen zu erfassen:
try {
// ...
} catch(Exception e) {
// ...
}
Und machen Sie eine neue Activity
, die erklärt, dass die Anwendung sofort abgestürzt ist (und den Benutzern auch die Möglichkeit gibt, eine E-Mail mit den Fehlerdetails zu senden), anstatt diese Verzögerung dank Android zu haben. Gibt es bessere Methoden, um dies zu erreichen, oder wird davon abgeraten?
Update: Ich verwende ein Nexus 5 mit aktiviertem ART und bemerke nicht die Verzögerung, die ich beim Absturz von Apps hatte (das "Hängen", von dem ich ursprünglich gesprochen habe). Ich denke, da jetzt alles nativer Code ist, geschieht der Absturz sofort zusammen mit dem Abrufen aller Absturzinformationen. Vielleicht ist das Nexus 5 nur schnell :) Unabhängig davon ist dies in zukünftigen Versionen von Android möglicherweise kein Problem (da ART die Standardlaufzeit in Android L sein wird).
Antworten:
Suchen Sie hier nach dem Link als Referenz .
Hier erstellen Sie eine Klasse namens ExceptionHandler , die
implements java.lang.Thread.UncaughtExceptionHandler
..In dieser Klasse erledigen Sie Ihre lebensrettenden Aufgaben wie das Erstellen von Stacktrace und das Hochladen von Fehlerberichten usw.
Jetzt kommt der wichtige Teil, dh wie man diese Ausnahme fängt. Obwohl es sehr einfach ist. Kopieren Sie die folgende Codezeile in jede Aktivität direkt nach dem Aufruf der Super-Methode in Ihre Overriden-
onCreate
Methode.Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
Ihre Aktivität könnte ungefähr so aussehen ...
public class ForceClose extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); setContentView(R.layout.main); } }
Hoffe das hilft...
quelle
UncaughtExceptionHandler
:) Vielen Dank für die Antwort. Ich werde es versuchen, wenn ich von der Arbeit nach Hause komme.Thread.setDefaultUncaughtExceptionHandler()
nicht in Ihre Haupt- / Erstaktivität aufgenommen werden, damit alle Ausnahmen innerhalb der Anwendung behandelt werden?Sie können einfach einen allgemeinen Warndialog verwenden, um schnell Fehlermeldungen anzuzeigen. Zum Beispiel...
//****************************************** //some generic method //****************************************** private void doStuff() { try { //do some stuff here } catch(Exception e) { messageBox("doStuff", e.getMessage()); } } //********************************************************* //generic dialog, takes in the method name and error message //********************************************************* private void messageBox(String method, String message) { Log.d("EXCEPTION: " + method, message); AlertDialog.Builder messageBox = new AlertDialog.Builder(this); messageBox.setTitle(method); messageBox.setMessage(message); messageBox.setCancelable(false); messageBox.setNeutralButton("OK", null); messageBox.show(); }
Sie können dieser Methode auch andere Optionen zur Fehlerbehandlung hinzufügen, z. B. die Stapelverfolgung drucken
quelle
Ich fand die "wtf" -Methode (was für ein schrecklicher Fehler) in der Log-Klasse. Aus der Beschreibung:
http://developer.android.com/reference/android/util/Log.html
Hoffe das hilft jemandem
quelle