提问者:小点点

Android.os.TransactionToolargeException:数据包大小牛轧糖错误


我正在使用reverfit进行api调用,我从服务器得到了几乎不到30KB大小的JSON响应。当JSON将响应解析为一个复杂对象时,它会抛出这个错误。

java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(BinderProxy.java:510)
    at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4524)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

如果我尝试将响应存储在对象类中,然后通过LinkedHashMap获取值,我就能够获取数据。但是,这将是一个繁琐的过程。

有谁能帮我弄清楚这里的问题是什么,以及如何找到解决办法吗?

根据我的研究,这种情况只发生在版本>=牛轧糖的android设备上。在这个下面,它就像小菜一碟。

我还尝试了:-->OnSaveInstanceTate.clear()中提到的一些解决方案--但这不起作用。你可以在这里找到邮局


共1个答案

匿名用户

这就是当你将大量数据放入Android的Bundle时的典型错误。

我建议你做对了。大数据必须持久化到磁盘(数据库或文件),您只需将这些数据的引用传递到其他地方来使用它。

在这里,您可能会发现30KB是很小的,但是Bundle的大小限制的实际配置可能会因不同的设备/供应商配置而有所不同。

Bundle的本意是只保存简单和小的数据,不要过度滥用它。