You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Fragment跳转Activity触发android.os.TransactionTooLargeException如何解决

错误成因

TransactionTooLargeException的触发原因是Android Binder事务缓冲区的大小超出限制:系统为Binder跨进程通信分配的缓冲区默认总大小仅为1MB,你报错日志里显示单次传输的Parcel数据已经达到2.35MB,超出缓冲区上限直接抛出异常。
你代码中的根本诱因是将mImage(图片转换得到的Base64字符串)直接塞入Intent传递:Base64编码会比原始二进制数据体积大1/3左右,哪怕是普通清晰度的图片转成Base64后也很容易超过缓冲区上限,mName和普通长度的mRecipe文本一般不会触发该问题。

相关疑问解答

该异常和前一页面存在多个CardFragment没有关联,异常仅由单次Intent跳转携带的数据总量超出限制导致,和当前页面的Fragment数量无关。

解决方案

  • 优先修改图片传递逻辑:
    • 如果图片是本地资源/本地存储文件,直接传递资源ID、本地文件路径,到Recipes页再解码加载即可
    • 如果图片是网络资源,直接传递图片的远程URL,到Recipes页用Glide、Coil、Picasso等图片加载框架加载即可,完全不需要自行转Base64传递
    • 如果确实有临时传递大尺寸Bitmap的需求,可以用全局静态变量临时持有(注意页面销毁后置空避免内存泄漏)、或者将数据写入本地缓存/SharedPreferences,仅传递读取用的key到目标页
  • 补充优化:如果mRecipe是超长富文本内容,也可以参照上面的方式传递key再读取,进一步降低Intent携带的数据量

内容的提问来源于stack exchange,提问作者Matan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:03