android 自定義全局未處理異常捕獲器

jopen 11年前發布 | 24K 次閱讀 Android開發 移動開發 Android

1:異常處理捕獲類

package com.oa.main.common.tool;

import android.content.Context;
import android.util.Log;

/**
 * 自定義全局未處理異常捕獲器
 * Created  on 13-12-13.
 */
public class CrashHandler implements Thread.UncaughtExceptionHandler {


    private static CrashHandler instance;  //單例引用,這里我們做成單例的,因為我們一個應用程序里面只需要一個UncaughtExceptionHandler實例

    private CrashHandler() {
    }

    public synchronized static CrashHandler getInstance() {  //同步方法,以免單例多線程環境下出現異常
        if (instance == null) {
            instance = new CrashHandler();
        }
        return instance;
    }

    public void init(Context ctx) {  //初始化,把當前對象設置成UncaughtExceptionHandler處理器
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    public void uncaughtException(Thread thread, Throwable ex) {  //當有未處理的異常發生時,就會來到這里。。
        Log.d("----------------捕獲異常-------------!", "uncaughtException, thread: " + thread
                + " name: " + thread.getName() + " id: " + thread.getId() + "exception: "
                + ex);
        String threadName = thread.getName();
        //這里我們可以根據thread name來進行區別對待,同時,我們還可以把異常信息寫入文件,以供后來分析。
//        if ("sub1".equals(threadName)) {
//        } else if () {
//        }
    }


}



二:設置全局Application

public class ApplicationTrans extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        CrashHandler handler = CrashHandler.getInstance();
        handler.init(getApplicationContext()); //在Appliction里面設置我們的異常處理器為UncaughtExceptionHandler處理器
    }
}



三:在androidManifest中配置全局

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/activityTheme"
        android:name=".common.entity.ApplicationTrans"
        android:debuggable="true">



到此自定義捕獲未處理異常結束!

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!