android反馈Crash报告

2024-06-24 04:18
文章标签 android 报告 反馈 crash

本文主要是介绍android反馈Crash报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此文章转载他人,担有所改动,,在全局获取异常有所改动


为什么需要反馈Crash报告?

 

做Android应用程序,要尽量避免程序Crash的发生。虽然说零Crash是程序员追逐的最终目标,但是现实的情况是,程序员只能尽量的减少Crash的发生,而几乎不可能完全杜绝Crash。也许,你认为你的应用的健壮性已经近乎完美,轻松的经受住了测试部门魔鬼般的考验,但是当你的应用发布到市场,面对百万甚至千万级别的用户的时候,可能就没有那么幸运了。

基于以上原因,一般的应用程序,都要有一个Crash反馈的机制。程序员可以根据反馈的结果,对当前的版本的代码进行改进,使发布的下一个版本更加稳定。

 

如何反馈?

 

先来看如何捕获Crash的发生。

 

Java中有一个接口,UncaughtExceptionHandler,先看描述。

static interface

Thread.UncaughtExceptionHandler 
          当 Thread 因未捕获的异常而突然终止时,调用处理程序的接口。

 

再来看Thread类中的一个方法。

static void

setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 
          设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。

 

看了这些API,就知道我们需要实现这样一个接口,然后在程序的主线程中设置处理程序。

 

看下面的接口实现。

 

  1. package com.arui.framework.android.exception;  
  2.   
  3.    
  4.   
  5. import java.lang.Thread.UncaughtExceptionHandler;  
  6.   
  7. import android.content.Context;  
  8.   
  9.    
  10.   
  11. /** 
  12.  
  13.  * Default exception handler for all activities. 
  14.  
  15.  *  
  16.  
  17.  * @author http://blog.csdn.net/arui319 
  18.  
  19.  * @version 2011/12/01 
  20.  
  21.  *  
  22.  
  23.  */  
  24.   
  25. public class DefaultExceptionHandler implements UncaughtExceptionHandler {  
  26.   
  27.    
  28.   
  29.     private Context act = null;  
  30.   
  31.    
  32.   
  33.     public DefaultExceptionHandler(Context act) {  
  34.   
  35.        this.act = act;  
  36.        
  37.        //把系统错误改成自己的
           Thread.setDefaultUncaughtExceptionHandler(this);
  38.   
  39.     }  
  40.   
  41.    
  42.   
  43.     @Override  
  44.   
  45.     public void uncaughtException(Thread thread, Throwable ex) {  
  46.   
  47.    
  48.   
  49.        // 收集异常信息 并且发送到服务器  
  50.   
  51.        sendCrashReport(ex);  
  52.   
  53.    
  54.   
  55.        // 等待半秒  
  56.   
  57.        try {  
  58.   
  59.            Thread.sleep(500);  
  60.   
  61.        } catch (InterruptedException e) {  
  62.   
  63.            //  
  64.   
  65.        }  
  66.   
  67.          
  68.   
  69.        // 处理异常  
  70.   
  71.        handleException();  
  72.   
  73.    
  74.   
  75.     }  
  76.   
  77.    
  78.   
  79.     private void sendCrashReport(Throwable ex) {  
  80.   
  81.    
  82.   
  83.        StringBuffer exceptionStr = new StringBuffer();  
  84.   
  85.        exceptionStr.append(ex.getMessage());  
  86.   
  87.    
  88.   
  89.        StackTraceElement[] elements = ex.getStackTrace();  
  90.   
  91.        for (int i = 0; i < elements.length; i++) {  
  92.   
  93.            exceptionStr.append(elements[i].toString());  
  94.   
  95.        }  
  96.   
  97.    
  98.   
  99.        //TODO   
  100.   
  101.        //发送收集到的Crash信息到服务器  
  102.   
  103.     }  
  104.   
  105.    
  106.   
  107.     private void handleException() {  
  108.   
  109.        //TODO   
  110.   
  111.        //这里可以对异常进行处理。  
  112.   
  113.        //比如提示用户程序崩溃了。  
  114.   
  115.        //比如记录重要的信息,尝试恢复现场。  
  116.   
  117.        //或者干脆记录重要的信息后,直接杀死程序。  
  118.   
  119.     }  
  120.   
  121.    
  122.   
  123. }  


 

 

在主Activity的onCreate(Bundle savedInstanceState)方法中增加如下代码。

 

  1. Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(  
  2.   
  3.        this.getApplicationContext()));  


 改动

/**
* 新建一个类是在AndroidManifest里面调用的
*/
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MyCrashHandler.getInstance().init(this);
    }
}
//AndroidManifest
<application android:label="@string/app_name"
                 android:name=".MyApplication"
android:icon="@drawable/ic_launcher">


 

如何发送到服务器?

 

这个不同的项目组会有不同的方式,具体不在这里讨论了。需要提醒的是,除了把异常的具体信息发送给服务器外,至少还需要发送版本信息,这样程序员才可以判断服务器上的异常信息是哪个版本出现的。除了版本信息,可能还需要手机的SDK版本,屏幕分辨率,手机型号等等信息,有了这些信息,可以更全面的了解异常信息。

 

更多说明。

 

只需要在主Activity中设置一次异常处理类即可,不需要在所有的Acitivity都进行设置。

 

个人感觉Crash发生后,恢复现场继续运行的意义不大。Crash以后,程序的运行情况已经是不可预知的了,用一个错误,去弥补另外一个错误,本身就会导致更多的错误。建议还是尽量避免Crash的发生更合理。

 

---------------------------------------------------------------------------

GL(arui319)

http://blog.csdn.net/arui319

<本文可以转载,但是请保留以上作者信息。谢谢。>

---------------------------------------------------------------------------

这篇关于android反馈Crash报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089143

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能