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