阅读《Android 开发太难了,这异常竟然捕获不到?》

2022-02-20  本文已影响0人  普通的程序员

原文地址
https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650839516&idx=1&sn=9026d67a2bfdbf855e2ffb97c187d5eb&chksm=80b74d42b7c0c454a5e00b1aa67182ac69ecc3ed890a21fe56b265b7f908d253c0bb14934c3f&scene=21#wechat_redirect

image.png

重点
『system进程在通过ApplicationThread对象,和app进程通信的时候发现数据过大,从而抛出了异常。

但是system进程时何等的重要,肯定是不能崩溃的,所以system进程捕获了异常,但是也不能不通知app进程呀,不然app进程岂不是没有反应了,于是乎直接kill掉了app进程。

到这里,我们基本弄清楚这次闪退没有堆栈的原因了,因为实际上不是crash,而是system进程在跟我们交互过程中发生了异常,然后把我们kill掉了』

app-》binder-》system serve

app-》binder 超1M-8k,报错且能 catch 异常
system-》binder 超 (1M-8k)/2-3k,最大安全值,超过直接 kill ,catch 不住异常

『在binder驱动中,除了记录Binder事务的缓冲区空间,还会记录一个异步事务(ONE_WAY)的空间,这个空间为前者的1/2』

上一篇下一篇

猜你喜欢

热点阅读