Bueno, incluso si usara una variable de instancia, creo que esta no es la manera de hacerlo. ¿Quién va a llamar al destroy()
? Espero que no, es el trabajo del sistema operativo para hacerlo. Pero cuando está manteniendo un bloqueo de activación es muy poco probable que se llame al método destroy()
, porque el sistema operativo destruirá primero otras actividades/servicios.
Además de eso, es demasiado tarde para adquirir el bloqueo de activación en el método onCreate()
. Antes de que se llegue al onCreate()
, es posible que el teléfono ya se haya dormido cuando active el Servicio desde una alarma contra una actividad que esté en segundo plano.
Es difícil decir lo que debe hacer diferente ya que no le da mucho contexto. El curso habitual de los eventos es esto. Se llama a BroadcastReceiver
y en el onReceive()
adquiere el bloqueo de activación y lo coloca en una variable estática en su servicio. Cuando finaliza el servicio, debe llamar al stopSelf()
, liberar el bloqueo de activación y luego anular la variable estática que guarda una referencia al bloqueo.
Además, si utiliza un servicio, es muy probable que un bloqueo de activación no sea el deseado, pero sí un bloqueo parcial de activación. No necesita la pantalla para permanecer encendido, ¿verdad?
Lo sentimos, pero los bloqueos por activación son muy complicados de usar, debido exactamente a los problemas que describí anteriormente. Definitivamente es un tema avanzado y es fácil arruinarlo. Si lo haces, tu aplicación recibirá comentarios muy desagradables, porque aguantar demasiado tiempo es una ofensa importante ya que agota la batería. No lo tome de la manera incorrecta, pero dada la naturaleza del problema que publicó aquí (error de sintaxis/compilador), le sugiero encarecidamente que busque una solución sin un Servicio y que active el bloqueo.
Gracias por el comentario. En la aplicación en la que estoy trabajando necesito que el teléfono esté en modo 100% de activación, por lo tanto, ¿por qué utilicé el bloqueo de activación total? – Tom
Un wakelock parcial debería ser suficiente para encender la CPU y usar la red. – Eno
Gracias de mí también. Su explicación es sucinta, y más útil que la pregunta y la respuesta combinadas :) – Melllvar