眾所周知,Android程序在運(yùn)行時(shí)遇到未處理的錯(cuò)誤,會(huì)彈出類似程序異常退出之類的dialog,然后自動(dòng)關(guān)閉。
那么這里介紹捕獲全局未知異常和修改那個(gè)彈出的dialog的方法籽慢。
- 首先,如很多網(wǎng)上的博客所言在程序的Application子類中添加如下代碼
//當(dāng)程序發(fā)生Uncaught異常時(shí)捕獲
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e) {
//做你要做的處理,比如把e.getMessage()保存到文件耿导,發(fā)送一個(gè)email等等,不是本篇重點(diǎn)态贤,不再贅述
}});
這里Thread.UncaughtExceptionHandler()
可以另寫一個(gè)類來繼承它舱呻,重構(gòu)代碼的事這里就不贅述了。
-
今天主要要講怎么修改讓用戶得知程序已經(jīng)崩潰了的方法悠汽。
網(wǎng)上很多方法是說在
uncaughtException
方法中Toast一條信息或者彈一個(gè)Dialog,這里本人親測(cè)(4.0以上的系統(tǒng))箱吕,都是行不通的
那么現(xiàn)在只能劍走偏鋒,另尋他方柿冲。
自定義一個(gè)Activity來代替Dialog的功能
- 定義一個(gè)類繼承Activity,AndroidManifest.xml文件中聲明此Activity茬高,并且在此Activity標(biāo)簽中聲明theme為繼承
@android:style/Theme.Dialog
的style - 在
uncaughtException
方法中
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);//關(guān)閉已奔潰的app進(jìn)程
特別注意
Intent.FLAG_ACTIVITY_NEW_TASK
這條flag一定要加,不然無法啟動(dòng)CrashActivitySystem.exit(1);
一定要假抄,不然也無法啟動(dòng)CrashActivity