android检查崩溃的方法,Android 获取应用Crash信息的方法

本文介绍了如何在Android应用中实现自定义异常处理,通过创建CrashHandler类并实现Thread.UncaughtExceptionHandler接口,捕获并记录程序崩溃信息。当应用程序发生崩溃时,这些信息会被保存到SD卡上的文本文件,并可以进一步上传到服务器,帮助开发者定位问题。在MyApplication中初始化CrashHandler,并在AndroidManifest.xml中声明自定义Application。此外,还需要添加相应的权限以进行SD卡写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android应用不可避免的都会发生crash,即程序崩溃

可能是系统或程序有bug等内部原因,或者是网络状况不佳等外部原因

当应用发生crash时,如果只是你一个人使用的应用,那自然容易检测出原因,可是如果应用有广泛的使用者,面对市面上众多的Rom和机型,就需要一个个获取发生crash时的系统情况了,将异常信息记录下来并发送到服务器,供开发者了解情况并调试

Android提供有默认的异常处理方法,也可以自定义异常处理方法

在Thread类下有如下方法用来设置自定义异常处理器public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler) {

Thread.defaultUncaughtHandler = handler;

}

当crash发生时,系统会回调UncaughtExceptionHandler的如下方法,我们就需要来重写该方法public void uncaughtException(Thread thread, Throwable throwable){

}

因此,现在需要进行的步骤是:

1. 实现Thread.UncaughtExceptionHandler接口,自定义异常处理器

2. 重写uncaughtException方法

3. 在uncaughtException方法中将crash信息以及当前手机信息保存到文本中,然后将文本打包发送到服务器

新建CrashHandler类继承于Thread.UncaughtExceptionHandler/**

* Crash处理 CZY

* Created by ZY on 2016/8/27.

*/public class CrashHandler implements Thread.UncaughtExceptionHandler {    //定义文件存放路径

private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/CrashInfo/";    //定义文件后缀

private static final String FILE_NAME_SUFFIX = ".txt";    //系统默认的异常处理器

private Thread.UncaughtExceptionHandler defaultCrashHandler;    private static final String TAG = "CrashHandler";    private static CrashHandler crashHandler = new CrashHandler();    //私有化构造函数

private CrashHandler() {

}    //获取实例

public static CrashHandler getInstance() {        return crashHandler;

}    public void init() {

defaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();        //设置系统的默认异常处理器

Thread.setDefaultUncaughtExceptionHandler(this);

}    @Override

public void uncaughtException(Thread thread, Throwable throwable) {        //记录异常信息到本地文本中

dumpExceptionToSDCard(throwable);        if (defaultCrashHandler != null) {            //如果在自定义异常处理器之前,系统有自己的默认异常处理器的话,调用它来处理异常信息

defaultCrashHandler.uncaughtException(thread, throwable);

} else {

Process.killProcess(Process.myPid());

}

}    //记录异常信息到本地文本中

private void dumpExceptionToSDCard(Throwable throwable) {        //如果SD卡非正常挂载,则用Log输出异常信息

if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

Log.e(TAG, "SD卡出错");            return;

}

File dir = new File(PATH);        if (!dir.exists()) {

dir.mkdirs();

}        long currentTime = System.currentTimeMillis();

String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(currentTime));        //建立记录Crash信息的文本

File file = new File(PATH + time + FILE_NAME_SUFFIX);        try {

PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter(file)));

printWriter.println(time);

dumpPhoneInfo(printWriter);

printWriter.println();

throwable.printStackTrace(printWriter);

printWriter.close();

} catch (Exception e) {

e.printStackTrace();

Log.e(TAG, "记录Crash信息失败");

}

}    //记录手机信息

private void dumpPhoneInfo(PrintWriter printWriter) {        //系统版本号

printWriter.print("OS Version:");

printWriter.print(Build.VERSION.RELEASE);

printWriter.print("_");

printWriter.println(Build.VERSION.SDK_INT);        //硬件制造商

printWriter.print("Vendor:");

printWriter.println(Build.MANUFACTURER);        //系统定制商

printWriter.print("Brand:");

printWriter.println(Build.BRAND);

}

}

采用了单例模式,每个方法的作用也都注释了其作用

然后,选择在Application中初始化CrashHandler

所以需要自定义Application/**

* Created by ZY on 2016/8/27.

*/public class MyApplication extends Application {    @Override

public void onCreate() {        super.onCreate();

CrashHandler crashHandler = CrashHandler.getInstance();

crashHandler.init();

}

}

需要在AndroidManifest.xml文件中声明之

即在application标签下添加以下一行语句android:name=".MyApplication"

此外,因为还涉及到了内存卡写操作,所以需要声明下权限

然后,在主布局文件中声明个按钮,在点击后抛出一个自定义异常findViewById(R.id.crashTest).setOnClickListener(new View.OnClickListener() {            @Override

public void onClick(View v) {                throw new RuntimeException("自定义异常");

}

});

点击后程序异常退出,打开手机的文件内容管理器

可以看到多了一个CrashInfo文件夹

AAffA0nNPuCLAAAAAElFTkSuQmCC

这里写图片描述

保存异常信息的文件

AAffA0nNPuCLAAAAAElFTkSuQmCC

这里写图片描述

异常信息

AAffA0nNPuCLAAAAAElFTkSuQmCC

这里写图片描述

这要,就获取到了异常信息,这里只是将信息保存到了SD卡上,在实际开发中再添加上传到服务器的操作即可

作者:leavesCZY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值