keep developer acquire android android-service wakelock android-wake-lock

developer - powermanager android



WakeLock finalizó mientras aún se mantuvo el error a pesar de que lo estoy liberando. (1)

Tengo un servicio que debería ejecutarse en segundo plano. Se inicia cuando mi aplicación está abierta y finaliza cuando el usuario la desactiva.

Siempre que mi aplicación esté en segundo plano o cuando la pantalla esté apagada, todavía necesito que el servicio se ejecute.

Logré esto con un WakeLock, pero por alguna razón recibí el error en el título.

Esto es preocupante porque podría tener fugas de memoria en WakeLock (si lo comprendo correctamente).

Puedo activar el error al reiniciar mi aplicación.

Aquí está el código relevante:

public class SomeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG"); if (!mWakeLock.isHeld()) mWakeLock.acquire(); //Handle other processing return START_STICKY; } @Override public void onDestroy() { if (mWakeLock.isHeld()) mWakeLock.release(); super.onDestroy(); } }

Estoy perplejo porque en mi onDestroy() libero el WakeLock. No estoy seguro de qué está provocando el error.


Se puede llamar a Service.onStartCommand() varias veces antes de Service.onDestroy() , ya que no representan eventos / estados "opuestos" (consulte los docs ). Puede adquirir varios bloqueos (y perder la referencia al bloqueo adquirido anteriormente cada vez), pero cuando finaliza el servicio / se cierra la aplicación, solo se libera el último.