binder通信是Android特有的一种通信机制,常见binder相关的异常包括卡binder对端处理超时,binder本端处理超时(导致主线程block)以及binder耗尽三类问题。无论是应用,Framework,Hal中间件,还是BSP驱动,熟悉这三类binder相关case的调试和分析,能够帮助我们快速地找到和解决问题。
接下来按照问题复现的频率一一介绍和复盘。
这一类问题在应用程序中比较常见,当然fwk,hal,bsp也会遇到。例如应用程序在某个逻辑中卡在与system_server的binder通信过程中,而system_servier则是卡在binder对端的hal服务处理超时,hal服务的处理超时可能是由于某个外设驱动处理超时,比如读写节点等;这里以一个简单的应用anr的例子来讲述,其分析逻辑都是一样的。
因为anr很常见,系统中可能有很多个发生,那么就需要我们首先从测试工程师提供的问题复现的时间点去认证问题复现时间,通过在event中搜索am_anr找到对应的时间点信息,如下:
然后再从/data/anr目录或者/data/system/dropbox中找到对应的堆栈信息;如下:
通过上面的信息我