Un message de gestionnaire n'a-t-il pas été déclenché lorsque la CPU dort?

J'ai une activité avec certains Handlers qui sont exécutés à intervalles d'au plus 5 minutes. L'activité est lancée à partir d'un BroadcastReceiver et peut être lancée avec l'écran inactif en attendant que l'utilisateur saisisse le téléphone et obtenez l'entrée de l'utilisateur, lorsque cela se produit, l'activité onPause() est appelée afin que la CPU soit en mode veille. Je n'ai pas configuré l'activité pour activer l'écran parce que je souhaite économiser autant de batterie que possible.

Je l'ai testé avec mon téléphone et fonctionne très bien, alors que l'écran est éteint. Tous les Handlers exécutent tous les codes qu'ils doivent exécuter. Si je allume et éteins l'écran pendant que l'activité est ouverte, tout fonctionne bien.

  • WakeLock a finalisé tout en conservant une erreur même si je la relève
  • Comment faire de l'appareil Android toujours en mode veille?
  • Comment implémenter un compte sur Android sans SyncAdapter
  • Désactiver l'écran sur Android
  • Android: Wake & Unlock Phone
  • Quelle est la manière appropriée, non obsolète, de réveiller l'appareil?
  • Maintenant, j'ai lu partout que certains périphériques ne fonctionnent pas comme prévu lorsque l'écran s'éteint et la CPU dort, la plupart du temps avec des accéléromètres. Maintenant, ma question est, dois-je acquérir un WakeLock afin que la CPU ne dort pas pendant que mon activité est ouverte? Je veux vraiment le savoir parce que, comme je l'ai déjà dit, je ne veux pas "gaspiller" la batterie en acquérant un coûteux WakeLock .

    Je préférerais une réponse détaillée d'une personne qui sait vraiment comment cela fonctionne.

    One Solution collect form web for “Un message de gestionnaire n'a-t-il pas été déclenché lorsque la CPU dort?”

    Votre objectif ne peut être atteint de manière stable par votre approche. Si vous utilisez une méthode postDelayed() de Handler et que la CPU passe à deepsleep, le compteur ms s'arrêtera et ne fonctionnera que si la CPU se réveille.

    Consultez ceci pour plus de détails.

    Donc, si vous voulez avoir une sorte de travail de cron, vous devrez utiliser wakelock. Heureusement, il existe une implémentation de service qui fait exactement cela: Wakeful IntentService

    Du document:

    Le modèle recommandé pour l'équivalent d'Android pour les tâches cron et les tâches planifiées de Windows consiste à utiliser AlarmManager. Cela fonctionne bien lorsqu'il est couplé à un IntentService, car le service effectuera son travail sur un thread d'arrière-plan et s'éteint lorsqu'il n'y a plus de travail à faire. Il y a un petit problème: IntentService ne fait rien pour que l'appareil soit éveillé. Si l'alarme était une variante WAKEUP, le téléphone restera éveillé tout seul tandis que BroadcastReceiver traitant l'alarme est dans sa méthode onReceive (). Sinon, le téléphone peut s'endormir. WakefulIntentService essaie de combattre cela en combinant la facilité d'IntentService avec un WakeLock partiel.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.