外观
如何通过 Systrace 图表识别出由 Binder 调用引起的延迟?
标准回答
同步 Binder 调用会让调用线程等对方处理;Trace 可以把“我在等”连到“对方在忙什么”。
- 客户端线程进入事务并等待结果,Trace 中可观察到等待区间。
- 跟随 Binder flow 查服务端是否等待线程、锁或磁盘。
- 检查响应返回后调用方是否还在等待 CPU。
通俗例子
主线程请求系统服务后迟迟没回来,沿 Binder 事务查看服务端线程是否排队、持锁或又去调用第三个进程。
深入解释
**调用方为什么会等:**同步 Binder 调用需要把请求送到另一进程,等对方返回结果后才能继续执行当前代码。对方排队、持锁或调用更下游服务都会延长等待。
**怎样避免误判:**客户端的长切片只是入口,必须关联事务与服务端线程。把调用挪到后台可能改善界面响应,但不一定缩短服务本身处理时间。
易混淆点
服务端慢、客户端调度慢和传输数据量大,需要分别证明。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
3.5.3