A priori non, les fonctions de geolocalisation ne permettent pas de maintenir
un processus actif lorsque l'écran se ferme.
Lorsque l'application est en background le système peut reprendre (s'entend
arrêter les processus en background) à tout moment pour libérer des
ressources.
2 pistes toutefois (que je voulais moi même tester lorsque j'aurais eu un peu
de temps) :
- J'ai remarqué que les fonctions geofence (
http://doc.pcsoft.fr/?1000019209 ) s'activaient même si l'application est en
background (à vérifier).
J'ai remarqué aussi (avec le dernier paramètre = -1) que, même si il n'y
avait pas d'entrée ou de sortie d'un périmètre donné, à partir du moment ou
on se trouve "dans" le périmètre défini lors du lancement de la fonction,
alors la callback était déclenchée régulièrement. Je me suis demandé s'il
s'agissait d'un bogue... J'avais alors écris ma propre procédure pour
discriminer les entrées/sorties d'un périmètre et surtout ne déclencher
qu'une seule fois. Or, je mettais dis qu'il serait peut-être possible de
détourner ce principe pour déclencher (par exemple relancer un processus ou
ouvrir une fenêtre régulièrement). Il s'agirait donc de mettre des
coordonnées latitude/longitude suffisamment larges pour être certaind'être
dans une zone de déclenchement. Vous voyez l'idée ?
- Une autre solution qui fonctionne et qui pourrait être une solution selon
votre application, c'est de tester régulièrement si l'application est en
ligne.
Par exemple, si votre application est en C/S, passer à True un flag (genre
isClientAlive) quelconque dans votre fichier users.
Ce flag doit être remis à False régulièrement par un procédure stockée. Ce
process pet être déclenché par un trigger ou une processus périodique
programmé sur le serveur. Cette procédure, si le flag est toujours False,
indique que l'application est hors ligne. Auquel cas, le serveur envoie une
notification transparente (si l'utilisateur ne s'est pas volontairement
délogué) et l'application redémarre toute seule.
Cette solution fonctionne à 100% pour l'avoir testé. Certes un peu lourd à
mettre en place et dépend aussi de votre application (si elle utilise un
système de login, etc...)
Enfin, une chose que j'ai aussi remarqué dernièrement, c'est que,
EFFECTIVEMENT, un thread persistent peut s'arrêter tout seul (l'application
se ferme alors complètement) sur une version android 7.0. Je n'ai pas
remarqué cela sur un android 5.1 par exemple.
J'ai pu observer le phénomène plusieurs fois sans comprendre en comprendre la
raison. (Il me semble toutefois que ce phénomène se produisait lorsque je
perdais la connexion réseau (passage de wi-fi au réseau suivi d'une perte de
réseau sans wi-fi aux alentours). Là l'application se plante complètement et
les fonctions de gestion de perte de connexion de WM sont sans effet !
Aussi, quel version d'android utilisez-vous et testez-vous votre application
sur différents devices avec différentes version d'android ?
Cordialement,
Eric.