Comment puis-je conserver mon service Android lorsque l’écran est désactivé?

Lorsque l’écran est désactivé, mon service d’application est en pause.

Je commence mon service avec le code suivant:

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

Comment puis-je éviter la pause de service?


Ce que je dois faire dans MyService est de télécharger des données sur Internet. Si j’ai bien compris, le processus à suivre est le suivant:

  1. Acquérir wakeLock
  2. Télécharger des données
  3. Libérer WakeLock

En téléchargeant la méthode data, il n’y a pas de référence à wakeLock, c’est l’application d’avoir le wakeLock, est-ce correct?

Les verrous de réveil sont comptés par défaut. Je pense qu’il vaut mieux un wakeLock sans compter les références, pour être sûr de le libérer, je me trompe?

Un WakeLock partiel est ce que vous voulez. Il maintiendra le processeur ouvert, même si l’écran est éteint.

Acquérir:

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

Pour libérer:

 wakeLock.release(); 

WakeLock prend également en charge le comptage de références, de sorte que plusieurs fonctionnalités de votre service peuvent nécessiter une fonctionnalité de réveil, et que l’appareil peut s’endormir si aucun n’est actif.

Choses à surveiller:

Si vous utilisez le comptage de références, assurez-vous que tous les chemins de contrôle de votre application acquerront / libéreront correctement … enfin les blocs seront utiles ici.

Veillez également à tenir WakeLocks rarement et pour de courtes périodes. Ils s’additionnent en termes d’utilisation de la batterie. Procurez-vous votre verrou, faites vos affaires et lancez-le dès que possible.

Vous avez besoin d’un verrou de sillage partiel.

Exemple détaillé dans une question précédente:

Wake locks service Android récurrent

J’utilise juste un service de premier plan.