Wakelock

De FdIwiki ELP
Saltar a: navegación, buscar

Introducción

¿Qué es un Wakelock?

Un Wakelock es un proceso que se ejecuta en segundo plano y que fuerza a la CPU a estar activa. Por lo tanto un Wakelock fuerza al dispositivo a mantenerse despierto aún cuando no lo estemos utilizando.

Un Wakelock no se debe confundir con los procesos de sincronización de cuentas que tengamos almacenados en nuestro Smartphone(por ejemplo, la sincronización de correos de Gmail para que cuando nos llegue un nuevo correo se notifique inmediatamente en el dispositivo). Estos procesos de sincronización si que pueden tener asociados Wakelocks.

Tipos

  • Parciales: mantienen la CPU activa, pero no la pantalla.
  • Totales: mantienen la CPU activa, además de la pantalla.

Motivación

Los procesadores actuales disponen de distintos modos de gasto de energía:

  • Modo idle: se usa cuando el procesador se encuentra totalmente inactivo, por lo que no se permite la ejecución de instrucciones.
  • Modo bajo consumo: el procesador tiene una frecuencia y voltaje bajos.
  • Modo alto rendimiento: el procesador tiene una frecuencia y voltaje altos.

Si por ejemplo suspendemos un ordenador, el kernel entra en el suspensión, en el cual se apagan las CPU y por consiguiente las aplicaciones que se encontraban en funcionamiento se interrumpen. Al suspender el ordenador también se apagan la pantalla y los discos del dispositivo, pero la RAM permanece activa.

Dado el carácter multimedia y el uso elevado de aplicaciones en segundo plano que tienen que mantenerse activas en los Smartphones (por ejemplo reproductor de música, Whatsapp, llamadas telefónicas...), el usuario no quiere que al bloquear la pantalla deje de ejecutarse aplicaciones que tenga ejecutando en segundo plano, por lo que estos dispositivos no deben entrar en el modo suspensión de la misma manera en la que lo hacen los ordenadores convencionales.

Por lo cual, se decidió implementar un mecanismo para Android llamado Wakelock, el cual permite a las aplicaciones, drivers y otros elementos indicar al sistema cuándo quieren que el sistema se mantenga activo para que las aplicaciones puedan seguirse ejecutando en un segundo plano.

Para ahorrar batería, los dispositivos Android se duermen rápidamente tras un corto periodo de inactividad del usuario. Por lo tanto, los Wakelocks pueden ser usados para mantener cierto Hardware activo: pantalla, CPU… durante un determinado tiempo.

Usos en aplicaciones

Los Wakelocks se utilizan en las aplicaciones Android para mantener cierto hardware encendido durante un tiempo determinado.

Ejecución de secciones críticas

Utilizamos Wakelocks para que al ejecutar una cierta sección crítica de código, el dispositivo no se apague. WakelockIncorrectoPrevio.png

Usos incorrectos

En esta sección detallamos los casos en los que se utilizan incorrectamente los Wakelocks, lo cual puede causar un gasto extra de energía o lo que es aún peor, un app crash.

Adquisición temprana/liberación tardía

En este caso se adquiere el Wakelock demasiado temprano o se libera demasiado tarde, teniéndolo así más tiempo del necesario, lo que ocasiona un gasto de energía al dispositivo. WakelockMalAdquiridoLiberado.png

Nunca se libera

En este otro caso el Wakelock se adquiere pero nunca se libera, por lo que el dispositivo nunca puede entrar en estado de suspensión y ocasiona un gran gasto de energía. WakelockNuncaLiberado.png

Liberación antes de adquisición

En este caso el Wakelock se libera antes de haberlo adquirido por lo que esto causa un crash app. WakelockAppCrash.png

Apps que utilizan Wakelocks

Wakelocks en el kernel

Controversias