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
所需的内存量。 避免传输大量的字符串或大型位图。 如果可能的话,尝试将大的请求分成小块。
如果您正在实施服务,则可能会对客户可以执行的查询施加大小或复杂度限制。 例如,如果结果集可能变大,则不允许客户端一次请求超过几条记录。 或者,不是一次返回所有可用数据,而是首先返回基本信息,然后根据需要让客户请求其他信息。
Public constructors |
|
---|---|
TransactionTooLargeException() |
|
TransactionTooLargeException(String msg) |
Inherited methods |
|
---|---|
From class java.lang.Throwable
|
|
From class java.lang.Object
|
TransactionTooLargeException (String msg)
Parameters | |
---|---|
msg |
String
|