Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TransactionTooLargeException android可打包_Android_Performance_Exception_Transactions_Parcelable - Fatal编程技术网

TransactionTooLargeException android可打包

TransactionTooLargeException android可打包,android,performance,exception,transactions,parcelable,Android,Performance,Exception,Transactions,Parcelable,在打开新活动(传递大量数据)时,我得到了TransactionTooLargeException,但我没有提供解决方案的几个链接,最后我得到了解决方案3(降低api级别)。它对我有用 但是我想知道是否有更方便的方法来实现此功能,或者在这种情况下我应该做什么。我以前遇到过这个问题,我必须在两者之间进行选择 1-从我想要传递的对象中删除不必要的数据(在我的例子中,它的数组中充满了目标活动上不需要的数据) 2-实现一个单例来传递数据。假设您正在从活动A转到活动B: 创建PassDataSingleto

在打开新活动(传递大量数据)时,我得到了
TransactionTooLargeException
,但我没有提供解决方案的几个链接,最后我得到了解决方案3(降低api级别)。它对我有用


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

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

1-从我想要传递的对象中删除不必要的数据(在我的例子中,它的数组中充满了目标活动上不需要的数据)

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

您可以将数据存储在一个静态字段中,然后从任意位置访问数据,而不是在活动之间发送大量数据。事务限制为1MB,数据交换几乎不需要。
或者您也可以将其存储在您的用户数据文件夹或SD卡中,作为当前活动中的临时文件,从新活动中读取该文件,然后将其删除。

可能重复的Google Play将要求新应用程序从2018年8月1日起至少针对安卓8.0(API级别26),该应用程序将从2018年11月1日起更新target Android 8.0。。。降低api级别目前不是一个解决方案all@Selvin好吧,那我该怎么解决这个问题呢?因为我想保存我的活动状态。您可以将数据保存到类似领域的数据库中,也可以将其保存在SharedReference中,然后在下一个活动中检索。@AkashAmin是的,您认为使用数据库和SharedReference是对的,但在这个阶段,我不能使用它们。因为它需要改变项目中的很多事情。Singleton不是在活动之间传递数据的解决方案。。。如果ActivityA->ActivityB->background->ProcessKilled->ActivityB fromRecentStatic字段不是一个解决方案,则它显然不会出现这种情况。。。在ActivityA->ActivityB->background->ProcessKilled->ActivityB from recentI的情况下,它显然不会这样做。这意味着类中的静态字段不是活动,否则它将保留对活动的引用并泄漏内存。对不起,我忘了提。该字段不能包含对上下文的引用。这实际上取决于它是什么数据,所以如果你做得明智,就没有问题。我的评论不是关于上下文泄漏,而是它在这个场景中将明显变为空:ActivityA->ActivityB->background->ProcessKilled->ActivityB from recent(静态字段为空,我们在ActivityB中)。。。这实际上取决于它是什么数据,所以如果你做得明智,就没有问题。不,很明显,每次他也可以像我说的那样将数据保存到存储器中时,问题都会存在,这可能是您描述的案例的一种可能的解决方案。