美文网首页
intent传递数据大小限制

intent传递数据大小限制

作者: taoyyyy | 来源:发表于2020-02-03 23:03 被阅读0次

    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

    相关文章

      网友评论

          本文标题:intent传递数据大小限制

          本文链接:https://www.haomeiwen.com/subject/zpklxhtx.html