Защо получавам android.os.TransactionTooLargeException в моето приложение за Android, написано на Kotlin/rxJava, когато излизам от приложението? (при изход/при пауза)?

Работя върху приложение в Kotlin/rxJava и от известно време се боря с грешка.

Всеки път, когато изляза от приложението, получавам изскачащ прозорец, в който пише: „За съжаление, AppName спря.“.

Получавам тази грешка в конзолата: java.lang.RuntimeException: android.os.TransactionTooLargeException: размер на пакета с данни 896824 байта**enter code here**

Когато използвам телефон с API 23 или по-ниска, грешката не възниква, но с 24 и 25 получавам грешката и приложението се „срива“, СЛЕД като изляза от приложението. И става наистина досадно, както за мен като разработчик, така и разбира се за потребителите.

Грешката възниква всеки път, когато се опитам да изляза от приложението по някакъв начин. Ако щракна върху връзка, която ме отвежда до браузъра, добавя/изпращам лице за контакт от моето приложение към списъка с контакти на телефона или споделям чрез Gmail, Google+, bluetooth и др., възниква грешката. И така, това, което се случва, е, че при всички тези проблеми трябва да изляза от приложението (натисна бутона за начало) или да отворя друго приложение от приложението (контакти, gmail и т.н.) и приложението се срива.

Мога също да спомена, че когато добавя човек от моето приложение към списъка с контакти на телефона, цялата информация се изпраща и аз мога да добавя човека.

Някой има ли представа защо това се случва? Чувствайте се свободни да ме попитате за повече подробности, ако е необходимо, имам този бъг от известно време и е много дразнещ.

Цялата грешка:

04-12 08:46:18.128 23287-23287/com.****.***** E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.******.*******, PID: 23287
                                                                         java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 896824 bytes
                                                                             at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3781)
                                                                             at android.os.Handler.handleCallback(Handler.java:751)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:154)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                          Caused by: android.os.TransactionTooLargeException: data parcel size 896824 bytes
                                                                             at android.os.BinderProxy.transactNative(Native Method)
                                                                             at android.os.BinderProxy.transact(Binder.java:615)
                                                                             at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3636)
                                                                             at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3773)
                                                                             at android.os.Handler.handleCallback(Handler.java:751) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                             at android.os.Looper.loop(Looper.java:154) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

person Ola Nordmann    schedule 12.04.2017    source източник
comment
Проверихте ли това?   -  person Piyush    schedule 12.04.2017
comment
Възможен дубликат на Какво да се направи при TransactionTooLargeException   -  person Bertram Gilfoyle    schedule 12.04.2017
comment
Ще го проверя @Piyush!   -  person Ola Nordmann    schedule 12.04.2017
comment
Може да е @AhamadAnees! Благодаря за линка, ще го проверя!   -  person Ola Nordmann    schedule 12.04.2017


Отговори (1)


Това се причинява, когато пакетът savedInstanceState на Activity е твърде голям. Трябва да проверите какви обекти се запазват, когато се извика onPause. Имах точно същия проблем, когато се занимавах с Bitmaps. Вярвам, че това всъщност е проблем само при по-новите версии на Android, тъй като всъщност хвърля изключение сега, вместо просто да го потиска.

person jburn2712    schedule 12.04.2017
comment
Вярно е, че въпреки че в предишните версии на android проблемът винаги е бил там, но никога не е бил подробно описан, под android 6.0 ще получите изключение като вече използван адрес или нещо смешно - person wax911; 26.07.2017