intent传递数据大小限制
Intent 携带信息的大小其实是受 Binder 限制,数据以 Parcel 对象的形式存放在 Binder传递缓存中。如果数据或返回值比传递 buffer 大,则此次传递调用失败并抛出 TransactionTooLargeException 异常。
Binder 传递缓存有一个限定大小,通常是 1Mb。但同一个进程中所有的传输共享缓存空间
。多个地方在进行传输时,即时它们各自传输的数据不超出大小限制,TransactionTooLargeException异常也可能会被抛出。
Intent 传递数据的原理
通过 intent 的 bundle 的源码可以看到它们都是实现了 Parcelable ,其实就是通过序列化来实现通信的。Parcelable 的底层使用了 Parcel 机制。传递实际上是使用了 binder 机制,binder 机制会将 Parcel序列化的数据写入到一个共享内存中,读取时也是 binder 从共享内存中读出字节流,然后 Parcel 反序列化后使用。这就是 Intent 或 Bundle 能够在 activity或者跨进程通信的原理。
简单来说,我们上面提到了 Parcel 机制
使用了一个共享内存,这个共享内存就叫 Binder transaction buffer,这块内存有一个大小限制,目前是 1MB,而且共用的,当超过了这个大小就会报错。
intent如何传递大数据
- 静态static
- 持久化
- ParceledListSlice(这是framework层跨进程传递集合常用的一种方式,如果传递的集合过大他会分若干次去传)
跨进程如何传递大图
通过调用Bundle#putBinder。
https://blog.csdn.net/ylyg050518/article/details/97671874
网友评论