可以在意图中传递的字符串数据的最大大小

use*_*106 6 android

是否可以在intent extra中传递的字符串数据有最大限制?下面的String str可以容纳多少数据?

intentI1.putExtra("MyString", str);
Run Code Online (Sandbox Code Playgroud)

Mil*_*nák 10

我对Android API Level 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);
Run Code Online (Sandbox Code Playgroud)

android.os.TransactionTooLargeException https://developer.android.com/reference/android/os/TransactionTooLargeException.html

因为我需要向活动发送大量数据,所以我使用以下解决方案(我知道,它不完美,但它可以帮助):

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在MainActivity中

ExtendedDataHolder extras = ExtendedDataHolder.getInstance();
extras.putExtra("extra", new byte[1024 * 1024]);
extras.putExtra("other", "hello world");

startActivity(new Intent(MainActivity.this, DetailActivity.class));
Run Code Online (Sandbox Code Playgroud)

并在DetailActivity中

ExtendedDataHolder extras = ExtendedDataHolder.getInstance();
if (extras.hasExtra("other")) {
    String other = (String) extras.getExtra("other");
}
Run Code Online (Sandbox Code Playgroud)


ama*_*ouz 5

查看这篇文章,其中说 1MB 是一个限制。也结帐这个

还有一个关于问题站点报告

真正的问题是:为什么要在活动之间传递 1M 数据?也许实现您想要的更好的方法是保留此数据并传递标识符。