开发中在页面跳转中经常需要徐携带数据到另一个页面,常用的是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("")