安卓crash捕捉异常应用
一、捕捉异常后存入到手机本地
首先,导入crash类库(此类库可从本人资源分享中下载)
第二步,在继承application的类中初始化类库中的CrashHandler,如图中两行代码
并且在manifest文件中加入scard写入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第三步,尝试制造异常并捕捉查看
第四步,在手机中查找crash文件,即捕捉后异常错误
第五步、研究该捕捉异常的代码核心解释,如下:
public class CrashHandler implements UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler mDefaultHandler;
private static CrashHandler INSTANCE = new CrashHandler();
public static CrashHandler getInstance() {
return INSTANCE;
}
return INSTANCE;
}
public void init(Context context) {
mContext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
mContext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
handleException(ex);
ex.printStackTrace();
// 退出程序
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
// }
}
public void uncaughtException(Thread thread, Throwable ex) {
handleException(ex);
ex.printStackTrace();
// 退出程序
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
// }
}
}
实现接口UncaughtExceptionHandler ,必须重写方法uncaughtException,当捕捉到异常时回调方法uncaughtException,故此,在方法uncaughtException中写处理异常的方法,即写入本地的方法,异常为捕获到并传过来的ex。
init方法中两个及其重要的方法,其意思是,当捕捉到异常线程的handler时,为Thread设置一个系统默认的handler,已完成后面对捕获的handler处理的任务,具体可详见:http://www.cnblogs.com/freeliver54/archive/2011/10/17/2215423.html
二、捕捉异常后发送到邮箱
第一步,同上。
第二步,在继承application的类中初始化类库中的ErrorReportModel,
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
SetMailbox();
// SaveLocal();
}
/**
* 保存crash至手机本地
*/
public void SaveLocal() {
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());
}
/**
*
* 将crash发送到制定邮箱
*/
public void SetMailbox() {
ErrorReportModel errorReportModel = ErrorReportModel
.getErrorReportModel(this);
}
}
@Override
public void onCreate() {
super.onCreate();
SetMailbox();
// SaveLocal();
}
/**
* 保存crash至手机本地
*/
public void SaveLocal() {
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());
}
/**
*
* 将crash发送到制定邮箱
*/
public void SetMailbox() {
ErrorReportModel errorReportModel = ErrorReportModel
.getErrorReportModel(this);
}
}
并且修改类库中的邮箱帐号(一般为你的QQ邮箱),如图:
打开类sendemailutil类,找到修改邮箱数组toEmails
第三步,制造崩溃。
第四步,邮箱收到崩溃邮件。
三、利用第三方数据统计收集崩溃信息(例如友盟统计分析)
http://www.umeng.com/analytics