Transazione TooLargeException per ridurre al minimo l’app

sto avendo un TransactionTooLargeException quando si chiude / minimizzare la mia applicazione. sto presupponendo che è dovuto il mio pacchetto che è troppo grande (3 JSONArrays come stringhe), ma sarebbe grande se qualcuno potesse diagnosticare più informazioni dalla mia traccia di errore.

ecco qui:

05-28 17:17:25.994 9518-9518/com.adamtrudeauarcaro.godbuilder E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 551100)
05-28 17:17:25.996 9518-9518/com.adamtrudeauarcaro.godbuilder D/AndroidRuntime: Shutting down VM
05-28 17:17:25.998 9518-9518/com.adamtrudeauarcaro.godbuilder E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                Process: com.package.godbuilder, PID: 9518
                                                                                java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 551100 bytes
                                                                                    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4211)
                                                                                    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:6688)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
                                                                                 Caused by: android.os.TransactionTooLargeException: data parcel size 551100 bytes
                                                                                    at android.os.BinderProxy.transactNative(Native Method)
                                                                                    at android.os.BinderProxy.transact(Binder.java:628)
                                                                                    at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4132)
                                                                                    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4203)
                                                                                    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:6688) 
                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

EN From: TransactionTooLargeException when minimizing app

More similar articles:

15 Comments

  1. @CommonsWare Non ho definito questo metodo, l’errore potrebbe ancora essere causato dall’implementazione implicita?

  2. dalla tua traccia di errore non dice, ma posso dirvi per esperienza certamente che questo accade quando il pacchetto è troppo grande per memorizzare come uno stato di istanza salvato. il che significa che quando si minimizza l’applicazione, si cerca di chiamare onSaveInstanceState e il bundle è la memorizzazione di più dati rispetto al supportato dal sistema.

    1. impressionante, Ho solo bisogno di qualche conferma che questo era il problema prima di cambiare il mio disegno. grazie!!

  3. @CommonsWare Ho ArrayList contiene da 10 a 20 immagini in forma di base64 e mostrandolo in vista riciclatore, ma sulla minimizzazione app crash a causa della stessa ragione di cui in questione. quale potrebbe essere la soluzione?

  4. @ZaidMirza: Non mettere quelle immagini nello stato di istanza salvato Bundle e non passarli tra le attività che utilizzano Intent extra. utilizzare un’architettura a singola attività (con frammenti per i diversi schermi) e utilizzare ViewModel per mantenere tali immagini attraverso i cambiamenti di configurazione. se avete bisogno di queste immagini in più schermi, utilizzare un condiviso ViewModel.

  5. @CommonsWare non mettere nulla su istanza salvata. sembra che il sistema sta cercando di salvare frammento e i suoi dati in modo che possa essere ripristinato in seguito quando l’utente riprendere da tornare app da recente schermo app o in qualsiasi altro modo

  6. @ZaidMirza: Corretto. tuttavia, c’è un limite per quanto spazio si può consumare in quel modo, e si sta superando quel limite. se si dispone di dati che devono sopravvivere processo della vostra applicazione in fase di cessazione, memorizzarlo sul disco.

  7. @CommonsWare sì hai ragione, ma il problema è come possiamo salvare i nostri dati su disco quando l’utente preme il pulsante di casa e chiaro riciclatore vista elenco sorgente in modo che non poteva essere salvato dal sistema. cosa potrebbe essere opportuno callback? OnSaveIstanza? (la dimensione dei dati della miniera è di 2.15MB e Im consapevole che 1MB è limite)

  8. @ZaidMirza: “come possiamo salvare i nostri dati su disco quando l’utente preme il tasto home” — non lo fai. Lei salva i dati quando Lei riceve i dati. sto indovinando che state scaricando queste immagini. se è così, si dovrebbe usare una libreria di caricamento delle immagini con un’opzione di cache del disco (ad esempio, Glide, Picasso). anche se per qualche ragione non è possibile, una volta scaricato l’immagine, utilizzare un thread di sfondo per salvarlo nella propria cache.

  9. @CommonsWare sì non posso usare Glide o Picasso perché la sua una risposta JSON complesso di 2.15MB e Im utilizzando Retrofit per ottenere dati e la risposta cache di default credo. secondo voi, in parole semplici “dovrei cache service response on disk”. ma di nuovo, i dati sarebbero in ArrayList mentre mostra sullo schermo. così ho anche bisogno di cancellare ArrayList perché la sua tenuta tutti 2.15MB di dati.

  10. @ZaidMirza: Il ArrayList non entra nel Bundle per magia. sarà solo andare nel Bundle se si mette nel Bundle. quindi, non metterlo nel Bundle.

Leave a Reply

Your email address will not be published. Required fields are marked *