Eh bien, même si vous utilisiez une variable d'instance, je pense que ce n'est pas la façon de le faire. Qui va appeler destroy()
? J'espère que non, c'est le travail d'OS pour le faire. Mais lorsque vous maintenez un verrou de sillage, il est hautement improbable que votre méthode destroy()
soit appelée, car le système d'exploitation va d'abord détruire d'autres activités/services. En outre, il est trop tard pour acquérir le verrou de sillage dans la méthode onCreate()
. Avant d'atteindre le onCreate()
, le téléphone est peut-être déjà allumé lorsque vous déclenchez le service à partir d'une alarme par rapport à une activité en arrière-plan.
Il est difficile de dire ce que vous devriez faire différemment car vous ne donnez pas beaucoup de contexte. Le cours habituel des événements est celui-ci. Un BroadcastReceiver
est appelé et dans le onReceive()
vous acquérez le verrou de sillage et le placez dans une variable statique sur votre service. Lorsque le service est terminé, il doit appeler stopSelf()
, libérer le verrou de sillage, puis annuler la variable statique qui conserve une référence au verrou. En outre, si vous utilisez un service, un verrou de sillage complet n'est probablement pas ce que vous voulez, mais un verrou de sillage partiel est. Vous n'avez pas besoin de l'écran pour rester allumé, non?
Désolé, mais les verrous de réveil sont très compliqués à utiliser, à cause précisément des problèmes que j'ai décrits ci-dessus. C'est définitivement un sujet avancé et c'est facile à bousiller. Si vous le faites, votre application aura des commentaires très laids, parce que tenir pendant trop longtemps est une infraction majeure car elle draine la batterie. Ne prenez pas cela dans le mauvais sens, mais étant donné la nature du problème que vous avez posté ici (syntaxe/erreur du compilateur), je suggère fortement de rechercher une solution sans service et réveiller le verrou.
Merci pour le commentaire. Dans l'application sur laquelle je travaille, j'ai besoin que le téléphone soit en mode 100% wake, c'est pourquoi j'ai utilisé le verrou de réveil complet. – Tom
Un wakelock partiel devrait être suffisant pour alimenter le CPU et utiliser le réseau. – Eno
Merci de ma part. Votre explication est succincte, et plus utile que la question et la réponse combinées :) – Melllvar