Uso de memoria en Android

Para que nuestra aplicación sea del agrado de los usuarios y la haga famosa, la memoria juega un papel muy importante. Cuanto menor sea el requisito de memoria para la aplicación, más rápido se ejecutará la aplicación en un dispositivo específico. Debemos tener cuidado si la aplicación se ejecuta en un dispositivo de nivel de entrada y sabemos que la mayoría de los usuarios de Android usan dispositivos de nivel de entrada. Aquí los dispositivos de nivel de entrada significan dispositivos de bajo costo. Entonces, por brindar una mejor experiencia de usuario y por fortalecer el sistema Android. Todo buen desarrollador de Android debe comprender el uso de memoria de una aplicación. Entonces, en este artículo, entenderemos el uso de la memoria en Android. Esto podría ser complejo, por lo que lo dividiremos en los siguientes pasos.

  • ¿Por qué debemos aprender sobre el uso de la memoria?
  • ¿Cómo afecta el uso de la memoria al dispositivo?
  • Reducir el impacto de la memoria en la aplicación.

¿Por qué debemos aprender sobre el uso de la memoria?

Entonces, antes de comprender el uso de la memoria, debemos comprender por qué deberíamos preocuparnos por comprender el uso de la memoria. Básicamente, hay tres tipos de dispositivos Android en el mercado. 

  • Nivel Básico
  • Nivel medio
  • Nivel Premium

De estos tres tipos de dispositivos, los dispositivos de nivel de entrada tienen poca memoria y estos dispositivos solo pueden ejecutar aquellas aplicaciones que requieren poca memoria, entonces, si el uso de memoria de la aplicación aumenta, será difícil para el dispositivo de nivel de entrada. para ejecutar la aplicación. Como resultado, los usuarios tendrán una experiencia de usuario realmente mala y es posible que dejen de usar la aplicación debido a dicho rendimiento. Esto también tendrá un efecto negativo en el ecosistema de Android. (es decir, una colección de aplicaciones, dispositivos y usuarios).

Memory Availability and Usage

A pesar de que esto es un problema en los dispositivos de bajo nivel, un buen desarrollador de Android debe hacer todo lo posible para que la aplicación funcione mejor, sea eficiente en el uso de la memoria y reduzca el uso de la memoria.

¿Cómo afecta el uso de la memoria al dispositivo?

Ahora veremos cómo los altos requisitos de memoria afectan a un dispositivo. Generalmente, la memoria de un dispositivo Android se divide en páginas y cada página tiene alrededor de 4 Kilobytes. Hay tres tipos de páginas.

Physical Memory On Device

  1. Páginas usadas: Estas son las páginas que están siendo usadas actualmente por los procesos.
  2. Páginas en caché: estas son las páginas que utilizan los procesos, pero una parte de la memoria también está presente en la memoria principal. Entonces, para tener una recuperación rápida de datos, usamos páginas en caché.
  3. Páginas libres: estas son las páginas que están libres, es decir, este es el espacio de memoria que se puede usar para almacenar algo en el futuro.

Ahora, veamos cuál es el impacto de la presión de la memoria en los dispositivos Android. El siguiente gráfico muestra el uso de la memoria durante el transcurso del tiempo. Entonces, al principio, no hay nada que ejecutar, pero con el transcurso del tiempo, comenzamos a usar más aplicaciones y esto, a su vez, usa más y más memoria con el tiempo.

En el gráfico anterior, podemos ver claramente que al principio, cuando el dispositivo comienza a funcionar, ya hay mucha memoria libre disponible. Pero cuando comenzamos a usar otras aplicaciones, la memoria libre se está utilizando y para evitar que algo malo pueda suceder debido a la poca memoria, el kernel realiza una operación que se llama kswapd.

En el proceso de kswapd, si la memoria del dispositivo desciende por debajo del umbral de kswapd, el kernel de Linux comenzará a encontrar más memoria libre. Entonces, lo que hace es recuperar las páginas almacenadas en caché y liberarlas. Pero el problema aquí es que si queremos que una aplicación recupere la memoria presente en las páginas almacenadas en caché, llevará algún tiempo porque en este momento no hay nada en la página almacenada en caché y los datos se cargarán desde el almacenamiento del dispositivo. 

En Android, hay un proceso llamado asesino de memoria baja, y este seleccionará un proceso del dispositivo Android y lo matará por completo. Al hacer eso, recuperaremos toda la memoria que estaba usando el proceso. Pero, ¿qué pasa si un asesino con poca memoria mata el proceso que es importante para el usuario? En Android, hay una lista de aplicaciones prioritarias y, en función de la lista de prioridades, eliminamos la aplicación cuando entra en juego el asesino de memoria baja. La siguiente es la lista de prioridad en Android: 

Cada vez que el asesino de memoria baja entra en juego, primero eliminará las aplicaciones almacenadas en caché. Incluso después de eso, el uso de la memoria seguirá aumentando y el asesino de memoria baja matará las aplicaciones abiertas anteriormente. Ahora, si el usuario desea abrir las aplicaciones abiertas anteriormente, llevará algún tiempo iniciar la aplicación porque actualmente no está presente en la memoria caché. 

Nuevamente, si el uso de la memoria sigue aumentando, la aplicación doméstica se eliminará y, después de ese servicio, las aplicaciones perceptibles, de primer plano y persistentes se detendrán o destruirán. Nuevamente, si el uso de la memoria sigue aumentando, la aplicación del sistema se eliminará y nuestro teléfono se reiniciará 🙁 Esta es la peor experiencia de usuario que podemos tener en dispositivos con poca memoria o dispositivos de nivel de entrada). El ejemplo que tomamos fue un dispositivo de 2GB. La situación empeora cuando tiene un dispositivo de 512 MB.

152 MB device under memory pressure

En el ejemplo dado arriba, tenemos muy poca memoria y debido a esto, kswapd y low memory killer entrarán en juego mucho antes. Por lo tanto, Low Memory Killer siempre estará activo y esto dará como resultado una experiencia de usuario muy mala. Debemos hacer todo lo posible para desarrollar una aplicación que también pueda funcionar bien en situaciones de poca memoria.

Ahora entendemos cómo saber cuál es el impacto de la memoria de nuestra aplicación en algunos dispositivos de nivel de entrada. En la sección anterior, hemos visto que la memoria del dispositivo se divide en varias páginas y el sistema del kernel de Linux realiza un seguimiento de la páginas utilizadas por una aplicación específica.

Pero la situación empeorará cuando la aplicación comience a usar parte de la memoria compartida. Tomemos un ejemplo, puede tener una aplicación que llame a los Servicios de Google Play y esto, a cambio, resulte en el intercambio de páginas entre estas dos aplicaciones.

Ahora, el problema que surge aquí ahora es cómo lidiar con esta memoria compartida. ¿Es la aplicación responsable de la memoria compartida? o Google Play Services es responsable de esta memoria compartida? Hay algunas formas diferentes que se pueden utilizar para hacer frente a estas situaciones:

  • RSS (Tamaño del conjunto residente): en este método, la aplicación es responsable de toda la memoria compartida en nuestro ejemplo, Google Play Service no tendrá que hacer nada y la aplicación que usa Google Play Service será responsable de compartir la memoria.
  • USS (Unique Shared Set) : en este método, la aplicación no es responsable de ninguna de las páginas compartidas.
  • PSS (Tamaño de conjunto proporcional) : en este método, la aplicación será responsable de la cantidad de páginas que son proporcionales a la cantidad de procesos que comparten la memoria compartida. Por ejemplo, si la memoria compartida contiene 4 páginas, la memoria se comparte entre dos procesos y la aplicación será responsable de solo dos páginas. Si la página compartida es 4 y la cantidad de procesos compartidos será 3, la aplicación manejará 4/3 páginas.

Reducción del impacto de la memoria en la aplicación

Hasta ahora, hemos visto cómo el uso de la memoria tiene un impacto importante en un dispositivo. Vimos cómo evaluar el impacto en la memoria de la aplicación. Ahora, encontraremos formas que se pueden usar para reducir el impacto en la memoria de su aplicación. Echemos un vistazo a cómo podemos hacer esto. El primer paso para reducir el impacto en la memoria de su aplicación puede ser verificar el generador de perfiles de memoria de Android Studio.

Reducing memory impact on the app

Esto le dará mucha información, por ejemplo, conocerá su objeto Java, dónde están asignados, qué los retiene y casi todo lo que puede encontrar sobre su objeto Java. Al encontrar el valor de PSS, solo consideramos el montón de Java. Ahora sabemos la importancia del uso de la memoria.

Publicación traducida automáticamente

Artículo escrito por shekharshinde9990 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 *