Aplicación de Android sin problemas de memoria: probé todo y aún estoy perdido

Pasé 4 días completos intentando todo lo posible para descubrir la pérdida de memoria en una aplicación que estoy desarrollando, pero las cosas dejaron de tener sentido hace mucho tiempo.

La aplicación que estoy desarrollando es de naturaleza social, así que piense en las Actividades de perfil (P) y enumere las Actividades con datos, por ejemplo, insignias (B). Puede saltar de un perfil a una lista de distintivos a otros perfiles, a otras listas, etc.

Así que imagina un flujo como este P1 -> B1 -> P2 -> B2 -> P3 -> B3, etc. Por coherencia, estoy cargando perfiles e insignias del mismo usuario, por lo que cada página P es la misma y así es cada página B.

La esencia general del problema es: después de navegar un poco, dependiendo del tamaño de cada página, obtengo una excepción de memoria insuficiente en lugares aleatorios (mapas de bits, cadenas, etc.) no parece ser consistente .

Después de hacer todo lo imaginable para descubrir por qué me estoy quedando sin memoria, no se me ocurrió nada. Lo que no entiendo es por qué Android no está matando a P1, B1, etc. si se queda sin memoria al cargarlo y en su lugar se bloquea. Esperaría que estas actividades anteriores mueran y resuciten si alguna vez vuelvo a ellas a través de onCreate () y onRestoreInstanceState ().

Deje esto solo, incluso si hago P1 -> B1 -> Atrás -> B1 -> Atrás -> B1, todavía me cuelgo. Esto indica algún tipo de pérdida de memoria, pero incluso después de descargar hprof y usar MAT y JProfiler, no puedo identificarlo.

Deshabilité la carga de imágenes desde la web (y aumenté los datos de prueba cargados para compensarlo y hacer que la prueba sea justa) y me aseguré de que el caché de imágenes usa SoftReferences. Android en realidad intenta liberar las pocas SoftReferences que tiene, pero justo antes de que se quede sin memoria.

as páginas de @Badge obtienen datos de la web, los cargan en una matriz de EntityData desde un Adaptador de Base y los envían a ListView (en realidad estoy usando CommonsWare'sExcellent MergeAdapter, pero en esta actividad de Insignia, en realidad solo hay 1 adaptador de todos modos, pero quería mencionar este hecho de cualquier manera).

Revisé el código y no pude encontrar nada que pudiera filtrarse. Borré y anulé todo lo que pude encontrar e incluso System.gc () de izquierda a derecha, pero la aplicación aún se bloque

Todavía no entiendo por qué las actividades inactivas que están en la pila no se cosechan, y realmente me encantaría resolverlo.

n este punto, estoy buscando sugerencias, consejos, soluciones ... cualquier cosa que pueda ayudar.

Gracias

Respuestas a la pregunta(10)

Su respuesta a la pregunta