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
  • Fonctionnement
  • Manipulation des tâches en arrière-plan
  • 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
Ajoute une nouvelle tâche en arrière-plan. Cette tâche sera exécutée périodiquement lorsque l'application est arrêtée ou lorsque l'application est en arrière-plan.
Exemple
// Demande le traitement des emails reçus une fois par jour
TâcheEnArrièrePlanAjoute(ProcTraitementEmailEnArrièrePlan, 24*60)
PROCÉDURE ProcTraitementEmailEnArrièrePlan()
// Traitement des emails en attente
n est un entier = TraiteEmailRecus()
SI n > 0 ALORS
	// Notifie l'utilisateur 
	notif est une Notification
	notif.Titre = "Traitement des emails terminés"
	notif.Message = ChaîneConstruit("%1 emails ont été traités", n)
	NotifAjoute(notif)
FIN
Syntaxe
<Résultat> = TâcheEnArrièrePlanAjoute(<Procédure WLangage> [, <Intervalle de temps> [, <Option>]])
<Résultat> : Entier
  • Identifiant de la tâche ajoutée,
  • 0 en cas d'erreur. Pour plus de détails sur l'erreur, utilisez la fonction ErreurInfo.
<Procédure WLangage> : Nom de procédure
Procédure WLangage (également nommée "callback") appelée lors de l'exécution de la tâche.
Cette procédure doit être une procédure globale du projet et ne doit attendre aucun paramètre. Dans le cas contraire, une erreur fatale sera déclenchée lors de l'appel de la fonction TâcheEnArrièrePlanAjoute.
<Intervalle de temps> : Entier optionnel
Intervalle de temps minimum (exprimé en minutes) 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, etc.). L'intervalle de temps réel peut donc varier et être relativement long (plusieurs heures).
Par défaut :
  • l'intervalle de temps entre deux exécutions de la tâche est de 1 heure.
  • l'intervalle de temps minimum autorisé est de 15 minutes.
Ce paramètre peut correspondre à :
  • un entier correspondant au nombre de minutes,
  • une variable de type Durée,
  • l'indication directe de la durée (par exemple '20min').
<Option> : Constante de type Entier optionnelle
iPhone/iPad Type de la tâche à exécuter :
tâcheEnArrièrePlanRafraîchissementLa tâche est une tâche de rafraîchissement en arrière-plan.
Attention : Pour qu'une tâche de rafraîchissement puisse être exécutée, les conditions suivantes doivent être réunies :
  • le traitement de la tâche peut durer quelques secondes,
  • le device n'a pas une batterie faible,
  • le mode d'économie d'énergie n'est pas actif sur le device,
  • dans les réglage du device, l'option "Actualiser en arrière-plan" est positionnée sur "Oui" et l'option est active pour l'application.
  • l'application a été lancée et utilisée récemment,
  • l'application est dans la liste des applications récente (app switcher),
  • le budget de CPU et de données réseau n'est pas dépassé,
  • le nombre d’exécution n'est pas dépassé.
tâcheEnArrièrePlanTraitementLa tâche correspond à un traitement en arrière-plan.
Attention : Pour qu'un traitement en arrière-plan puisse être exécuté, les conditions suivantes doivent être réunies :
  • le traitement de la tâche peut durer quelques minutes,
  • le device n'a pas une batterie faible,
  • le mode d'économie d'énergie n'est pas actif sur le device,
  • dans les réglage du device, l'option "Actualiser en arrière-plan" est positionnée sur "Oui" et l'option est active pour l'application.* l'application a été lancé dans la semaine précédente (ou 2 semaines précédentes),
  • l'application est dans la liste des applications récente (app switcher),
  • l'utilisateur n'utilise pas activement le device (exemple, la nuit en chargement).
Remarques

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).

Manipulation des tâches en arrière-plan

  • Il est possible demander depuis l'éditeur à ce qu'une procédure soit exécuté en tant que tâche en arrière-plan en activant l'option correspondante depuis la fenêtre de paramétrage des automatismes de la procédure. La tâche sera automatiquement ajoutée au prochain lancement de l'application : dans ce cas, il n'est pas nécessaire d'appeler la fonction TâcheEnArrièrePlanAjoute.
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.
Classification Métier / UI : Code métier
Composante : wd300android.jar
Version minimum requise
  • Version 23
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 19/03/2024

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