Aquí está la configuración:Android: unparceling causa una excepción de falta de memoria. Cómo inspeccionar objetos?
- tengo una actividad con una lista de elementos (actualizado desde el servidor, representada por una clase java normal). Los elementos se procesan a través de un BaseAdapter personalizado y una vista personalizada para cada fila.
- Los elementos implementan Parcelable, de modo que cuando se gira la pantalla, los elementos se guardan en el paquete como ParcelableArrayList, luego se restauran sin volver al servidor.
Hasta ahora, esta es una configuración bastante sencilla, sin embargo, quiero pasar uno de estos elementos a otra actividad. Bundle tiene un método "pubExtra (String, Parcelable)", que quería usar para colocar el objeto allí y luego pasarlo a través del intento. Cuando hice esto, el dispositivo comenzó a obtener una fuerza cerca debido a una OutOfMemoryException. Parece que al tratar de eliminar el objeto, solicita ~ 30mb (!)
Parece que el objeto debe contener referencias a otra cosa, ya que el objeto en sí mismo contiene solo algunos campos int/float/String y métodos relacionados . No he podido rastrear esto mirando el código o el inspector de depuración y no sé cómo usar el visor de Heap de manera efectiva.
¿Alguna sugerencia?
Aquí está la StackTrace
/dalvikvm-heap(5876): Out of memory on a 29098436-byte allocation.
I/dalvikvm(5876): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm(5876): | group="main" sCount=0 dsCount=0 s=N obj=0x4001d8d0 self=0xccc8
I/dalvikvm(5876): | sysTid=5876 nice=0 sched=0/0 cgrp=default handle=-1345017816
I/dalvikvm(5876): | schedstat=(1107116708 1124999998 2626)
I/dalvikvm(5876): at java.util.ArrayList.<init>(ArrayList.java:~84)
I/dalvikvm(5876): at android.os.Parcel.readArrayList(Parcel.java:1460)
I/dalvikvm(5876): at android.os.Parcel.readValue(Parcel.java:1792)
I/dalvikvm(5876): at android.os.Parcel.readMapInternal(Parcel.java:2007)
I/dalvikvm(5876): at android.os.Bundle.unparcel(Bundle.java:208)
I/dalvikvm(5876): at android.os.Bundle.containsKey(Bundle.java:249)
I/dalvikvm(5876): at <mypackage>.BaseDetailsActivity.isInModifyState(BaseDetailsActivity.java:184)
I/dalvikvm(5876): at <mypackage>.DetailsActivity.onCreate(DetailsActivity.java:230)
I/dalvikvm(5876): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
I/dalvikvm(5876): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
I/dalvikvm(5876): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
I/dalvikvm(5876): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
I/dalvikvm(5876): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
I/dalvikvm(5876): at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm(5876): at android.os.Looper.loop(Looper.java:123)
I/dalvikvm(5876): at android.app.ActivityThread.main(ActivityThread.java:4627)
I/dalvikvm(5876): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm(5876): at java.lang.reflect.Method.invoke(Method.java:521)
I/dalvikvm(5876): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
I/dalvikvm(5876): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
I/dalvikvm(5876): at dalvik.system.NativeStart.main(Native Method)
Tuve el mismo problema. Lo que hice fue tratar de leer los valores en orden inverso (pila). Pero en realidad necesitas leerlos en el mismo orden en que los pones. –
Creo que actúa más como un archivo binario, por lo que es más o menos FIFO –
Genial ... me ayudó ... ¡Demonios! –