<分区>
intent extra 中可以传递的字符串数据是否有最大限制?下面的 String str 可以容纳多少数据?
intentI1.putExtra("MyString", str);
标签 android
<分区>
intent extra 中可以传递的字符串数据是否有最大限制?下面的 String str 可以容纳多少数据?
intentI1.putExtra("MyString", str);
最佳答案
我在 Android API 级别 24 上的测试:
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
// intent.putExtra("extra", new byte[1024 * 1024]); // 1024 KB = 1048576 B, android.os.TransactionTooLargeException
// intent.putExtra("extra", new byte[1024 * 512]); // 512 KB = 524288 B, android.os.TransactionTooLargeException
// intent.putExtra("extra", new byte[1024 * 506]); // 506 KB = 518144 B, android.os.TransactionTooLargeException
// intent.putExtra("extra", new byte[1024 * 505]); // 505 KB = 517120 B, android.os.TransactionTooLargeException
intent.putExtra("extra", new byte[1024 * 504]); // 504 KB = 516096 B, OK
startActivity(intent);
android.os.TransactionTooLargeException https://developer.android.com/reference/android/os/TransactionTooLargeException.html
因为我需要向 Activity 发送大量数据,所以我使用以下解决方案(我知道,它并不完美,但它可以提供帮助):
public class ExtendedDataHolder {
private static ExtendedDataHolder ourInstance = new ExtendedDataHolder();
private final Map<String, Object> extras = new HashMap<>();
private ExtendedDataHolder() {
}
public static ExtendedDataHolder getInstance() {
return ourInstance;
}
public void putExtra(String name, Object object) {
extras.put(name, object);
}
public Object getExtra(String name) {
return extras.get(name);
}
public boolean hasExtra(String name) {
return extras.containsKey(name);
}
public void clear() {
extras.clear();
}
}
然后在MainActivity中
ExtendedDataHolder extras = ExtendedDataHolder.getInstance();
extras.putExtra("extra", new byte[1024 * 1024]);
extras.putExtra("other", "hello world");
startActivity(new Intent(MainActivity.this, DetailActivity.class));
在 DetailActivity 中
ExtendedDataHolder extras = ExtendedDataHolder.getInstance();
if (extras.hasExtra("other")) {
String other = (String) extras.getExtra("other");
}
关于android - 可以在 Intent 中传递的字符串数据的最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729955/