Fuga de memoria de Android?

Creo que mi aplicación para Android tiene una fuga de memoria. No estoy absolutamente seguro de que este es el problema sin embargo.

De vez en cuando la aplicación se bloquea al abrirse y logcat muestra una excepción "fuera de la memoria" al intentar cargar una imagen de mapa de bits.

Después de estrellarse, vuelvo a abrir la aplicación y funciona bien. Logcat muestra un montón de "gc" s y de vez en cuando la tabla JIT se cambia el tamaño hacia arriba, nunca hacia abajo hasta que la aplicación se bloquea con el error de memoria.

¿Esto suena como una pérdida de memoria? Si es así, ¿cómo hago para localizar y cerrar la fuga.

Aquí está mi meminfo de shell de adb para mi aplicación.

** MEMINFO in pid 2691 [com.example.deepcliff] ** native dalvik other total size: 23264 8839 N/A 32103 allocated: 12503 3826 N/A 16329 free: 168 5013 N/A 5181 (Pss): 2512 1395 13815 17722 (shared dirty): 2088 1844 5008 8940 (priv dirty): 2412 224 11316 13952 Objects Views: 0 ViewRoots: 0 AppContexts: 0 Activities: 0 Assets: 2 AssetManagers: 2 Local Binders: 55 Proxy Binders: 13 Death Recipients: 1 OpenSSL Sockets: 0 SQL heap: 129 MEMORY_USED: 129 PAGECACHE_OVERFLOW: 9 MALLOC_SIZE: 50 DATABASES pgsz dbsz Lookaside(b) Dbname 1 14 10 webview.db 1 6 18 webviewCache.db Asset Allocations zip:/data/app/com.example.deepcliff-2.apk:/resources.arsc: 17K 

Aquí hay un par de artículos y mensajes, que probablemente le ayudarán a ponerse en el camino correcto:

Rastreador de asignación , que viene con Android SDK es muy útil. Lea los artículos de Romain Guy. Me ayudó a localizar filtraciones bastante desagradables. También le ayuda a escribir mejor software. Por ejemplo, aprendí a crear menos objetos, usar más StringBuilder, y caché mucho más:
¿Qué herramientas y métodos de Android funcionan mejor para detectar fugas de memoria / recursos?

A veces, tu aplicación está tan desordenada que tienes que volver a diseñarla en su conjunto. Aquí están oficiales, buenas indirectas para eso (mi favorito es evitar crear objetos innecesarios ):
http://developer.android.com/guide/practices/design/performance.html

Aquí hay un excelente artículo sobre atacar sus problemas de memoria:
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html

Artículo oficial sobre cómo evitar fugas de memoria:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

Lea también esto: herramienta para comprobar fugas de memoria en android

Otros ya señalaron los mapas de bits . Aquí hay un artículo que describe el problema: http://zrgiu.com/blog/2011/01/android-bitmaps-and-out-of-memory-errors/

Esto no es una pérdida de memoria. Los dispositivos Android sólo tienen una cantidad limitada de memoria y sus mapas de bits deben ser demasiado grandes. Necesita encontrar una manera de reducir el tamaño de sus mapas de bits. Realmente no puedo decirte mucho más porque no nos has dado mucho para seguir.

Un valor típico del tamaño máximo del montón de la aplicación VM es 24 MB. Por ejemplo, si su imagen es 10Mpx (3600 x 2400), entonces asignaría 3600 x 2400 x 4 = 34'560'000 bytes, que es un caso OutOfMemoryError .

Cuando se trata de mapas de bits en android, asegúrese de reciclar el mapa de bits siempre que haya terminado de usarlo. Puede cargar un mapa de bits redimensionado estableciendo la opción inSampleSize. Más detalles aquí: http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

  • Gradle Javadoc tarea sin advertencias
  • W / CameraBase: Se ha producido un error al conectar la cámara: 0
  • Cómo obtener JSON Array dentro de JSON objeto?
  • Arquitectura estándar para aplicaciones de iOS / Android que requieren una interfaz de servidor
  • Cómo implementar un ContentProvider para proporcionar imágenes a Gmail, Facebook, Evernote, etc.
  • GCM no despertar dispositivo
  • Botón Atrás en ActionBar en MainActivity
  • SharedPreferences no funciona en todas las actividades
  • ¿Hay un plugin de estudio de Android que convertir código a diagramas UML
  • Agregar un proyecto .jar a androidstudio.
  • ¿Cómo configurar un filtro de color para XWalkView? (Resuelto)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.