Restricciones para iniciar actividades en segundo plano

Android 10 (nivel de API 29) y superiores aplican restricciones respecto de cuándo pueden iniciar actividades las apps en caso de que la app se esté ejecutando en segundo plano. Esas restricciones ayudan a minimizar las interrupciones que sufre el usuario y permiten que este tenga más control sobre lo que ve en la pantalla.

En esta guía se presenta el uso de notificaciones como alternativa para el inicio de actividades en segundo plano. Luego, se enumeran los casos específicos en los que la restricción no se aplica.

Cómo mostrar notificaciones

En casi todos los casos, las apps que se ejecutan en segundo plano deben mostrar las notificaciones sujetas a limitaciones temporales para suministrar información urgente al usuario en lugar de iniciar una actividad. Algunos ejemplos del uso de esas notificaciones incluyen el manejo de llamadas telefónicas entrantes o una alarma de reloj activa.

Este sistema de alertas y recordatorios basado en notificaciones ofrece varias ventajas a los usuarios:

  • Cuando usa el dispositivo, el usuario recibe una notificación emergente que le permite responder. Mantiene el contexto activo y tiene control sobre el contenido que ve en pantalla.
  • Las notificaciones sujetas a limitaciones temporales respetan las reglas de No interrumpir del usuario. Por ejemplo, los usuarios pueden optar por aceptar las llamadas de contactos específicos o personas que llaman recurrentemente cuando el modo "No interrumpir" está activado.
  • Si la pantalla del dispositivo está apagada, se lanza de inmediato el intent de pantalla completa.
  • En la pantalla Configuración del dispositivo, el usuario puede ver qué apps enviaron notificaciones recientemente, incluidas aquellas enviadas mediante canales de notificaciones específicos. En esa pantalla, el usuario puede controlar sus preferencias de notificaciones.

Excepciones a la restricción

Las apps que se ejecutan en Android 10 o superior pueden iniciar actividades únicamente si se cumplen una o más de las siguientes condiciones:

  • La app tiene una ventana visible, como una actividad en primer plano.
  • La app tiene una actividad en la pila de actividades de la tarea en primer plano.
  • La app tiene una actividad en la pila de actividades de una tarea existente en la pantalla Recientes.

  • La app tiene una actividad que se inició hace muy poco tiempo.

  • La app hizo una llamada a finish() en una actividad muy recientemente. Esto se aplica únicamente si la app tenía una actividad en primer plano o una actividad en la pila de actividades de la tarea en primer plano cuando se hizo la llamada a finish().

  • La app tiene un servicio enlazado por el sistema. Esta condición se aplica únicamente en el caso de los siguientes servicios, que podrían tener que lanzar una IU: AccessibilityService, AutofillService, CallRedirectionService, HostApduService, InCallService, TileService, VoiceInteractionService y VrListenerService.

  • La app tiene un servicio enlazado por otra app visible. Cabe señalar que la app enlazada al servicio debe permanecer en estado visible para que la app en segundo plano inicie actividades satisfactoriamente.

  • La app recibe una notificación PendingIntent del sistema. En el caso de los intents pendientes de servicios y receptores de emisiones, la app puede iniciar actividades durante algunos segundos después del envío del intent pendiente.

  • La app recibe una PendingIntent que se envía desde otra app visible.

  • La app recibe una trasmisión del sistema en la que se espera que la app lance una IU. Los ejemplos incluyen ACTION_NEW_OUTGOING_CALL y SECRET_CODE_ACTION. La app puede iniciar actividades durante unos segundos luego del envío de la transmisión.

  • La app está asociada con un dispositivo de hardware complementario mediante la API de CompanionDeviceManager. Esa API permite que la app inicie actividades en respuesta a acciones que el usuario realiza en el dispositivo sincronizado.

  • La app es un controlador de política de dispositivo que se ejecuta en modo de propietario de dispositivo. Los casos de uso de ejemplo incluyen los dispositivos empresariales totalmente administrados y los dispositivos exclusivos, como las firmas digitales y los quioscos.

  • La app recibió el permiso SYSTEM_ALERT_WINDOW del usuario.