Create a background service [FRENCH] - nicolas-garcia/HowToXamarin GitHub Wiki

Background Service Android

Quelques liens vers mes recherches pour Android.

Background service

Des liens vers des ressources à propos des services d'arrière-plan. Comment les choisir et les mettre en place.

Solution retenue

Au final, la ressource la plus intéressante était l'article résumant un peu tout.

  1. Un service de type Android.App.Service, déclaré en tant que ForegroundService sur android 8.0+
  2. Un HandlerThread avec une priorité Background
  3. Un Handler utilisant le précédent HandlerThread.Looper
  4. Un WakeLock Partial est acquis auprès du PowerManager
  5. Toute les 5 secondes, une callback est exécuté effectuant un check est fait pour savoir si il faut envoyer un message via AlarmService.SendPeriodicMessage() puis elle programme une autre callback pour dans 5 secondes via Handler.PostDelayed()

Réserves

  • Malgré cette solution, certains device (Huawei) rentrent quand même en mode Doze. Pour y remédier, il faut s'attacher au GPS, ça l'empêche de basculer en mode Doze. Après 60 minutes de WakeLock, Huawei semble tuer quand même l'application
    Piste de résolution de ce problème ici
  • Sur mon One Plus 5, avec Android 8.0, la solution ne semble pas stable non plus

iOS

Quelques liens vers mes recherches pour iOS.

Application en Background

Sur iOS, toutes les applications ne peuvent pas tourner indéfiniment en arrière plan. Pour avoir ce privilège, il faut :

  • Jouer du contenu audible en arrière plan, tel qu'un lecteur musical
  • Enregister de l'audio en arrière plan
  • Garder l'utilisateur informé de sa position à tout moment, tel une application de navigation
  • Une application de VoIP
  • Une application qui a besoin de télécharger et traiter du contenu régulièrement
  • Une application qui reçoit des mise à jour régulières d'un accessoire externe

Source

Dans cette liste, nous sommes éligible à 2 items :

  • Garder l'utilisateur informé de sa position
  • Recevoir des mise à jour régulière d'un accessoire externe (BLE)

Malheureusement, une application ne peut pas tourner indéfiniment en arrière plan sans rien faire, un watchdog veille au grain et tue tout ce qui bouge depuis plus de 600 secondes.

Les choix offerts par iOS pour une tâche périodique en arrière plan sont :

En conclusion, la seule solution qu'il nous reste est la notification push. Petit détail, Apple se réserve le droit de limiter le nombre de notifications transmises via leurs serveurs APN. Cette limite est aujourd'hui inconnue.