作者:A_mnesia
来源:CSDN
原文:https://blog.csdn.net/m13984458297/article/details/78330419
开发中在页面跳转中经常需要徐携带数据到另一个页面,常用的是intent传递,然而在intent的Bundle等传递数据时有一个缓冲区,而这个缓冲区最大只有1MB,当数据大于这个值时就会出现android.os.TransactionTooLargeException问题,这时就不能用intent来传递数据了,可以使用WeakReference来暂时保存数据,具体的解决方法为:
WeakDataHolder 类:
package cn.longmaster.hospital.doctor.ui.consult;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
/**
- Created by W·H·K on 2017/10/24.
*/
public class WeakDataHolder {
private static WeakDataHolder instance;
public static WeakDataHolder getInstance(){
if(instance == null){
synchronized (WeakDataHolder.class) {
if (instance == null) {
instance = new WeakDataHolder();
}
}
}
return instance;
}
private Map<String, WeakReference<Object>> map = new HashMap<>();
/**
* 数据存储
* @param id
* @param object
*/
public void saveData(String id, Object object) {
map.put(id, new WeakReference<>(object));
}
/**
* 获取数据
* @param id
* @return
*/
public Object getData(String id) {
WeakReference<Object> weakReference = map.get(id);
return weakReference.get();
}
}
这个类中提供了两个方法:
在需要携带数据的时候,调用WeakDataHolder.getInstance().saveData("", object);(两个参数,第一个是map的key,
第二个是需要传递的数据,支持所有的数据类型);
在第二个页面需要获取的时候调用:
WeakDataHolder.getInstance().getData("");得到数据并转换为需要的类型即可。
如:int aa=(int)WeakDataHolder.getInstance().getData("")