1. 首先,我們得建立一個UncaughtExceptionHandler的具體類,好比: php
public class CrashHandler implements 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);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) { //當有未處理的異常發生時,就會來到這裏。。
Log.d("Sandy", "uncaughtException, thread: " + thread
+ " name: " + thread.getName() + " id: " + thread.getId() + "exception: "
+ ex);
String threadName = thread.getName();
if ("sub1".equals(threadName)){
Log.d("Sandy", ""xxx);
}else if(){
//這裏咱們能夠根據thread name來進行區別對待,同時,咱們還能夠把異常信息寫入文件,以供後來分析。
}
}
} java
2. 其次,咱們自定義Application類 android
public class OurApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler handler = CrashHandler.getInstance();
handler.init(getApplicationContext()); //在Appliction裏面設置咱們的異常處理器爲UncaughtExceptionHandler處理器
}
} 多線程
3. 配置AndroidManifest.xml文件
因爲咱們使用自定義的Application,因此咱們要在AndroidManifest.xml文件中申明它 app
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name=".OurApplication"
android:debuggable="true"
> ide
4. 測試
咱們在Activity裏面啓動一個線程,而後線程裏面拋出一個異常,看看程序會怎麼樣 測試
Button btn = (Button) findViewById(R.id.bt);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Log.d("Sandy", "I am a sub thread");
String s = null;
s.toString(); //拋出NullPointException
}
}, "sub thread");
thread.start();
} this
5. 結果
因爲咱們有默認未處理異常的處理程序,因此會打印下面的日誌信息,而不會拋出異常致使程序異常終止
D/Sandy ( 2228): I am a sub thread
D/Sandy ( 2228): uncaughtException, thread: Thread[sub thread,5,main] name: sub thread id: 148exception: java.lang.NullPointerException spa