Android 应用崩溃有两种
- 一种是java的崩溃 我们可以通过Thread.setuncaughtexcetpionhandler来设置崩溃捕捉
- 第二种就是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报错问题