Android使用UncaughtExceptionHandler捕获全局异常
2014-02-17 17:31
453 查看
Android系统的“程序异常退出”,给应用的用户体验造成不良影响,如:
为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。
1.自定义一个异常处理类MyUncaughtExceptionHandler实现系统接口UncaughtExceptionHandler,实现方法uncaughtException方法。在这个方法中实现处理异常的操作,比如给予用户友好的提示,将异常信息存入sd卡file等。
为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。
1.自定义一个异常处理类MyUncaughtExceptionHandler实现系统接口UncaughtExceptionHandler,实现方法uncaughtException方法。在这个方法中实现处理异常的操作,比如给予用户友好的提示,将异常信息存入sd卡file等。
public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; private static MyUncaughtExceptionHandler INSTANCE = new MyUncaughtExceptionHandler(); private Context mContext; private Thread.UncaughtExceptionHandler mDefaultHandler; private MyUncaughtExceptionHandler() { } public static MyUncaughtExceptionHandler getInstance() { return INSTANCE; } public void init(Context ctx) { mContext = ctx; mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread thread, Throwable ex) { // if (!handleException(ex) && mDefaultHandler != null) { // mDefaultHandler.uncaughtException(thread, ex); // } else { // android.os.Process.killProcess(android.os.Process.myPid()); // System.exit(10); // } Log.e("MyUncaughtExceptionHandler", ex.getMessage(),ex); new Thread() { @Override public void run() { Looper.prepare(); new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false) .setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.exit(0); } }) .create().show(); Looper.loop(); } }.start(); } /** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 * * @param ex * @return true:如果处理了该异常信息;否则返回false */ private boolean handleException(Throwable ex) { if (ex == null) { return true; } // new Handler(Looper.getMainLooper()).post(new Runnable() { // @Override // public void run() { // new AlertDialog.Builder(mContext).setTitle("提示") // .setMessage("程序崩溃了...").setNeutralButton("我知道了", null) // .create().show(); // } // }); return true; } }2.Activity主线程绑定自定义异常捕获类
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(this); //传入参数必须为Activity,否则AlertDialog将不显示。 } }
相关文章推荐
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常(末个人修正)
- Android使用UncaughtExceptionHandler捕获全局异常
- Android -- 使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- 【Android】使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常 android获取手机信息大全Java追加文件内容使用JavaMail发送邮件OkHttp获取系统时间
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- 【Android】 使用UncaughtExceptionHandler捕获全局异常
- android使用UncaughtExceptionHandler捕获全局异常(闪退)
- Android使用UncaughtExceptionHandler捕获全局异常
- Android使用UncaughtExceptionHandler捕获全局异常
- Android-----使用UncaughtExceptionHandler捕获全局异常