activity跳转的时候我们一般通过intent Bundle传递数据,但是在数据较大时就会出现TransactionTooLargeException异常,“The Binder transaction failed because it was too large.”
解决方式就是更换Activity之间传递数据的方式 :
- 限制传递数据大小 如果一个很长的集合可以截取一部分传递,另外Serializable貌似比Parcelable占用空间小20倍 但传输效率貌似就成反比了
- EventBus传递 很大程度上也可以解决这个问题
- 单例
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;
}
}
- 持久化 数据库、ACache、文件之类的
这样传递的缺点同样明显,数据量很大的时候读写时间慢,效率低下,IO容易出问题
我在项目中使用了第二种方式解决一个集合数据传递的问题
[Activity之间传递数据的方式及常见问题总结]https://www.cnblogs.com/penghuster/p/5328045.html)