¿Cómo ocurre el error OutOfMemory y cómo resolverlo en Android?

Continuando con nuestro viaje desde la comprensión del error OutOfMemory del artículo anterior , ahora verificamos las razones principales que causan el error OOM en Android Studio. Todos los desarrolladores de Android deben haberse encontrado con OutOfMemoryError, a veces conocido como OOM. Si aún no ha encontrado un OOM en su aplicación de Android, lo encontrará en un futuro próximo. Las fugas de memoria causan OutOfMemoryError en Android. Para eliminar OutOfMemoryError, primero debe eliminar las fugas de memoria de su aplicación de Android.

¡El error!

Pero en primer lugar, ¿qué es exactamente una fuga de memoria?

Cuando ejecuta una aplicación en un dispositivo Android, el sistema Android le asigna memoria para que funcione. Todas las variables, funciones y creación de actividades, por ejemplo, ocurren solas en esa memoria.

Ejemplo: si el sistema Android asigna 200 MB a su programa, por ejemplo, su aplicación solo puede usar 200 MB a la vez. Si la cantidad de espacio asignado al programa se reduce con el tiempo, o si hay muy poco espacio disponible, el Recolector de basura (GC) liberará la memoria que contienen las variables y actividades que ya no están en uso. Como resultado, la aplicación obtendrá algo de espacio una vez más.

Sin embargo, si construye su código de tal manera que contenga referencias a objetos que ya no son necesarios, el Recolector de basura no podrá liberar el espacio no utilizado y la aplicación se quedará sin espacio. Esto se conoce como una pérdida de memoria.

Encontramos el error OutOfMemoryError en Android debido al fenómeno de fuga de memoria en Android porque su código contiene referencias a objetos que ya no son necesarios y el recolector de basura no puede realizar su trabajo, y su aplicación consume todo el espacio asignado. por el sistema Android y exige más.

¿Cuál podría ser la causa de un OutOfMemoryError?

OutOfMemoryError en Android puede ocurrir por una variedad de razones. Las siguientes son algunas de las causas más típicas de fugas de memoria que resultan en un OutOfMemoryError:

  • La clase interna que no es estática
  • Uso de getContext() y getApplicationContext() incorrectamente()
  • Aplicación de una vista estática, contexto o actividad

Repasemos cada uno de ellos uno por uno:

1. Clase interna que no es estática

Si tiene una clase anidada en su aplicación, conviértala en una clase estática porque las clases estáticas no requieren una referencia implícita a la clase externa. Si hace que la clase interna no sea estática, la clase externa estará activa hasta que la aplicación esté activa. Si su clase usa mucha memoria, esto puede resultar en un OutOfMemoryError. Como resultado, es preferible hacer que la clase interna sea estática. En Java, debe hacer que la clase interna sea estática manualmente, mientras que, en Kotlin, la clase interna es estática de manera predeterminada. En Kotlin, no tienes que preocuparte por las clases internas estáticas.

2. Uso incorrecto de getContext() y getApplicationContext()()

En nuestra aplicación, usamos muchas bibliotecas de terceros, y la mayoría de ellas emplean la clase Singleton. Si necesita dar algo de contexto a una biblioteca de terceros que está más allá del alcance de la actividad actual, use getApplicationContext() en lugar de getContext(). Como en el siguiente ejemplo , initialize es una función estática en la biblioteca que usa el contexto

Java

SomeLibrary
{
    object companion
    {
        initializeGeeksforGeeksLib(Content context)
        {
            this.context = context.getApplicationContext()
        }
    }
}

Sin embargo, algunas bibliotecas no utilizan la notación antes mencionada. Entonces, en ese escenario, usará el contexto de la actividad actual y la referencia de la actividad actual se mantendrá hasta que la aplicación esté activa, lo que puede resultar en un OutOfMemoryError (ya que la función de inicialización es estática). Como resultado, es preferible utilizar getApplicationContext() directamente en su código en lugar de depender de bibliotecas de terceros. Estos son algunos de los métodos para eliminar OutOfMemoryError de nuestra aplicación. Es preferible escribir código que no produzca un OutOfMemoryError. Aún así, si su proyecto es grande y tiene problemas para encontrar la clase que causa OutOfMemoryError, puede utilizar el generador de perfiles de memoria de Android Studio.para ubicar las clases que causan OutOfMemoryError.

3. Aplicación de una vista, contexto o actividad estática

Se producirá OutOfMemoryError si utiliza vistas, contextos o actividades estáticas (si sus actividades ocupan mucho espacio). Esto se debe a que el programa mantendrá la vista, el contexto o la actividad hasta que la aplicación esté activa, y el recolector de elementos no utilizados no liberará la memoria utilizada por estos .

Ejemplo: Si vas a utilizar Bitmap en algún proyecto. Ese proyecto encontrará el OutOfMemoryError en su dispositivo móvil si usa más de 10 fotos con un tamaño de 500 KB cada una. La cantidad de imágenes que pueden causar un OutOfMemoryError en otras situaciones puede ser mayor o menor que 10. Puede determinar el límite agregando fotos a BitmapArray una por una hasta obtener un OOM, que indica el límite del dispositivo.

Publicación traducida automáticamente

Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *