web-dev-qa-db-fra.com

Comment exécuter un service en arrière-plan dans Oreo pendant une période plus longue?

Android Oreo a imposé de nombreuses restrictions à l'exécution du service en arrière-plan. Les services ne se comportent plus comme à l'habitude à Oreo, comme auparavant.

Mais que se passe-t-il si je dois exécuter un service en arrière-plan pendant de longues périodes? 

Je développe une application pour lancer la lampe de poche lorsque l'utilisateur secoue le téléphone. Pour ce faire, je vais devoir insérer le code du programme d'écoute du capteur dans un service. 

Comment puis-je empêcher le système Android de ne pas tuer le service.

PS: Je ne veux pas démarrer un service de premier plan avec une notification.

4
Gurleen Sethi

Comment puis-je empêcher le système Android de ne pas tuer le service.

Pour résumer les commentaires: Utilisez un service de premier plan, avec une notification sur un canal dédié, avec le canal défini sur IMPORTANCE_DEFAULT. Indiquez à l'utilisateur qu'il peut désactiver ce canal (par exemple, appuyez longuement sur la variable Notification dans la fenêtre de notification). L'utilisation d'un canal dédié signifie que vous pouvez toujours émettre des notifications sur d'autres canaux. Votre notification devrait également être utile:

  • Avoir une action "stop" pour arrêter votre service, si l'utilisateur veut l'arrêter pendant un moment

  • Si vous appuyez sur la notification elle-même, votre activité de configuration du comportement de votre application sera déclenchée.

Je ne veux pas démarrer un service de premier plan avec une notification.

Ensuite, vous ne pourrez probablement pas écrire votre application.

Je ne peux pas exclure la possibilité d'un bug dans Android 8.x qui pourrait être exploité afin de disposer d'un service à durée indéterminée. En fait, j’estime qu’il est assez probable que quelque chose flotte dans les parages. Cependant, cela va clairement à l'encontre des intentions de Google, à savoir:

  • Exploiter cette technique, sans ce que Google considérerait comme une justification valable, pourrait bannir votre application du Play Store, si c'est ainsi que vous avez prévu de la distribuer.

  • Le bug pourrait être corrigé dans une future version d'Android, et s'engager dans une course aux armements avec Google a tendance à être une proposition perdante

Il y a suffisamment d'applications de type "geste aérien" (c'est-à-dire, faire des choses basées sur un tremblement) que, idéalement, Google ajouterait une API dédiée à faible consommation d'énergie. Par exemple, ils pourraient ajouter une fonctionnalité à JobScheduler pour vous permettre de vous inscrire à un événement shake et invoquer votre JobService dans cette circonstance, tout comme ils vous permettent de vous inscrire pour les modifications apportées dans une ContentProvider. Je ne sais pas s'ils proposeront jamais une telle API, mais vous pouvez déposer une demande de fonctionnalité, si vous le souhaitez.

9
CommonsWare

Vous ne seriez pas en mesure d'exécuter des services d'arrière-plan depuis longtemps dans Oreo, car il y a des changements de comportement. Oréo pour optimiser la mémoire système, la batterie, etc., cela tue le service d'arrière-plan.

Jetez un coup d’œil à Limites d’exécution en arrière-planhttps://developer.Android.com/about/versions/oreo/Android-8.0-changes

J'espère que cela aide à comprendre le problème ....

0
Abdul Aziz