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.
- Java.lang.SecurityException: bloqueo de permisos de BLUETOOTH. (Sólo dispositivos Samsung)
- ¿Cómo inyectar dependencias pojo usando dagger 2?
- Botón de acción flotante Desplazamiento comportamiento extraño
- ¿Cómo acceder a la base de datos mysql en android?
- Imprima un archivo PDF en una impresora usando PrintWriter a través de una conexión de socket
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
- Javax. * No se puede importar en mi aplicación para Android?
- R.Java no se actualiza
- ¿Qué hay de malo en este método de cálculo inSampleSize para Bitmaps? Sin memoria
- En Activity.onCreate (), ¿por qué Intent.getExtras () a veces devuelve null?
- Cómo dibujar gráfico de línea con diferentes colores en línea única
- Cómo analizar 2013-03-13T20: 59: 31 + 0000 cadena de fecha hasta la fecha
- Lista de lecturas <Item> con retrofit de XML API
- Escribir datos en un archivo de texto remoto en android
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
- Locales durante la prueba de unidad en Android
- Los servicios de Google Play están desactualizados. Requiere 3159100 pero encontrado 3158130