只有在其中添加特定片段时,我才会在活动中获取TransactionTooLargeException。仅当应用程序被发送到后台并被带回或者手机被锁定和解锁时才会发生异常。
我已经记录了应用程序并发现尽管当应用程序转到后台时调用onPause(),但是当应用程序被带到前台时,不会调用onResume(),onStart(),onRestoreInstanceState()等。
只有当应用程序转到后台时,应用程序才会在正常流程中添加片段时抛出异常,抛出异常并关闭应用程序。知道这可能是什么根源?
答案 0 :(得分:0)
我前段时间遇到过这个问题。问题是我在活动的片段parcelable
中保存了serialisable
/ onSaveInstanceState(Bundle bundle)
个对象。此活动处于活动堆栈中,即它不是当前活动。在当前片段的onResume
内,我使用意图包交换了额外的serialisable
数据。
尝试限制此serialisable
数据保存/交换,以使其保持在限制范围内,否则将引发TransactionTooLargeException错误。
Binder事务缓冲区的固定大小有限,目前为1Mb
避免TransactionTooLargeException的关键是保留所有 交易相对较小。尽量减少内存量 需要为参数和返回值创建一个Parcel 远程过程调用。避免传输巨大的字符串数组 或大位图。如果可能的话,尝试将大量请求分解为 小件。