XCrash源码分析

本文详细描述了XCrash的初始化过程,涉及anrHandler、javaCrashHandler和nativeHandler的初始化,以及Java层和Native层如何处理crash和ANR。重点介绍了ANR的两种类型(inputANR和service相关)以及其原理和处理机制。
摘要由CSDN通过智能技术生成

XCrash.init:

初始化执行该方法 该方法主要完成anrHandler javaCrashHandler AnrHandler nativeHandler的初始化工作

javaCrashHandler初始化:将当前对象设置为未捕获异常处理器,后续crash在此处处理

nativeHandler初始化:java层只执行loadSo操作 接着调用nativeInit(这是个native方法)函数执行native层的初始化工作。native层最终调用到xc_jni_init 函数,该初始化函数 又分为三个部分:xc_common_init (初始化公共参数)      xc_crash_init(启动native线程,待到crash发生 jni调用上层callback函数替换函数处理栈,注册信号监听)  xc_trace_init(注册anr信号监听 启动native线程 在发生crash anr需要dump堆栈时 由该线程收集相关堆栈 并进行dump,)。

java crash监听

发生crash,系统会回调执行uncaughtException,接着执行handleException方法处理异常,主要是dump信息,收集异常信息(前后台状态 崩溃时间 线程信息 内存信息 网络状态 logcat 其他线程信息,唤醒native线程dump trace信息)

native crash监听

监听到crash 挂起所有线程 获取进程信息 恢复所有线程

anr监听

启动初始化注册quit信号监听 监听到quit信号 则dump trace

4.anr的原理

分类:anr按类型分类两种 input anr 和others(service broadcast contentprovider)

input anr:

service类型anr暂不概述,简单来说就是埋雷式anr 启动service时post一个定时消息 一定事件 一段事件后如果该消息还没被移除 则触发anr 对了 service启动完成后该消息会被移除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值