在开发安卓程序时,本地测试没任何问题,但去到客户处不是这里麻烦就是哪里不行。最后还来个程序崩溃。。最令人头疼的就是崩溃,因为程序的崩溃总是悄然无息的,有时候根本都没办法进行复现处理,,经过一段的摸索后,总算发现安卓有个程序崩溃前的接口(CrashHandler)在崩溃前会执行,这样就能很好的捕获到错误了。
好吧,估计大家都是伸手党,,直接上代码。
新建一个CrashHandler.java文件,内容如下:
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private static CrashHandler instance;
public static CrashHandler getInstance() {
if (instance == null) {
instance = new CrashHandler();
}
return instance;
}
public void init(Context ctx) {
Thread.setDefaultUncaughtExceptionHandler(this);
}
/**
* 核心方法,当程序crash 会回调此方法, Throwable中存放这错误日志
*/
@Override
public void uncaughtException(Thread arg0, Throwable arg1) {
String logPath;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
logPath = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ File.separator
+ File.separator
+ "log";
File file = new File(logPath);
if (!file.exists()) {
file.mkdirs();
}
try {
FileWriter fw = new FileWriter(logPath + File.separator
+ "E"+AppTimeUtils.formatDate(new Date(), "yyMMdd")+"log.log", true);
fw.write(new Date() + "\r\n");
fw.write("MedchCode:"+AppInfoKeeper.getMedchCode()+ "\r\n");
StackTraceElement[] stackTrace = arg1.getStackTrace();
fw.write(arg1.getMessage() + "\r\n");
for (int i = 0; i < stackTrace.length; i++) {
fw.write("file:" + stackTrace[i].getFileName() + " class:"
+ stackTrace[i].getClassName() + " method:"
+ stackTrace[i].getMethodName() + " line:"
+ stackTrace[i].getLineNumber() + "\r\n");
}
fw.write("\r\n");
fw.write("------------over_it-----------------");
fw.close();
ToastUtils.showToast("系统发生故障,请联系管理员。");
//WriteLog.writeTxtToFile("File_url==>"+logPath + File.separator + "E"+AppTimeUtils.formatDate(new Date(), "yyMMdd")+"log.log");
// 上传错误信息到服务器
// uploadToServer();
} catch (IOException e) {
WriteLog.writeTxtToFile("load file failed..."+ e.getCause());
}
}
arg1.printStackTrace();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
记得在MainActivity的onCreate里面加入:
CrashHandler crashHandler=CrashHandler.getInstance();
crashHandler.init(this);
就搞掂了。。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。