package com.juns.wechat; import java.lang.Thread.UncaughtExceptionHandler; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; /** * @author juns create time: 2013-8-13 全局异常处理 */ public class CrashHandler implements UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; private static CrashHandler INSTANCE = new CrashHandler(); private Context mContext; @SuppressWarnings("unused") 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, final Throwable ex) { new Thread() { @Override public void run() { AlertDialog.Builder builder = new Builder(App.getInstance()); builder.setIcon(R.drawable.icon).setTitle(R.string.app_name) .setMessage("出了点小意外") .setPositiveButton("重新启动", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent i = mContext.getPackageManager() .getLaunchIntentForPackage( mContext.getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mContext.startActivity(i); App.getInstance2().exit(); } }).setNegativeButton("取消", null).show(); } }.start(); } /** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 * * @param ex * @return true:如果处理了该异常信息;否则返回false */ @SuppressWarnings("unused") private boolean handleException(Throwable ex) { if (ex == null) { return true; } return true; } }