intent传递较大数据的解决和intent不能传递较大数据的原因

一、首先提供需要在activity之间用intent传递较大数据的方法。intent不能传递较大数据,需要传递数据的时候,写一个操作类:

public class DataHelper {
    private static final DataHelper helper= new DataHelper();
    public static DataHelper getInstance() {return helper;}
    Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference<Object>>();
    public void saveData(String id, Object object) {
        data.put(id, new WeakReference<Object>(object));
    }
    public Object getData(String id) {
        WeakReference<Object> objectWeakReference = data.get(id);
        return objectWeakReference.get();
    }
}

解决!

在群里聊天,有人发了一个kotlin版,我也早就用kotlin了,顺手贴一下:
在这里插入图片描述

二、intent不能传递较大数据的原因
Intent携带信息的大小其实是受Binder限制。数据以Parcel对象的形式存放在Binder传递缓存中。如果数据或返回值比传递buffer大,则此次传递调用失败并抛出TransactionTooLargeException异常。Binder传递缓存有一个限定大小,通常是1Mb。但同一个进程中所有的传输共享缓存空间。多个地方在进行传输时,即时它们各自传输的数据不超出大小限制,TransactionTooLargeException异常也可能会被抛出。在使用Intent传递数据时,1Mb并不是安全上限。因为Binder中可能正在处理其它的传输工作。不同的机型和系统版本,这个上限值也可能会不同。在其它地方,例如onSaveInstanceState(@NonNull Bundle outState),也可能会遇到与Binder有关的类似问题。
网上解释的文章很多,最开始不知道是谁写的了,大家都相互复制,在下面贴出两篇解释:
https://juejin.im/post/5caa01b15188254aa83f8154
https://www.jianshu.com/p/deb696063c7d

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值