Android高质量开发之崩溃优化

  
  

前言   

开发人员碰到应用程序崩溃(闪退)什么办?不少人会说根据日志,找到闪退的代码,捕获异常,“消化”掉了所有Java崩溃。   
至于程序是否会出现其他异常表现,那是上帝要管的事情。

  

是的,这种方法对于紧急情况下不失为一种解决办法,但闪退的真相是什么?   
是否从根源上解决问题呢?

      Android高质量开发之崩溃优化   
  2335年ef9c182d46e48155842a39212d54.jpg   

一、崩溃

  

崩溃率是衡量一个应用质量高低的基本指标,那么,该怎样客观地衡量崩溃这个指标,以及又该如何看待和崩溃相关的稳定性。

  

  

  
      <李> Java崩溃李   <李>本地崩溃
  

简单来说,Java崩溃就是在Java代码中,出现了未捕获异常,导致程序异常退出。

  

那本地崩溃一般都是因为在原生代码中访问非法地址,也可能是地址对齐出现了问题,或者发生了程序主动中止,这些都会产生相应的信号信号,导致程序异常退出。

  

  

  

"崩溃”就是程序出现异常,而一个产品的崩溃率,跟我们如何捕获,处理这些异常有比较大的关系。

  

对于很多中小型公司来说,可以选择一些第三方的服务。

  

目前各种平台也是百花齐放,包括阿里的友盟,腾讯的bug,网易云捕,谷歌的重火力点等等。要懂得借力!

  

  

  

崩溃率是不是就能完全等价于应用的稳定性呢?答案是肯定不行。处理了崩溃,我们还会经常遇到ANR(应用程序没有响应,程序没有响应)这个问题。

  

出现ANR的时候,系统还会弹出对话框打断用户的操作,这是用户非常不能忍受的。

  
  

ANR处理方法:

  

使用FileObserver监听/数据/一定/痕迹。txt的变化。   
非常不幸的是,很多高版本的ROM,已经没有读取这个文件的权限了。

  

这个时候你可能只能思考其他路径,海外可以使用谷歌玩服务,而国内微信利用硬编码框架(HC框架是一套独立于安卓系统实现的通信框架,它让应用程序和厂商罗能够实时“对话”了

  

目标就是充分调度系统资源来提升应用的运行速度和画质,切实提高大家的手机使用体验)向厂商获取了更大的权限。   
也可以将手机根掉,然后取得痕迹。txt文件。

  

  

  

除了常见的崩溃,还有一些会导致应用异常退出的情况,例如:

  
      <李>主动自杀.Process.killProcess(),()退出等李   <李>崩溃。出现了Java或本机崩溃李   <李>系统重启。系统出现异常,断电,用户主动重启等,我们可以通过比较应用开机运行时间是否比之前记录的值更小李   <李>被系统杀死。被低内存杀手杀掉,从系统的任务管理器中划掉等李   <李> ANR
  

我们可以在应用启动的时候设定一个标志,在主动自杀或崩溃后更新标志,这样下次启动时通过检测这个标志就能确认运行期间是否发生过异常退出。

  

对应上面的五种退出场景,我们排除掉主动自杀和崩溃(崩溃会单独的统计)这两种场景,希望可以监控到剩下三种的异常退出,理论上这个异常捕获机制是可以达到100%覆盖的。

  

通过这个异常退出的检测,可以反映如ANR,低内存杀手,系统强杀,死机,断电等其他无法正常捕获到的问题。

  

当然异常率会存在一些误报,比如用户从系统的任务管理器中划掉应用。对于线上的大数据来说,还是可以帮助我们发现代码中的一些隐藏问题。

  

根据应用的前后台状态,我们可以把异常退出分为前台异常退出和后台异常退出。

  

"被系统杀死”是后台异常退出的主要原因,当然我们会更关注前台的异常退出的情况,这会跟ANR,伯父等异常情况有更大的关联。

  

二,崩溃处理

  

我们每天工作也会遇到各种各样的疑难问题,“崩溃”就是其中比较常见的一种问题。解决问题跟破案一样需要经验,我们分析的问题越多越熟练,定位问题就会越快越准。

  

当然这里也有很多套路,比如对于”案发现场“我们应该留意哪些信息?怎样找到更多的“证人”和“线”索?

  

"侦查案件”的一般流程是什么?对不同类型的“案件”分别应该使用什么样的调查方式?

Android高质量开发之崩溃优化