Java.lang.outofmemoryerror android.graphics.BitmapFactory.nativeDecodeAsset (Método nativo)
Mientras que la configuración de la vista de contenido que tengo esta excepción. Ya he tratado de manejar esta excepción por:
try{ setContentView(R.layout.activity_main); }catch (OutOfMemoryError e) { e.printStackTrace(); }
Esta excepción se produjo 5 de cada 100 veces durante la prueba. Pero no puedo resolver este problema. O de lo contrario mi equipo QA me matará en esto 🙁
- ¿Por qué tanta memoria?
- Bitmap decodeStream OutOfMemory Excepción
- Java.lang.OutOfMemoryError Incluso en un bloque try-catch?
- Google maps api v2 fuera de error de memoria
- Guardando una imagen grande en PNG
- Diff b / w bitmap.recycle () y bitmap = nulo
- Error de OutOfMemory al unir imágenes grandes
- Android Drawable.createFromStream ha asignado demasiada memoria
- ¿Cómo cargar imágenes grandes en Android y evitar el error de memoria?
- Android: ¿Cómo resolver Bitmap java.lang.OutOfMemoryError?
- Error de memoria al cargar mapas de bits
- El mapa de bits rotativo hace que outOfMemoryException
- Bitmap crear fuera de la memoria
Hay varias maneras de resolver este tipo de error. Por lo general, es porque la resolución de la imagen es demasiado alta en su diseño. Estas son sus opciones:
-
Solicite una imagen de menor resolución (menos píxeles). Eso puede no ser aceptable, pero su equipo debe ser consciente de las restricciones de memoria.
-
Quite las imágenes del diseño, pero deje los elementos
ImageView
, si los hay. Si es un fondo, quite el fondo. A continuación, utilice java para cargar las imágenes de manera eficiente. Tendrá que medir el tamaño de la pantalla y / o el tamaño de los elementos que desea que las imágenes antes de cargar. Los documentos Android tienen un gran ejemplo aquí:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
- Aumente el "heapSize" para su aplicación. Este es un último complejo! De lo contrario, es probable que se ejecuta en el mismo error en el futuro y luego tiene que resolverlo utilizando uno de los métodos anteriores … y su QA realmente no le gustará entonces! Aquí hay una referencia en
heapSize
:
¿Cómo aumentar el tamaño de montón de una aplicación de Android?
También es posible que esté haciendo referencia a imágenes en otra pantalla o que de lo contrario tenga una pérdida de memoria, en cuyo caso debe revisar cualquier código que se llame antes de esto (incluyendo otras actividades) para encontrar dónde están esas filtraciones. Las causas probables son cosas como pasar una Activity
a un hilo o servicio de fondo en lugar de pasarlo sólo a Contexto, crear referencias estáticas a imágenes, no utilizar WeakReference
para manejar objetos de memoria grandes pasados a otros procesos o subprocesos inusuales a referencias a objetos .
Como se ha mencionado por otros esto está sucediendo porque la aplicación está teniendo pérdida de memoria o su aplicación está usando demasiada memoria.
Trate de reducir el número de capas en su archivo de diseño en primer lugar, esto probablemente resolvería el problema. En caso de que esto no instale el plugin MAT, con esto puedes comprobar la cantidad de memoria que está siendo utilizada por tu aplicación en tiempo de ejecución. Puede haber una posibilidad de que una actividad anterior se haya abierto antes de que su actividad no esté liberando memoria o las vistas no se estén reciclando correctamente en la lista / cuadrícula
PS: Reduzca el número de capas en su archivo de disposición que funcionaría más probablemente
El código proporcionado no es necesariamente la causa de OutOfMemoryError. La causa principal de OutOfMemory es que JVM GC no puede liberar suficiente memoria para que su operación continúe.
Suponiendo que setContentView es de hecho una operación pesada, y el tamaño de resolución decreciente de la imagen, lo resolvería por un tiempo, este problema volvería a aparecer en un lugar diferente en el sistema, en un tiempo diferente.
Usted puede google las razones por las que GC no puede asignar suficiente espacio, por lo general significa que tiene alguna referencia obsoleta en su código, que usted necesita para limpiar, a fin de ayudar a su GC.
Sugeriría usar un profiler para su uso, para seguir cómo el espacio se asigna y se despeja en su uso. Tienes un estándar por defecto con android.