Android 开发高手进阶--崩溃优化

Android 应用崩溃有两种

  1. 一种是java的崩溃 我们可以通过Thread.setuncaughtexcetpionhandler来设置崩溃捕捉
  2. 第二种就是native崩溃 navtive 崩溃流程

native 崩溃 捕捉工具 待补充

应对崩溃的处理

与破案相同,我们需要尽可能的收集到案发现场的信息,这有助于我们来破案

  • 崩溃的信息:
    • 进程名,线程名:有助于判断崩溃发生的场景,是不是主线程
    • 崩溃的类型:native崩溃?java崩溃?anr?
    • 发生崩溃时的关键线程和当前线程的堆栈
  • 系统信息:
    • logcat 日志
    • 设备机型,系统,厂商,cpu,api,linux版本等等
    • 设备root?多开?
  • 内存状态:
    • 当前设备的内存状态
    • 当前应用的内存状态
    • 虚拟内存状态
  • 其他情况:
    • 文件句柄泄漏?
    • 当前应用开启的线程数
    • jni?
  • 业务操作逻辑:
    • 操作过程
    • 崩溃现场
    • 其他自定义
对应的操作手段
  • 确认崩溃的类型是java崩溃还是native崩溃还是anr?
    • anr:先看主线程的堆栈,是否锁引起的 再看anr的日志,是否是io问题,还是gc问题
    • java:查看java堆栈,如果是oom等问题可以去查看内存使用情况,top信息等
  • logcat:可以获取到手机的状态,比如am_anr,am_kill, gc等消息
  • 尝试复现
  • 寻找可能出现的问题尝试解决,添加防御性的代码
  • 尝试规避问题
  • 尝试hook 解决 android7的toast报错问题
posted @ 2019-02-27 18:15  帅不过王力宏  阅读(184)  评论(0编辑  收藏  举报