Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android.os.TransactionTooLargeException tirado al azar

Estoy viendo algunos informes de errores de una de mis aplicaciones en vivo, lo causado es esta excepción:

java.lang.RuntimeException: Adding window failed at android.view.ViewRootImpl.setView(ViewRootImpl.java:513) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(NativeStart.java) Caused by: android.os.TransactionTooLargeException at android.os.BinderProxy.transact(Binder.java) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683) at android.view.ViewRootImpl.setView(ViewRootImpl.java:502) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(NativeStart.java) 

De lo que he leído aquí , creo que la causa puede ser hasta un Parcelable demasiado grande que estoy añadiendo a un Intent extras. Actualmente estoy pasando un objeto de una actividad a otra, en que los objetos writeToParcel método Estoy guardando una cadena JSON que varía en tamaño de 1000 a 1500 caracteres de longitud. Podria ser esta la causa?

Durante la prueba de la aplicación a veces me doy cuenta de la interfaz de usuario se retrasa, ya que es baja en la memoria, se congela y luego la fuerza se cierra.

¿Sería mejor pasar el Objeto de una Actividad a otra usando variables estáticas o podría ser causado por algo completamente distinto?

Gracias

  • Cómo enviar objetos a través de un paquete
  • Hacer ArrayList de objetos personalizados parcelable
  • Lectura y escritura de matriz de números enteros a paquete
  • Beneficio de usar Parcelable en lugar de serializar objetos
  • Parcelable y herencia en Android
  • ¿Por qué es posible escribir una matriz booleana en un paquete pero no en un booleano?
  • Parcel.readException pasando un objeto al servicio remoto
  • Android: pasar la lista <GeoPoint> a otra actividad
  • 3 Solutions collect form web for “Android.os.TransactionTooLargeException tirado al azar”

    Sí, esto puede muy bien ser causado por un demasiado grande Parcelable, un gráfico de objetos demasiado grande para ser enviado como un Parcelable para ser exactos. En mi experiencia es mejor usar la serialización de java si está transfiriendo gráfico grande y eso es más o menos lo contrario de los consejos que obtendrá en otras partes de SO y en general. Para ser justos es mejor que usar Parcelable a través de Parceler lib, nunca he usado Pure Parcelable. Para más detalles vea mi post de blog sobre este tema.

    Según Qué hacer en TransactionTooLargeException :

    Esto puede ocurrir, cuando se pasa mucho de los datos a través de los extras de la intención

    Si es posible, divida la operación grande en trozos pequeños, por ejemplo, en lugar de llamar a applyBatch () con 1000 operaciones, llámelo con 100 cada uno.

    No intercambie datos enormes (> 1Mb) entre servicios y aplicaciones

    1Mb Según http://developer.android.com/reference/android/os/TransactionTooLargeException.html

    Cancelar

     onSaveInstanceState() 

    Si comprueba lo que está guardando, también podría haber un error. Como si lo haces

     outState.putParcelable("key", outState); //Error is passing the bundle 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.