你的应用崩溃了,你捕获了吗?

今天是圣诞节,首先祝大家圣诞节快乐我们都知道一个在好的应用,上线以后在所难免也会有bug存在,有bug很正常,但是出了bug,你没有及时修复,这就比较尴尬了,轻则你会遭到领导的批评,而重责则会影响用户的使用,从而流失一批客户群,所以啊,监控bug的出现,并及时修复,也是开发当中很重要的一步。

 Android发展到今天,对于bug的收集及监控,早已涌现出了很多出色的第三方平台,比如,百度,友盟,阿里,bugtags等等,提供很方便的接入方法,这些第三方平台,像bugtags,在收集应用的bug时,就显的比较及时,而且相关信息,包括,操作步骤,所用手机型号,及bug位置等等,捕获的很是全面,而且还支持在线提bug,给测试人员提供很大的方便,但是,很不幸的是它是收费的,如果想免费的话,可以使用友盟,友盟也是一个不错的收集bug平台。

毕竟第三方不是自己的,那么,在不用第三方的情况下,我们该如何收集和监控bug呢?

我们都知道,当应用发生crash时,系统就会kill掉正在执行的程序,其实说白了就是应用闪退或者说崩溃了,对于这种崩溃,还好,Android还比较仁慈,给我们提供了处理这种异常的方式,我们打开Thread这个类的源码,我们会看到这样一个方法:

/**
 * Sets the default uncaught exception handler. This handler is invoked in
 * case any Thread dies due to an unhandled exception.
 *
 * 
@param handler
 
*            The handler to set or null.
 */
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler) {
    Thread.
defaultUncaughtHandler = handler;
}

对以上的代码,我们不难看出,当应用出现了crash之后,系统会默认调出UncaughtExceptionHandleruncaughtException方法,在此方法里我们就可以捕获到相关异常,把它存到sd卡或者上传到服务端,也是也是一件特别简单的事,想必大多数人已经知道了,无非就是去实现UncaughtExceptionHandler,然后在uncaughtException方法里捕获异常,最后再调用Thread的setDefaultUncaughtExceptionHandler()方法来设置线程默认的异常处理器,那么久可以轻松捕获异常了,来看一下例子吧:


/**
 * Created by xiaoming.li on 16/12/25.
 * 
异常捕获工具类
 */

public class CrashHandlerUtils implements Thread.UncaughtExceptionHandler {
    private static CrashHandlerUtils mInstance new CrashHandlerUtils();
    private 
Thread.UncaughtExceptionHandler mDefaultHandler;
    private 
Context mContext;

    private 
CrashHandlerUtils() {
    }

    public static CrashHandlerUtils getInstance() {
        return mInstance;
    
}

    /**
     * 
对工具类初始化
     */
    
public void init(Context context) {
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        
Thread.setDefaultUncaughtExceptionHandler(this);
        
mContext = context;
    
}

    /**
     * 
这个方法用于捕获异常,ex就是我们捕获的异常,
     * 
在这里我们就可以把相关信息收集到sd卡或者上传到服务端,以便开发人员做修复
     */
    
@Override
    
public void uncaughtException(Thread threadThrowable ex) {
        saveExceptionToSDcard(ex);//存到sd
        
saveExceptionToServer(ex);//保存到服务端
    
}

    /**
     * 
保存到sd
     */
    
private void saveExceptionToSDcard(Throwable ex) {
        //判断sd卡是否就绪,也就是是否存在,不存在久存不进去
        
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            return;
        
}
        //下面就是写进sd卡了,就不写,大家可以自己来写。
    
}

    /**
     * 
上传到服务端
     */
    
private void saveExceptionToServer(Throwable ex) {

    }

    /**
     * 
手机崩溃时的相关信息,崩溃时间,手机的相关信息,应用的信息
     * 
在存sd卡或者上传服务端时,可以一并上传
     */
    
private void getExceptionInFo() throws PackageManager.NameNotFoundException {
        //获取崩溃时间
        
long current = System.currentTimeMillis();
        
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current));
        
PackageManager packageManager = mContext.getPackageManager();
        
PackageInfo inFo = packageManager.getPackageInfo(mContext.getPackageName()PackageManager.GET_ACTIVITIES);
        int 
versionCode = inFo.versionCode;
        
String versionName = inFo.versionName;
        
//Android版本号:
        
String release = Build.VERSION.RELEASE;
        int 
sdkInt = Build.VERSION.SDK_INT;
        
//手机制造商
        
String mobileName = Build.MANUFACTURER;
        
//手机型号
        
String model = Build.MODEL;
        
//CPU架构
        
String cpu = Build.CPU_ABI;
    
}
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一鸣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值