Android捕获全局异常

程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常

效果图

  • 异常捕获处理前

  • 异常捕获处理后(将程序重新启动)

捕获异常的工具类

package com.example.kongqw.exceptiondemo;

import android.content.Context;
import android.support.v7.internal.app.ToolbarActionBar;
import android.util.Log;
import android.widget.Toast; /**
* Created by kongqw on 2015/11/3.
*/
public class KqwException implements Thread.UncaughtExceptionHandler {
private static KqwException myCrashHandler; private Context mContext; private KqwException(Context context) {
mContext = context;
} public static synchronized KqwException getInstance(Context context) {
if (null == myCrashHandler) {
myCrashHandler = new KqwException(context);
}
return myCrashHandler;
} public void uncaughtException(Thread thread, Throwable throwable) {
long threadId = thread.getId();
String message = throwable.getMessage();
String localizedMessage = throwable.getLocalizedMessage();
Log.i("KqwException", "------------------------------------------------------");
Log.i("KqwException", "threadId = " + threadId);
Log.i("KqwException", "message = " + message);
Log.i("KqwException", "localizedMessage = " + localizedMessage);
Log.i("KqwException", "------------------------------------------------------");
throwable.printStackTrace();
Log.i("KqwException", "------------------------------------------------------"); // TODO 下面捕获到异常以后要做的事情,可以重启应用,获取手机信息上传到服务器等
Log.i("KqwException", "------------------应用被重启----------------");
// 重启应用
mContext.startActivity(mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName()));
//干掉当前的程序
android.os.Process.killProcess(android.os.Process.myPid());
}
}

使用

在Application下添加Handler

注册Application

在清单文件下添加name属性

<application
……
android:name=".InitApplication"
…… >
<activity
…… >
<intent-filter>
……
</intent-filter>
</activity>
</application>

Application

package com.example.kongqw.exceptiondemo;

import android.app.Application;

/**
* Created by kongqw on 2015/11/3.
*/
public class InitApplication extends Application { @Override
public void onCreate() {
super.onCreate(); KqwException handler = KqwException.getInstance(this);
Thread.setDefaultUncaughtExceptionHandler(handler);
}
}

测试类

package com.example.kongqw.exceptiondemo;

import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); } public void bug(View view) {
Toast.makeText(this, "程序崩溃", Toast.LENGTH_SHORT).show();
// 除数为0 导致程序崩溃
int a = 1 / 0;
}
}

XML布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main"> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="bug"
android:text="点击程序崩溃" />
</RelativeLayout>

最新文章

  1. JAVA 读写Excel
  2. MySQL5.7中新增的JSON类型的使用方法
  3. iOS开发Swift篇—(八)函数(2)
  4. php实现的IMEI限制的短信验证码发送类
  5. 【jQuery基础学习】05 jQuery与Ajax以及序列化
  6. matlab函数调用及数据传递
  7. hdu 2060
  8. dedecms内容页调用缩略图 缩略图多种用法(借鉴)
  9. luigi学习7--running from command line
  10. 一张图让你看懂锻压、CNC、压铸、冲压四类工艺!
  11. IOS 图片阴影,圆角等处理
  12. 《APUE》-第五章标准IO库
  13. 在 Windows Media Center 中观看电视
  14. android错误之android.content.res.Resources$NotFoundException:
  15. ASP.NET Core 开源论坛项目 NETCoreBBS
  16. 2018.09.29 Lua
  17. P1897 电梯里的爱情
  18. http statusCode(状态码)含义
  19. cyclone IV中DDR的一个疑惑
  20. 小程序获取view元素的高度

热门文章

  1. Jmeter启动问题总结
  2. xcode8的那些坑儿
  3. vim 去除代码行号并正常缩进代码
  4. Random Forest vs GradientBoostingDecisionTree
  5. PostgreSQL的insert注入
  6. [Vijos 2024]无向图最短路径
  7. 【BZOJ3631】【JLOI2014】松鼠的新家
  8. ●洛谷 P3616 富金森林公园
  9. [bzoj4893]项链分赃
  10. MQ(消息队列)常见的应用场景解析