android.os.TransactionTooLargeException: размер пакета данных NOUGAT ERROR

Я делаю вызов api с помощью RETROFIT, я получил ответ JSON от сервера, размер которого едва ли составляет 30 КБ. Пока 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, я смогу получить данные. Но это будет утомительный процесс.

Может ли кто-нибудь помочь мне разобраться, в чем проблема и как найти решение?

Согласно моим исследованиям, это происходит только с устройствами Android с версией>= Nougat. Ниже он работает как кусок пирога.

Я также пробовал некоторые решения, упомянутые в: -> onSaveInstanceState.clear(), но это не работает. вы можете найти сообщение здесь

1 ответ

Решение

Это типичная ошибка, когда вы помещаете большой объем данных в Bundle of Android.

Я бы посоветовал вам сделать это правильно. Большие данные должны быть постоянными на диске (либо в базе данных, либо в файлах), и вы только передаете ссылку на эти данные в другие места для их использования.

Здесь вы можете обнаружить, что 30 КБ - это мало, но фактическая конфигурация ограничения размера для Bundle может отличаться в зависимости от конфигурации различных устройств / поставщиков.

Пакет предназначен для хранения только простых и небольших данных, не злоупотребляйте ими.

Другие вопросы по тегам