解决giving up android.os.TransactionTooLargeException: data parcel size 601332 bytes报错问题

在Android中页面间传递数据的时候可能会导致
下面这个错误

giving up android.os.TransactionTooLargeException: data parcel size 601332 bytes

这个是因为intent传递传输数据的时候有个大小限制,默认好像是1MB,具体可以参考官方文档

https://developer.android.com/reference/android/os/TransactionTooLargeException.html
无论我们是用ParcelableSerializable还是Bundle都无法解决这个问题
那么我们可以通过几种办法:

  • 使用Parcelable或Serializable代替Bundle传递数据。这两种方式可以将对象序列化为字节数组,然后在Activity之间传递。虽然这种方式可能会增加一些开销,但可以传递更大的数据。
  • 将数据存储在本地文件或数据库中,然后在Activity之间传递文件路径或数据库ID。
  • 使用ContentProvider来共享数据。ContentProvider是一种Android组件,可以让应用程序共享数据。通过ContentProvider,可以在Activity之间传递大量的数据。
  • Binder进程通信
    前面几个不说了,我们着重说下Binder解决方案,较为高效快速简单
    新建DataBinder类继承android.os.Binder
public class DataBinder extends Binder {
    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

至于上面data你想用Stringbyte等等都可以不重要
下面使用它,加入A页面回传到B页面
在A页面中

 DataBinder dataBinder = new DataBinder();
 dataBinder.setData(这里写你的数据);
 Bundle bundle = new Bundle();
 bundle.putBinder(你的key, dataBinder);
 setResult(RESULT_OK, getIntent().putExtras(bundle));
 finish();

B页面中获取

	registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
            if (result.getResultCode() != RESULT_OK) {
                return;
            }
            if (result.getData() == null || result.getData().getExtras() == null) {
                return;
            }
            Bundle bundle = result.getData().getExtras();
            DataBinder dataBinder = (DataBinder) bundle.getBinder(你的key);
            if (dataBinder == null) {
                return;
            }
			...这里写你后面的解析数据等等操作
    });

好了,问题解决了!!!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青丶穗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值