統一管理程序異常

一、簡介

本文介紹的是對程序異常的統一管理,當程序發生異常的時候,不會讓用戶看到原生的崩潰界面,我們可以自定義出更人性化的界面,同時可以把程序的異常信息返回給服務器。讓我們可以輕鬆的維護程序,逐漸減少程序的bug,進而完善程序。

二、實現


import java.lang.Thread.UncaughtExceptionHandler;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Looper;
import android.support.v7.app.AlertDialog;
/**
 * 
 * @author Richard
 *
 */
public class CrashHandler implements UncaughtExceptionHandler {
    public static final String TAG = "CrashHandler";
    private static CrashHandler INSTANCE = new CrashHandler();
    private Context mContext;
    private Thread.UncaughtExceptionHandler mDefaultHandler;

    private CrashHandler() {

    }

    public static CrashHandler getInstance() {
        return INSTANCE;
    }

    public void init(Context ctx) {
        mContext = ctx;
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        System.out.println("uncaughtException");

        new Thread() {
            @Override
            public void run() {
                Looper.prepare();
                new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false).setMessage("程序崩潰了...")
                        .setNeutralButton("我知道了", new OnClickListener()
                // 完全退出程序需要把activity全部註冊到一個數組中
                {
                    public void onClick(DialogInterface dialog, int which) {
                        System.exit(0);
                        // 殺死線程,退出應用。
                        android.os.Process.killProcess(android.os.Process.myPid());
                        System.exit(1);
                    }
                }).create().show();
                Looper.loop();
            }
        }.start();
    }

    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return true;
        }
        return true;
    }
}

以上是自定義的異常處理器,於BaseApplication中,加入如下語句

 CrashHandler crashHandler = CrashHandler.getInstance();
  crashHandler.init(this); 

然後讓我們的activity繼承與此baseativity即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章