Android程序崩溃统一处理机制
来源:互联网 发布:石家庄软件开发培训 编辑:程序博客网 时间:2024/06/04 19:32
在应用发布以后,由于安卓机型的千差万别 ,可能会出现各种各样的问题,这时候如果我们可以将这些信息收集起来,并进行修改就很不错了。下面就来讨论一下怎么处理程序崩溃以后,错误信息的手机。
Java中已经提供了一个接口Thread.UncaughtExceptionHandler来对运行时的异常进行处理。只需要实现这个接口,并覆写 public void uncaughtException(Thread thread, Throwable ex) 方法即可。
由于Application是Android应用启动的第一个入口,所以我们实现自己的Application,让他去实现Thread.UncaughtExceptionHandler接口。使用的时候有一下几个注意事项
1. 需要在manifest文件中的application节点,添加你自己实现的Application类,例如
<application android:name=".CrashApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
2.在实现的Application类的onCreate方法中,设置本类为默认的异常处理器,添加如下代码:
Thread.setDefaultUncaughtExceptionHandler(this); 3.在uncaughtException(Thread thread, Throwable ex) 方法中添加实现。
示例代码如下,实现了收集发生异常的手机设备信息和异常信息,并将这些信息保存至本地
public class CrashApplication extends Application implements UncaughtExceptionHandler {// 单例模式private static CrashApplication INSTANCE;private Context mContext;// 用来存储设备信息和异常信息private Map<String, String> info = new HashMap<String, String>();// 用于格式化日期,作为日志文件名的一部分private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");public CrashApplication() {}public static CrashApplication getInstance() {if (INSTANCE == null) {INSTANCE = new CrashApplication();}return INSTANCE;}@Overridepublic void onCreate() {super.onCreate();mContext = this;// 设置该CrashHandler为程序的默认处理器Thread.setDefaultUncaughtExceptionHandler(this);}public void uncaughtException(Thread thread, Throwable ex) {// TODO,在这里你可以处理当 程序崩溃时你想做的事情// 收集设备参数信息collectDeviceInfo(mContext);// 保存日志文件saveCrashInfo2File(ex);}/** * 收集设备参数信息 * */public void collectDeviceInfo(Context context) {try {PackageManager pm = context.getPackageManager();// 获得包管理器PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);// 得到该应用的信息,即主Activityif (pi != null) {String versionName = pi.versionName == null ? "null" : pi.versionName;String versionCode = pi.versionCode + "";info.put("versionName", versionName);info.put("versionCode", versionCode);}} catch (NameNotFoundException e) {e.printStackTrace();}Field[] fields = Build.class.getDeclaredFields();// 反射机制for (Field field : fields) {try {field.setAccessible(true);info.put(field.getName(), field.get("").toString());} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}/** * 将异常信息保存至SD卡crash目录 */private String saveCrashInfo2File(Throwable ex) {StringBuffer sb = new StringBuffer();for (Map.Entry<String, String> entry : info.entrySet()) {String key = entry.getKey();String value = entry.getValue();sb.append(key + "=" + value + "\r\n");}Writer writer = new StringWriter();PrintWriter pw = new PrintWriter(writer);ex.printStackTrace(pw);Throwable cause = ex.getCause();// 循环着把所有的异常信息写入writer中while (cause != null) {cause.printStackTrace(pw);cause = cause.getCause();}pw.close();// 记得关闭String result = writer.toString();sb.append(result);// 保存文件long timetamp = System.currentTimeMillis();String time = format.format(new Date());String fileName = "crash-" + time + "-" + timetamp + ".log";if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {try {File dir = new File(Environment.getExternalStorageDirectory(), "crash");if (!dir.exists())dir.mkdir();File file = new File(dir, fileName);FileOutputStream fos = new FileOutputStream(file);fos.write(sb.toString().getBytes());fos.close();return fileName;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return null;}}
0 0
- Android程序崩溃统一处理机制
- Android程序崩溃统一处理机制
- Android程序崩溃处理
- Android:处理程序崩溃异常
- Android:处理程序崩溃异常
- Android程序异常崩溃处理
- android处理crash程序崩溃异常
- Android 程序崩溃后的处理
- Android程序崩溃异常处理框架
- android处理crash程序崩溃异常
- springmvc 统一处理异常机制
- springboot统一异常处理机制
- SpringMVC统一异常处理机制
- 程序崩溃的处理
- 3 程序崩溃处理
- 程序崩溃处理
- Android异常统一处理
- Android全局异常处理(捕获异常,不弹出程序崩溃)
- iOS7开发注意事项
- ios6、7 版本适配
- ExtJs 入门教程
- 15年滨州学院CSDN高校俱乐部第二届编程比赛
- Google Protocol Buffers和java字符串处理对比
- Android程序崩溃统一处理机制
- ViewPager 详解(一)---基本入门
- iOS 推送处理
- LeetCode | Plus One
- 大数据_小数据01
- quick cocos2dx lua 网络图片 下载 自动更新
- 福州省直公积金还贷支取步骤
- 无需翻墙, Android官方开发相关下载资源一揽子大汇总
- 湖北江汉汉江哪里可以钓鱼