DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions spécifiques Mobile / Fonctions de gestion des tâches en arrière-plan
  • Présentation
  • Mise en place
  • Sous l'éditeur
  • Par programmation
  • Fonctionnement
  • Spécificités
  • Spécificités Android
  • Spécificités iOS
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Continuer à exécuter un traitement quand l'application est en arrière-plan est souvent utile sur mobile :
  • rappel de rendez-vous (afficher une notification),
  • calcul de chiffre d'affaires en temps réel,
  • récupération de données, ...
Le traitement doit simplement être présent dans une procédure. Il suffit d'indiquer à quelle fréquence cette procédure doit s'exécuter.
Entre les appels, la procédure ne consomme ni batterie ni CPU.
Mise en place

Sous l'éditeur

Pour automatiser une procédure :
  1. Affichez le code de la procédure.
  2. Affichez la fenêtre de description des automatismes de la procédure :
    • Cliquez sur l'icône Icône présente dans le bandeau de la procédure.
    • Sélectionnez l'option "Paramétrer les automatismes de la procédure" dans le menu contextuel de la procédure (volet "Explorateur de projet").
    • Sélectionnez l'option "Propriétés" du menu contextuel de la procédure dans le volet "Code".
  3. Dans la fenêtre qui s'affiche, sélectionnez le type d'automatisme : "Exécution périodique lorsque l'application est en arrière-plan".
  4. Spécifiez l'intervalle de temps (en minutes). Cet intervalle est l'intervalle de temps minimum entre deux exécutions de la tâche. Permet de garantir que la tâche ne sera pas exécutée durant cet intervalle de temps. En revanche, le système peut augmenter l'intervalle de temps en fonction de différents facteurs (charge d'utilisation importante, batterie faible, ...). L'intervalle de temps réel peut donc varier et être relativement long (plusieurs heures).
  5. Validez.

Par programmation

Pour ajouter une tâche en arrière-plan, utilisez la fonction TâcheEnArrièrePlanAjoute.
Remarque : Il est également possible de manipuler les tâches en arrière-plan via les fonctions suivantes :
TâcheEnArrièrePlanListeRenvoie la liste des tâches en arrière-plan de l’application.
TâcheEnArrièrePlanSupprimeSupprime une tâche en arrière-plan (précédemment ajoutée avec la fonction TâcheEnArrièrePlanAjoute).

Fonctionnement

Une fois ajoutée, la tâche en arrière-plan est automatiquement exécutée par le système à intervalle régulier.
La tâche est persistante, elle continuera à être exécutée périodiquement lorsque l'application est arrêtée, même après redémarrage de l'appareil.
Si la tâche est déclenchée alors que l'application n'est pas lancée, l'application sera lancée en arrière-plan (sans ouvrir la première fenêtre du projet), les traitements d'initialisation du projet et de déclaration des classes et collections de procédures seront exécutés avant d'appeler la procédure associée à la tâche.
La tâche sera exécutée uniquement lorsque l'application n'est pas lancée ou lorsque l'application est en arrière-plan. Si l'application se trouve au premier plan, son exécution sera reportée.
La tâche pouvant être exécutée dans un thread secondaire de l'application, le code de la procédure WLangage ne doit donc contenir aucun accès à l'UI de l'application ni aucune ouverture de boites de dialogue (via les fonctions Info, Erreur, etc.). Si la tâche doit interagir avec l'utilisateur, il est possible d'utiliser les notifications (fonctions Notifxxx).
Spécificités
Android

Spécificités Android

  • Si la tâche doit s'exécuter lorsque l'appareil est en veille, il est conseillé de demander à l'utilisateur de désactiver l'optimisation de la batterie pour cette application avec la fonction SysOptimBatterieArrièrePlan.
  • Débogage :
    Pour des facilités de débogage, il est possible de forcer le déclenchement de l'exécution d'une tâche en arrière-plan via ADB en utilisant la ligne de commande suivante :
    adb shell cmd jobscheduler run -f <application> <id>

    où :
    • <application> correspond au nom de package de l'application tel que défini dans l'assistant de génération (ex : com.masociete.monapplication).
    • <id> est l'identifiant de la tâche à exécuter (retourné par la fonction TâcheEnArrièrePlanAjoute).
  • Version nécessaire :
    L'ajout de tâches en arrière-plan est disponible uniquement sur les appareils disposant d'une version d'Android supérieure ou égale à la version 5.0 (api level 21).
    Si la fonction est utilisée avec une version antérieure du système, une erreur fatale sera déclenchée.
    Pour connaître la version du système Android sur laquelle s'exécute l'application, utilisez la fonction SysVersionAndroid.
  • Permissions requises :
    L'utilisation de cette fonction entraîne la modification des permissions requises par l'application.
    Permissions requises :
    RECEIVE_BOOT_COMPLETED : permet à une application de recevoir le ACTION_BOOT_COMPLETED qui est diffusé lorsque le système a terminé le démarrage.
  • Une fois exécutée, la tâche en arrière-plan continue à fonctionner tant que l'application n'est pas désinstallée.
  • Les tâches en arrière-plan ne sont pas appelées dans le simulateur.
iPhone/iPad

Spécificités iOS

  • Durée d'exécution :
    Les tâches en arrière-plan ont un total de 30 secondes pour s'exécuter. Si ce délai est dépassé, l'application est arrêtée directement (ce délai peut être réduit selon la disponibilité du système). L'exécution de la tâche doit donc être le plus rapide possible.
    En pratique, le système utilise le temps d'exécution de la tâche pour déterminer la fréquence réelle à laquelle elle doit être appelée.
  • Débogage :
    Il est possible de déboguer les tâches en arrière-plan via Xcode, en les déclenchant manuellement via le menu "Debug .. Simulate Background Fetch".
  • Pour que le système considère que l'application peut exécuter des tâches en arrière-plan, l'application doit réaliser des requêtes réseau (appels de Webservices, requêtes HTTP, accès à une base HFSQL, GPS, Email, ...). En effet, iOS vérifie que l'application exploite des données provenant du réseau.
  • L'application doit être capable d'exécuter des tâches en arrière-plan. Sur le périphérique, dans les "Paramètres de l'appareil .. Nom de l'application", l'option "Actualiser en arrière-plan" doit être cochée.
  • Lorsque l'application est terminée spécifiquement par un double appui sur le bouton Home et un swipe, la procédure en arrière-plan a moins de chance de s'exécuter.
  • La procédure ne sera plus appelée si l'appareil passe en mode "économie d'énergie".
  • Le délai entre deux exécutions de la procédure sera réduit si l'appareil est branché et connecté à un réseau WiFi.
  • La fréquence à laquelle l'application est activée par l'utilisateur va influer sur la fréquence d'appel de la procédure.
  • Plus l'exécution de la requête qui récupère les données est rapide, plus le temps entre deux exécutions est réduit. De manière générale, plus le temps d'exécution de la procédure est long, plus les appels seront espacés dans le temps. Le système a tendance à prioriser les procédures les moins consommatrices en CPU.
Version minimum requise
  • Version 23
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale