android.os.TransactionTooLargeException при использовании гигантского recycleview - PullRequest
0 голосов
/ 26 октября 2019

Иногда я получаю это досадное исключение в своей основной деятельности.
трассировка стека выглядит следующим образом:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tomatedigital.lottogram, PID: 4430
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 543588 bytes
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4156)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: android.os.TransactionTooLargeException: data parcel size 543588 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:761)
        at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:5147)
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4148)
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6944) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

Сама трассировка не очень полезна, так как она не указывает, какой компонентили какой идентификатор транзакции или тег связан с Исключением (Google, пожалуйста, подумайте об отладке дерьма, которое вы там поместили) ... но я подозреваю, что это повторный просмотр, который я имею в своей основной деятельности.

Этот повторный просмотр может быть перегружен, ТЫСЯЧИ предметов. каждая из них содержит: 3 маленькие строки, 1 большую строку и одно маленькое растровое изображение.

Если это окно просмотра перегрузок перегружено и действие приостановлено, возникает это исключение. Так как создается окно повторного просмотра, раздувающее layout.xml, android сохраняет его состояние автоматически.

Есть ли простой способ обойти эту проблему?
Можно ли настроить приложение так, чтобы оно разрешало "очень большие транзакции"?
Что я могу сделать?

================ ОБНОВЛЕНИЕ =================== чтобы предоставить дополнительную информацию о моей деятельности

 @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putSerializable("media", this.media); //this is a domain class
        outState.putBoolean("canceled", this.canceled);
        outState.putInt("speed", this.speed);
        outState.putLong("startTime", this.startTime);
        outState.putSerializable("comments", (Serializable) this.adapter.getList()); //this is the large data
        outState.putBoolean("commentLoadComplet", this.complete);
        outState.putSerializable("fetched", (Serializable) this.fetched);
        outState.putSerializable("igiboAttendees", (Serializable) this.igiboAttendees);
        outState.putLong("winnerId", this.winnerId);

        super.onSaveInstanceState(outState);
    }
...