When writing a program, most of the time, we will know the code block to add Try,catch, such as
try { mroot = inflater.inflate (r.layout.fragment_setting, container, false); Initview (Mroot); } catch (Exception e) { log.error ("Settingfragment", E), } catch (OutOfMemoryError e) { log.error (" Settingfragment.outofmemoryerror ", e); }
But some places forget to add, it will cause the program to collapse, the entire app will stop running, like this:
Obviously this kind of user experience is very bad, we need to avoid, in this case, we need to add a default exception handler, in the event of an exception, to be able to capture, give the user a hint or jump to the home page, so that the brutal pop-up of a program to stop running the error. OK, so let's start adding this default exception handler, usually in the rewritten application Class OnCreate (), which we need to add once the app is started.
/** * */package Com.figo.study;import Java.io.printwriter;import Java.io.StringWriter;import Java.io.writer;import Java.util.arraylist;import Com.figo.study.utils.crashhandler;import android.app.Activity; Import Android.app.application;import android.content.intent;import Android.util.log;import android.widget.Toast;/ ** * @author Figo * */public class MainApplication extends application{ @Override & nbsp public void OnCreate () { super.oncreate (); //Set thread Exception Hand ler Initexhandler ();</span> } public void Initexhandler () { //Set the Crashhandler as the default processor for the program Crashhandler Cat CHEXCEP = new Crashhandler (this); Thread.setdefaultuncaughtexceptionhandler (CATCHEXCEP); } }
exception Handling Class Crashhandler.java
Package Com.figo.study.utils;import Java.lang.thread.uncaughtexceptionhandler;import Android.app.AlarmManager; Import Android.app.pendingintent;import Android.content.context;import Android.content.intent;import Android.os.looper;import Android.util.log;import Android.widget.toast;import Com.figo.study.aactivity;import Com.figo.study.mainapplication;public class Crashhandler implements Uncaughtexceptionhandler {private Thread.uncaughtexceptionhandler Mdefaulthandler; public static final String TAG = "CATCHEXCEP"; MainApplication Application; Public Crashhandler (mainapplication application) {//Get system default Uncaughtexception processor Mdefaulthandler = Th Read.getdefaultuncaughtexceptionhandler (); this.application = Application; } @Override public void uncaughtexception (thread thread, Throwable ex) {if (!handleexception ( EX) && Mdefaulthandler! = null) {//If the user does not handle then let the system default exception handler handle Mdefaulthandler.uncaughtexception (thread, ex); }else{Intent Intent = new Intent (Application.getapplicationcontext (), mainactivity.class); Pendingintent restartintent = pendingintent.getactivity (Application.getapplicationcon Text (), 0, intent, intent.flag_activity_new_task); Exit current program, jump to home mainactivity.class alarmmanager mgr = (alarmmanager) application.getsystemservice (Co ntext. Alarm_service); Mgr.set (ALARMMANAGER.RTC, System.currenttimemillis () + 1000,restartintent); Restart app application.finishactivity after 1 seconds (); }}/** * Custom error handling, collect error messages to send error reports and so on are done here. * * @param ex * @return true: Returns False if the exception information is processed; */Private Boolean handleexception (Throwable ex) {if (ex = = null) {REturn false; }//Use Toast to display exception information new Thread () {@Override public void run () { Looper.prepare (); Toast.maketext (Application.getapplicationcontext (), "Sorry, the program has an exception and is about to exit.", Toast.length_short). Show (); Looper.loop (); }}.start (); return true; } }
Android Development Step-by-step 57:uncaughtexceptionhandler uncaught exception handler