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 может отличаться в зависимости от конфигурации различных устройств / поставщиков.
Пакет предназначен для хранения только простых и небольших данных, не злоупотребляйте ими.