外观
为什么在 Binder 线程中不应执行耗时操作?
标准回答
Binder 线程池的处理名额有限,耗时操作长时间占住线程,会让其他请求排队。
- 同步调用会延长客户端等待,主线程调用可能因此卡顿或 ANR。
- 线程池和队列有限,持续积压可能影响其他请求。
- 长任务可改为提交任务后返回,再异步回调结果,并控制队列与取消。
通俗例子
系统回调里直接扫描大量文件,多个回调占满线程池后,轻量查询也可能迟迟得不到处理;可设计异步任务和结果回调。
深入解释
**回调占用什么资源:**真实跨进程请求通常由 Binder 线程处理。长时间解码、访问磁盘或等待其他服务会一直占着这个处理名额,后续请求可能排队。
**转交线程后怎样返回:**先确认接口允许异步完成,再把工作交给受控执行器并通过结果回调返回。需要同步返回值的接口,不能随便提前返回假结果;oneway 也不是无限容量队列。
易混淆点
不能只把任务丢进无界线程池;要先定义接口是否允许异步结果。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
7.5.2