Escucha de transmisión de encendido / apagado de pantalla para un widget en Android Oreo

Tengo una aplicación de Android de widget de reloj que ahora estoy tratando de actualizar a los requisitos de API 26.

Hasta ahora utilicé un servicio en segundo plano que se registró al inicio en suonCreate método aBroadcastReceiver para recibir transmisiones del sistema, comoandroid.intent.action.SCREEN_ON, android.intent.action.SCREEN_OFF, android.intent.action.TIME_SET, android.intent.action.TIMEZONE_CHANGED. Este servicio detenía el reloj mientras la pantalla estaba apagada y lo despertaba cuando la pantalla se volvía a encender para ahorrar batería.

En Oreo, un servicio de este tipo no parece ser una opción, ya que tendría que ejecutarse en primer plano con una notificación que realmente no tiene importancia para el usuario. Además, por lo que he visto en la documentación,JobScheduler tampoco me puede ayudar, ya que no he encontrado que sea posible programar un trabajo cuando la pantalla está encendida.

Traté de crear unBroadcastReceiver dentro deAppWidgetProvider clase y registrarlo en elAppWidgetProvider'sonUpdate método para recibir las transmisiones de dicho sistema. Esto funciona bien y las transmisiones se reciben, pero solo hasta que la pantalla permanece apagada por un período de tiempo; luego, parece que el sistema mata a la aplicación de alguna manera, o de lo contrario deja de funcionar sin ningún error reportado o un bloqueo; sin embargo, si hago clic en él, se abrirá la actividad de configuración de forma normal.

Mis preguntas:

¿Cómo escucho correctamente las transmisiones de encendido / apagado de la pantalla en API 26+ si no quiero ejecutar un servicio en primer plano?

¿Es posible escuchar transmisiones del sistema desdeAppWidgetProvider clase en sí, registrando unBroadcastReceiver dentro de él, o incluso registrándoseAppWidgetProvider para recibir eventos del sistema (de todos modosAppWidgetProvider es una extensión deBroadcastReceiver)

¿Por qué miAppWidgetProvider ¿Aparentemente deja de recibir intenciones del sistema transmitido después de un período de sueño?

EDITAR:

Encontré lo siguiente en la documentación de Android pararegisterReceiver método que parece ser la respuesta a mis preguntas 2 y 3.

Nota: este método no se puede llamar desde un componente BroadcastReceiver; es decir, desde un BroadcastReceiver que se declara en el manifiesto de una aplicación. Sin embargo, está bien llamar a este método desde otro BroadcastReceiver que se haya registrado en tiempo de ejecución con registerReceiver (BroadcastReceiver, IntentFilter), ya que la vida útil de dicho BroadcastReceiver registrado está vinculada al objeto que lo registró.

Yo concluiría que mi uso y registro de unBroadcastReceiver dentro deAppWidgetProvider fue contrario a esta especificación.

Dejaré esta publicación abierta porque otros pueden encontrar útil esta información y mi pregunta 1 aún sigue siendo válida.

Respuestas a la pregunta(1)

Su respuesta a la pregunta