Elige la API correcta para mantener el dispositivo activo

Cuando el usuario deja inactivo su dispositivo Android, este entra rápidamente en estado de suspensión para evitar que se agote la batería. Sin embargo, hay situaciones en las que una app necesita evitar que la CPU entre en el estado de suspensión. En algunos casos, es posible que la app deba mantener la pantalla encendida mientras funciona. En otros casos, la app no necesita mantener la pantalla encendida, pero sí requiere que la CPU esté activa.

El enfoque que elijas dependerá de las necesidades de tu app. Sin embargo, como regla general, te recomendamos que uses el enfoque más sencillo posible para minimizar el impacto de tu app en los recursos del sistema. Este documento te ayuda a elegir la tecnología de Android correcta para tu situación.

Elige la tecnología adecuada

La mejor opción para mantener el dispositivo activo depende de las necesidades de tu app. En esta sección, se te ayudará a elegir el enfoque adecuado.

Diagrama de flujo que resume cómo elegir el enfoque adecuado para mantener el dispositivo activo. El contenido del diagrama de flujo se explica en el siguiente texto.

  • ¿Tu app necesita mantener la pantalla encendida?
    • Si la respuesta es , consulta Cómo mantener la pantalla encendida. Es posible que haya una API de propósito especial que haga lo que necesitas. Por ejemplo, si implementas una IU de llamadas telefónicas, puedes usar el framework de telecomunicaciones de Android, que mantiene la pantalla encendida cuando es necesario. Si no hay una API de propósito especial para tu situación, puedes usar la API de keepScreenOn.
  • ¿Tu app ejecuta un servicio en primer plano y necesitas mantener el dispositivo activo cuando la pantalla está apagada mientras se ejecuta el servicio?
    • Si la respuesta es No, no es necesario que mantengas el dispositivo activo. Si el usuario interactúa activamente con la app, el dispositivo permanecerá activo. Si el usuario no interactúa con tu app y no estás ejecutando un servicio en primer plano, debes permitir que el dispositivo entre en modo de suspensión cuando sea necesario. Si solo necesitas asegurarte de que se realice algún trabajo mientras el usuario no está en la app, consulta la documentación sobre tareas en segundo plano para encontrar la mejor opción.
    • Si la respuesta es , primero confirma que realmente necesitas usar un servicio en primer plano. Según tu situación, es posible que haya una API de propósito especial que puedas usar para satisfacer tu necesidad en lugar de un servicio en primer plano. Puedes encontrar información sobre estos en la documentación del servicio en primer plano. Por ejemplo, si necesitas hacer un seguimiento de la ubicación del usuario, es posible que puedas usar la API de geocercas en lugar de un servicio en primer plano de location.
  • ¿Perjudicaría la experiencia del usuario si el dispositivo se suspende mientras se ejecuta el servicio en primer plano y la pantalla del dispositivo está apagada? (Por ejemplo, si usas un servicio en primer plano para actualizar las notificaciones, no sería una mala experiencia del usuario si el dispositivo se suspende).
    • Si la respuesta es No, no uses un bloqueo de activación. La acción se reanuda automáticamente cuando el usuario interactúa con su dispositivo, lo que lo saca del estado de suspensión.
    • Si la respuesta es , es posible que debas usar un bloqueo de activación. Sin embargo, debes verificar si ya estás usando una API o realizando una acción que declare un bloqueo de activación en tu nombre, como se explica en Acciones que mantienen el dispositivo activo.

Acciones que mantienen activo el dispositivo

Si tu app realiza alguna de las siguientes acciones, no es necesario que configures un bloqueo de activación por tu cuenta. Las siguientes acciones y APIs mantienen el dispositivo activo.

  • Si reproduces audio, el sistema de audio establece y administra un bloqueo de activación por ti, por lo que no es necesario que lo hagas tú mismo.
  • Si usas APIs o bibliotecas de programación de tareas, como WorkManager, JobScheduler o DownloadManager, el sistema o la biblioteca adquieren un bloqueo de activación que se atribuye a tu app.
  • Si usas Media3 ExoPlayer, puedes usar ExoPlayer.setWakeMode() para que el reproductor establezca un bloqueo de activación por ti.
  • Algunos sensores del dispositivo son sensores de activación. Puedes usar SensorManager para que esos sensores activen el dispositivo cuando tengan datos para informar. Para verificar si un sensor es de activación, llama a Sensor.isWakeUpSensor.
  • Si programas una alarma, el dispositivo se activa cuando suena la alarma, incluso si tu app no está en ejecución.

Consulta también