WakeLock finalizó mientras seguía teniendo error aunque lo estoy lanzando
Tengo un servicio que se debe ejecutar en el fondo. Comienza cuando mi aplicación está abierta y finaliza cuando mi aplicación está desactivada por el usuario.
Siempre que mi aplicación esté en segundo plano o cuando la pantalla esté apagada, todavía necesito que se ejecute el servicio.
- ¿Cómo usar Wake Lock para android mediaplayer?
- ¿Cómo las notificaciones necesitan WAKE_LOCK en android?
- Actualizaciones de ubicación de fondo android y wakelock
- ¿Cómo despertar android y mostrar la actividad?
- Cómo mantener el vibrador encendido indefinidamente de un servicio o receptor
Logré esto con un WakeLock, pero por alguna razón consigo el error en el título.
Esto es preocupante, ya que podría ser la memoria fugas de la WakeLock (si lo entiendo correctamente).
Puedo activar el error reiniciando 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()
suelto el WakeLock. No estoy seguro de qué está provocando el error.
- ¿El sistema operativo Android libera un wakelock si la aplicación o el servicio que lo contiene se destruye?
- ¿Cómo desactiva Android Wear cuando está en modo de suspensión?
- BroadcastReceiver Vs WakefulBroadcastReceiver
- AlarmManager y WakeLock
- ¿Cómo puedo ver qué wakelocks están activos?
- Temporizador Se ralentiza en Servicio cuando se bloquea la pantalla del dispositivo
- ¿Hay alguna manera de recibir un evento de espera de la CPU en Android?
- WakeLock bajo bloqueo GCM_LIB
Service.onStartCommand()
se puede llamar varias veces antes de Service.onDestroy()
, ya que no representan eventos / estados "opuestos" (vea Documentos ). Usted puede adquirir varios bloqueos (y perder la referencia al bloqueo adquirido anterior cada vez), pero cuando el servicio está terminado / se cierra la aplicación, está liberando sólo el último.
- ¿Cómo puedo verificar la facturación de Android en la aplicación con un servidor con Ruby?
- ¿Cómo importar sólo ABI de bibliotecas nativas seleccionadas de AAR?