您的位置:首页 > 移动开发 > Android开发

Caused by: android.os.TransactionTooLargeException

2013-12-16 11:01 411 查看
setResult之后出现的异常,我当时选取了1500条数据,然后setResult() finish() 就出问题了,该问题暂时只出现在4.2.2版本中,其他版本没有问题,困惑啊

APP出问题只顾看包过滤后的Log信息了,N久没有看到这个Log,以后一定要耐心认真



如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException

参考:http://developer.android.com/reference/android/os/TransactionTooLargeException.html

The Binder transaction failed because it was too large.

During a remote procedure call, the arguments and the return value of the call are transferred as
Parcel
objects
stored in the Binder transaction buffer. If the arguments or the return value are too large to fit in the transaction buffer, then the call will fail and
TransactionTooLargeException
will
be thrown.

The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process. Consequently this exception can be thrown when there are many transactions in progress even when most of the individual transactions
are of moderate size.

There are two possible outcomes when a remote procedure call throws
TransactionTooLargeException
.
Either the client was unable to send its request to the service (most likely if the arguments were too large to fit in the transaction buffer), or the service was unable to send its response back to the client (most likely if the return value was too large
to fit in the transaction buffer). It is not possible to tell which of these outcomes actually occurred. The client should assume that a partial failure occurred.

The key to avoiding
TransactionTooLargeException
is
to keep all transactions relatively small. Try to minimize the amount of memory needed to create a
Parcel
for
the arguments and the return value of the remote procedure call. Avoid transferring huge arrays of strings or large bitmaps. If possible, try to break up big requests into smaller pieces.

If you are implementing a service, it may help to impose size or complexity contraints on the queries that clients can perform. For example, if the result set could become large, then don't allow the client to request more than a few records at a time. Alternately,
instead of returning all of the available data all at once, return the essential information first and make the client ask for additional information later as needed.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: