美文网首页读书郎代码狗仓库App
Android异常捕获记录本地

Android异常捕获记录本地

作者: SameX_4869 | 来源:发表于2016-07-31 17:47 被阅读85次

声明与初始化SP,自定义异常捕获
继承UncaughtExceptionHandler重写uncaughtException
在里面进行写入文件的操作,每条异常前最好使用分割线和日期作为分隔
可以等待3秒左右直接强退应用
然后再Application里注册

public class BaseException extends RuntimeException {
private static final long serialVersionUID = 8013687806066914955L;

public BaseException() {
super();
}

public BaseException(String detailMessage, Throwable throwable) {
super(detailMessage, throwable);
}

public BaseException(String detailMessage) {
super(detailMessage);
}

public BaseException(Throwable throwable) {
super(throwable);
}

}

public abstract class BaseCrashHandler implements UncaughtExceptionHandler{

@Override
public void uncaughtException(Thread thread, Throwable ex) {

if (handleException(ex)) {
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
System.exit(1);
}
}
public abstract boolean handleException(Throwable ex);
}

public class CrashHandler extends BaseCrashHandler {
private Context context;

public CrashHandler(Context context) {
this.context = context;
}

@Override
public boolean handleException(Throwable ex) {
if (ex == null) {
return false;
}

new Thread() {

@Override
public void run() {
Looper.prepare();
Toast.makeText(context, "程序异常退出啦撸!!!", Toast.LENGTH_SHORT).show();
Looper.loop();
}

}.start();

saveLog(ex);
return true;
}

private void saveLog(Throwable ex) {
try {
File errorDir = new File(context.getExternalCacheDir().getAbsolutePath() + "/CILogs");
if (!errorDir.exists()) {
errorDir.mkdirs();
}
File errorFile = new File(errorDir, "/crash_log.log");
if (!errorFile.exists()) {
errorFile.createNewFile();
}
OutputStream out = new FileOutputStream(errorFile, true);
out.write(("\n\n-----错误分割线" + DateFormat.format("yyyy年MM月dd日 HH时mm分ss秒 E ", new Date()) + "-----\n\n").getBytes());
PrintStream stream = new PrintStream(out);
ex.printStackTrace(stream);
stream.flush();
out.flush();
stream.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

public class MyApp extends Application {

@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext()));
}

} 

相关文章

  • Android全局捕获崩溃异常记录

    ## Android全局捕获崩溃异常记录,保存至本地并定时删除 ## UncaughtExceptionHandl...

  • Android异常捕获记录本地

    声明与初始化SP,自定义异常捕获继承UncaughtExceptionHandler重写uncaughtExcep...

  • 开发中容易踩的坑

    dubbo 服务端异常默认是不会在本地捕获(HeaderExchangeHandler),异常日志记录是通过Exc...

  • android so库导致的闪退及tombstone分析

    android中有3种crash情况:未捕获的异常、ANR和闪退。未捕获的异常一般用crash文件就可以记录异常信...

  • 异常处理

    一:异常处理 #######1.1 一般处理方式:a.app异常闪退,那么捕获crash信息,并记录在本地沙盒中。...

  • Android 如何捕获崩溃异常并重启应用

    第一种方法:通过AppUncaughtExceptionHandler来捕获异常 Android全局捕获崩溃异常记...

  • Android 捕获异常

    在市面上有很多异常捕获SDK,比如bugly,友盟等。今天记录一个自定义全局捕获异常功能。 主要用到的是Threa...

  • android异常捕获

    android异常分为两种,一种是java代码导致的异常,一种是Native异常. 在java代码异常中,主要是出...

  • Android异常崩溃捕获

    Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象。而...

  • Android全局异常捕获

    稳定性测试是保障客户端稳定性的一种手段,致力于提前发现问题,收集更多异常信息,复现线上闪退。当Android客户端...

网友评论

    本文标题:Android异常捕获记录本地

    本文链接:https://www.haomeiwen.com/subject/dnxxsttx.html