Skip to content
阅读进度

Binder 为什么会导致主线程卡顿或 ANR? ​

返回 性能与稳定性 目录

标准回答 ​

主线程执行同步 Binder 时,需要等待远端处理;远端可能卡在 I/O、锁、另一个 Binder 调用,或者没有空闲 Binder 线程。于是客户端即使自身代码很短,也可能长时间阻塞。我会从 Perfetto 关联客户端 transact 与服务端执行,检查调度等待、锁竞争、线程池占用和耗时子调用,再决定减少请求次数、缓存、批量查询、异步化或移出主线程。简单把所有接口改成 oneway 不能解决服务端拥塞和业务结果依赖。

延伸追问 ​

如果大量请求在服务端争夺同一把锁,增加 Binder 线程也可能只让更多线程等待。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。