Skip to content
阅读进度

为什么在 Binder 线程中不应执行耗时操作? ​

返回 Framework 与系统服务 目录

标准回答 ​

Binder 线程池的处理名额有限,耗时操作长时间占住线程,会让其他请求排队。

  • 同步调用会延长客户端等待,主线程调用可能因此卡顿或 ANR。
  • 线程池和队列有限,持续积压可能影响其他请求。
  • 长任务可改为提交任务后返回,再异步回调结果,并控制队列与取消。

通俗例子 ​

系统回调里直接扫描大量文件,多个回调占满线程池后,轻量查询也可能迟迟得不到处理;可设计异步任务和结果回调。

深入解释 ​

**回调占用什么资源:**真实跨进程请求通常由 Binder 线程处理。长时间解码、访问磁盘或等待其他服务会一直占着这个处理名额,后续请求可能排队。

**转交线程后怎样返回:**先确认接口允许异步完成,再把工作交给受控执行器并通过结果回调返回。需要同步返回值的接口,不能随便提前返回假结果;oneway 也不是无限容量队列。

易混淆点 ​

不能只把任务丢进无界线程池;要先定义接口是否允许异步结果。

参考资料 ​

内容来源 ​

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