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

Android 应用崩溃有两种

  1. 一种是java的崩溃 咱们能够经过Thread.setuncaughtexcetpionhandler来设置崩溃捕捉
  2. 第二种就是native崩溃 navtive 崩溃流程

native 崩溃 捕捉工具 待补充java

应对崩溃的处理

与破案相同,咱们须要尽量的收集到案发现场的信息,这有助于咱们来破案linux

  • 崩溃的信息:
    • 进程名,线程名:有助于判断崩溃发生的场景,是否是主线程
    • 崩溃的类型: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报错问题
相关文章
相关标签/搜索