TransactionTooLargeException android Parcable

时间:2018-07-23 11:42:09

标签: android performance exception transactions parcelable

在打开新活动时(通过传递大量数据),我得到TransactionTooLargeException,但是我引用了很少的解决方案链接,最后我得到了this link的解决方案,而我选择了解决方案3(减少了api水平)。它对我有用。

但是我想知道是否有更方便的方法来实现此功能,或者在这种情况下我应该怎么做。

2 个答案:

答案 0 :(得分:0)

我以前遇到过这个问题,我不得不在两者之间进行选择

1-从我想要传递的对象中删除不必要的数据(在我的情况下,该数组具有目标Activity不需要的充满数据的数组)。

2-实施单例传递数据。假设您要从活动A转到活动B:

创建PassDataSingleton.class:

public class PassDataSingleton {

    private static PassDataSingleton instance;
    private ObjectTypeYouWantToPassAround object;

    public static PassDataSingleton getInstance() {
        return instance;
    }

    public void setObjectIWantToPassAround(ObjectTypeYouWantToPassAround object){
        this.object = object;
    }

    public ObjectTypeYouWantToPassAround getObjectIWantToPassAround(){
        return this.object;
    }
}

在活动A上,在开始活动B之前,请致电

PassDataSingleton.getInstance().setObjectIWantToPassAround(yourObject);

在活动B上,您获得了对象:

PassDataSingleton.getInstance().getObjectIWantToPassAround();

PS:

  • 当然可以(应该)更改示例的名称和类型
  • 同一代码示例可用于列表,只需使用 ArrayList

答案 1 :(得分:0)

您可以将数据存储在静态字段中,然后从任意位置访问它,而不是在活动之间发送大数据。交易限制为1 mb,几乎没有任何数据交换。 或者,您也可以将其存储在用户数据文件夹中,或将sdcard作为临时文件存储在当前活动中,然后从新活动中读取该文件,然后将其删除。