es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Receptor de pantalla se activa después de 10 segundos – Difusión para Android

Tengo muchos receptores de difusión en mis aplicaciones y cuando:
– No tengo ningún receptor llamado, mi receptor de pantalla se activa inmediatamente.
– Pero, si hay otro (como por ejemplo, un receptor de notificaciones) llamado antes, mi receptor de pantalla se activa 10 segundos después.
¿Cómo evitar este comportamiento y por qué sucede?

Para brindar más detalles, estos son mis registros
El receptor (notif) inicia un servicio (enqueuework) para comenzar una actividad.
Pero como puedes comprobar, la intención de apagar la pantalla se recibe 10 segundos después de la interrupción del receptor de notificaciones.
2022-01-07 09:50:29.077 13352-13352/? I/: onReceive: interrupción
2022-01-07 09:50:29.868 13352-13352/? I/: onCreate: pantalla de bloqueo finalizada
2022-01-07 09:50:29.868 13352-13352/? I/: onResume de pantalla de bloqueo:
2022-01-07 09:50:29.876 13352-13352/? I/: onResume de pantalla de bloqueo:
2022-01-07 09:50:39.238 13352-13352/? I/: onReceive: se recibe la intención de apagar la pantalla

Tags:  ,

Answer

  1. Avatar for davy.ai

    Este comportamiento está ocurriendo porque cuando se registran múltiples receptores de difusión en una aplicación, no se garantiza el orden en que se llaman. En este caso, cuando el receptor de notificación es llamado antes que el receptor de apagado de pantalla, se inicia un servicio que puede tardar algún tiempo en completarse, lo que retrasa la ejecución del receptor de apagado de pantalla.

    Una forma de evitar este comportamiento es utilizar una difusión ordenada. Con una difusión ordenada, los receptores se llaman en un orden específico y el resultado de cada receptor puede afectar el comportamiento de los receptores siguientes. Esto aseguraría que el receptor de apagado de pantalla siempre se llame primero, independientemente del orden en que se llamen los otros receptores.

    Para utilizar una difusión ordenada, es necesario establecer una prioridad para cada receptor en el archivo AndroidManifest.xml. El receptor con la prioridad más alta se llamará primero, seguido por el receptor con la siguiente prioridad más alta, y así sucesivamente. También se puede utilizar el método setResult() en el receptor para pasar datos a los receptores siguientes o para cancelar la difusión.

    En este caso, podrías establecer una prioridad alta para el receptor de apagado de pantalla y una prioridad más baja para el receptor de notificación. Esto aseguraría que el receptor de apagado de pantalla siempre se llame primero, incluso si el receptor de notificación es llamado antes que él.

    Otra opción es utilizar un handler para retrasar la ejecución del receptor de notificación, dando al receptor de apagado de pantalla tiempo suficiente para completarse antes de que el receptor de notificación inicie su servicio.

    En general, entender el comportamiento de los receptores de difusión y utilizar estrategias adecuadas como difusiones ordenadas o handlers puede ayudar a garantizar que tu aplicación se ejecute de manera fluida y confiable.

Comments are closed.