Intent 传递数据大小限制(Binder 传递数据大小限制)

1,092 阅读1分钟

当我们用Intent传输大数据时,有可能会出现错误:

        val intent = Intent(this@MainActivity, Main2Activity::class.java)
        val data = ByteArray(1024 * 1024)
        intent.putExtra("111", data)
        startActivity(intent)

如上我们传递了1M大小的数据时,结果程序就一直反复报如下TransactionTooLargeException错误:

普通的由Zygote孵化而来的用户进程,所映射的Binder内存大小是不到1M的,准确说是 

#define BINDER_VM_SIZE ((1*1024*1024) - (4096 *2))

这个限制定义在frameworks/native/libs/binder/processState.cpp类中

1Mb并不是安全上限。因为Binder中可能正在处理其它的传输工作。