Android 数据传递出现的android.os.TransactionTooLargeException问题

开发中在页面跳转中经常需要徐携带数据到另一个页面,常用的是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, WeakReference> 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 weakReference = map.get(id);
        return weakReference.get();
    }
} 
  

这个类中提供了两个方法:

在需要携带数据的时候,调用WeakDataHolder.getInstance().saveData("", object);(两个参数,第一个是map的key,

第二个是需要传递的数据,支持所有的数据类型);

在第二个页面需要获取的时候调用:

WeakDataHolder.getInstance().getData("");得到数据并转换为需要的类型即可。

如:int aa=(int)WeakDataHolder.getInstance().getData("")





你可能感兴趣的:(Android 数据传递出现的android.os.TransactionTooLargeException问题)