【问题标题】:android.os.TransactionTooLargeException: data parcel size NOUGAT ERRORandroid.os.TransactionTooLargeException: 数据包大小 NOUGAT ERROR
【发布时间】:2019-09-15 05:42:56
【问题描述】:

我正在使用 RETROFIT 进行 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)

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

谁能帮我弄清楚这里的问题是什么以及如何找到解决方案?

根据我的研究,这只发生在版本 >= Nougat 的 android 设备上。在此之下,它就像小菜一碟。

我也尝试了以下提到的一些解决方案: --> onSaveInstanceState.clear() - 但这不起作用。 you can find the post here

【问题讨论】:

    标签: java android exception parcelable transactiontoolargeexception


    【解决方案1】:

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

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

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

    Bundle 旨在仅保留简单和小数据,不要过度滥用它。

    【讨论】:

    • 是的。通过切片复杂对象并仅使用那些正在使用的键来修复它。谢谢@toantran
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2019-03-13
    • 1970-01-01
    • 2018-11-11
    • 2013-01-05
    • 1970-01-01
    • 2020-03-29
    • 2016-03-19
    相关资源
    最近更新 更多