【发布时间】:2014-08-05 17:11:45
【问题描述】:
我正在尝试将可能 2 或 3 MB 的大型字符串数组传递给另一个活动。该块没有通过,我在 logcat 中唯一能看到的关于发生的事情是......
!!! Binder 交易失败!!!
我尝试创建自己的实现 Serializable 的类,在其中放置了我的 String 的 mutator,然后将 Object 引用传递给 intent.putExtra(key, Serializable obj)
代码:
MyClass mc = new MyClass();
Intent intent = new Intent(MainActivity.this, CalculationsActivity.class);
intent.putExtra("mc", mc);
这个问题有没有简单的解决方案——将一个大的字符串数组传递给另一个活动?
class MyClass implements Serializable {
private String[] str;
public void setString(String[] str) {
this.str = str;
}
public String[] getString() {
return this.str;
}
}
我认为只传递一个引用不会导致这种情况。引用不超过内存地址
【问题讨论】:
-
在意图包中可以传递的内容的大小是有限制的。超过该限制会导致您描述的错误。我在某些设备上观察到它约为 500K,尽管我不知道这是否是一个系统值。解决方案包括使用静态变量、文件或数据库写入、重新考虑是否真的需要传递 2M 的数据。
-
您尝试将 3MB
String[]传递给另一个Activity似乎很奇怪。我认为,如果您首先解释您要尝试做什么,我们可能会找到一个更简单的解决方案。 -
@njzk2 - 你好,我这样做的原因是因为我希望在应用程序启动时下载繁重的文本文件。 3-4 秒后,用户来到第一个活动 - 一个 GUI,她/他可以在其中选择不同的选项。从此所有繁重的加载都完成了-我想避免以后在应用程序中加载。谢谢
-
我会将文件保存在文件系统上,并在意图中简单地传递路径。
-
@user3155478 闪屏很糟糕。不要使用一个。这是应用程序设计不良的标志,并且违反了 Google 的应用程序设计指南。如果您的应用程序需要在启动时加载数据而不是您做错了什么。而且,如果您不需要在启动时加载数据,那么就没有理由使用 Splashscreen 并让用户等待。像这样的事情可以决定或破坏您的应用程序的用户参与度。如果每次启动都必须等待 5 秒,那么没有人会继续使用您的应用程序。这只会惹恼用户。
标签: android android-intent android-activity arrays