Activity传递大数据

activity跳转的时候我们一般通过intent Bundle传递数据,但是在数据较大时就会出现TransactionTooLargeException异常,“The Binder transaction failed because it was too large.”

解决方式就是更换Activity之间传递数据的方式 :

  1. 限制传递数据大小 如果一个很长的集合可以截取一部分传递,另外Serializable貌似比Parcelable占用空间小20倍 但传输效率貌似就成反比了
  2. EventBus传递 很大程度上也可以解决这个问题
  3. 单例
public class DataHolder {

    private Map dataList = new HashMap<>();
    private static volatile DataHolder instance;

    public static DataHolder getInstance() {
        if (instance == null) {
            synchronized (DataHolder.class) {
                if (instance == null) {
                    instance = new DataHolder();
                }
            }
        }
        return instance;
    }

    public void setData(String key, Object o) {
        WeakReference value = new WeakReference<>(o);
        dataList.put(key, value);
    }

    public Object getData(String key) {
        WeakReference reference = (WeakReference) dataList.get(key);
        if (reference != null) {
            Object o = reference.get();
            return o;
        }
        return null;
    }

}
  1. 持久化 数据库、ACache、文件之类的
    这样传递的缺点同样明显,数据量很大的时候读写时间慢,效率低下,IO容易出问题

我在项目中使用了第二种方式解决一个集合数据传递的问题

[Activity之间传递数据的方式及常见问题总结]https://www.cnblogs.com/penghuster/p/5328045.html)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值