Signal
Signal copied to clipboard
关于demo anr演示
demo的anr是一个死循环,由于系统机制不一定会立马产生anr,可以点击按钮后再点击回退键去尽快触发!
ANR
可以参考https://github.com/bugsnag/bugsnag-android 的实现.
SIGSEGV
信号如果是主线程抛出的,是不会回调Java层的callNativeException
方法(JVM阻止了这种调用),同时在信号处理函数中不能调用 non-async-signal-safe functions,但如果是子线程抛出这个信号,又可以回调到Java层,没有深入阅读过JVM的源码,所以不知道JVM是如何处理的
stackoverflow类似的问题https://stackoverflow.com/questions/54203717/callback-into-java-android-application-code-from-jni-after-catching-signal-sigs
因为大部分的代码肯定是在主线程中运行,所以是否应该在 Native
层直接创建一个子线程,或者使用AIDL
的方式,用于监听和处理异常,回调Java层的方法.