Most visited

Recently visited

Added in API level 15

TransactionTooLargeException

public class TransactionTooLargeException
extends RemoteException

java.lang.Object
   ↳ java.lang.Throwable
     ↳ java.lang.Exception
       ↳ android.util.AndroidException
         ↳ android.os.RemoteException
           ↳ android.os.TransactionTooLargeException


Binder交易失败,因为它太大。

在远程过程调用期间,调用的参数和返回值将作为存储在Binder事务缓冲区中的Parcel对象进行传输。 如果参数或返回值太大而无法放入事务缓冲区中,则调用将失败并引发TransactionTooLargeException

Binder事务缓冲区具有有限的固定大小,当前为1Mb,由进程中的所有事务共享。 因此,即使大多数单个交易的规模适中,当有许多交易正在进行时,这种异常也会被抛出。

当远程过程调用抛出TransactionTooLargeException时有两种可能的结果。 客户端无法将其请求发送到服务(很可能如果参数太大而无法放入事务缓冲区中),或者服务无法将其响应发送回客户端(最有可能的情况是返回值为太大而不适合事务缓冲区)。 无法确定实际发生了哪些结果。 客户应该假定发生部分故障。

避免TransactionTooLargeException的关键是保持所有交易相对较小。 尽量减少为参数和远程过程调用的返回值创建Parcel所需的内存量。 避免传输大量的字符串或大型位图。 如果可能的话,尝试将大的请求分成小块。

如果您正在实施服务,则可能会对客户可以执行的查询施加大小或复杂度限制。 例如,如果结果集可能变大,则不允许客户端一次请求超过几条记录。 或者,不是一次返回所有可用数据,而是首先返回基本信息,然后根据需要让客户请求其他信息。

Summary

Public constructors

TransactionTooLargeException()
TransactionTooLargeException(String msg)

Inherited methods

From class java.lang.Throwable
From class java.lang.Object

Public constructors

TransactionTooLargeException

Added in API level 15
TransactionTooLargeException ()

TransactionTooLargeException

Added in API level 23
TransactionTooLargeException (String msg)

Parameters
msg String

Hooray!