¿Cómo puedo mantener mi servicio Android en funcionamiento cuando la pantalla está apagada?

Cuando la pantalla se apaga, mi servicio de aplicación está en pausa.

Comienzo mi servicio con el siguiente código:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) { Intent svc = new Intent(this, MyService.class); startService(svc); } 

¿Cómo puedo evitar la pausa de servicio?


Lo que tengo que hacer en MyService es descargar algunos datos de Internet. Si he entendido que el proceso que tengo que seguir es:

  1. Adquirir wakeLock
  2. Descargar datos
  3. Liberación de wakeLock

En el método de descarga de datos no hay referencia a wakeLock, es la aplicación para tener wakeLock, ¿es correcto?

Los lockings Wake son referencias contadas por defecto. Creo que es mejor un wakeLock sin contar referencias, para estar seguro de liberarlo, ¿estoy equivocado?

Un WakeLock parcial es lo que quieres. Mantendrá la CPU abierta, incluso si la pantalla está apagada.

Adquirir:

 PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); 

Liberar:

 wakeLock.release(); 

WakeLock también es compatible con el recuento de referencias, por lo que es posible que tenga varias cosas en su servicio que requieran la funcionalidad de activación, y el dispositivo puede suspenderse cuando ninguna de ellas está activa.

Cosas a tener en cuenta:

Si utiliza el recuento de referencias, asegúrese de que todas las rutas de control a través de su aplicación adquirirán / liberarán … finalmente, los bloques son útiles aquí.

También asegúrese de mantener WakeLocks con poca frecuencia y por períodos cortos de tiempo. Se sumn en términos de uso de la batería. Adquiera su candado, haga su negocio y publíquelo lo antes posible.

Necesitas un locking de activación parcial.

Ejemplo detallado aquí en una pregunta anterior:

Wake bloquea el servicio de android recurrente

Solo estoy usando un servicio foregrgound.