外观
Binder 事务缓冲区(transaction buffer)的默认大小是多少?超出限制会怎样?
标准回答
Android API 文档描述 Binder 事务缓冲区当前约为 1MB,由同一进程中正在进行的事务共享,不是每次调用独享 1MB。请求或响应放不下时调用可能失败,并抛出 TransactionTooLargeException;即使单个载荷较小,并发事务也可能把空间占满。
**怎样避免:**保持参数和返回值小,分页或分批传输,大数据使用文件描述符、共享内存或 URI 等合适通道。异常不一定能判断请求未发送还是响应失败,重试要考虑部分执行。
通俗例子
多个页面同时传大 Bundle,即使单次看似未超常见的约 1MB 缓冲量,也可能失败。大图片应传 URI 或文件描述符。
深入解释
**限制影响什么:**Binder 传输缓冲受进程与同时进行的事务影响,不是每个方法都独享一大块空间。把大型列表、图片或完整文档塞进参数,可能触发事务过大错误。
**大数据怎么传:**通过 ID、文件描述符或受控 URI 告诉对方去哪里读,Binder 只传少量元数据。不能把“某次一兆以内成功”当作所有情况下都可靠的阈值。
易混淆点
1 MB 不是每一次调用都可独享的安全额度。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
7.1.3