PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2025 → Empêcher la mise à l'arrière plan d'une fenêtre
Empêcher la mise à l'arrière plan d'une fenêtre
Started by erbl, May, 23 2024 12:09 PM - 5 replies
Registered member
240 messages
Posted on May, 23 2024 - 12:09 PM
Bonjour tout le monde

Je suis embêté sur WINDEV Mobile 2024 avec une fenêtre de mon application
Je lance un process dans un thread secondaire et j'ouvre une fenêtre avec le nom du thread en paramètre
Sur cette dernière , j'ai une image de loading et une procédure automatisée toutes les 1 seconde qui fait la chose suivante :

SI ThreadEtat(gsNomThread)<>threadEnCours ALORS
SI PAS EnModeArrièrePlan() ALORS
IMG_Loading..Visible = Faux
Info(gsOperation+" terminée","Début :"+DateHeureVersChaîne(dhHeureDebut),"Fin : "+DateHeureVersChaîne(DateHeureSys),"L'application va se fermer")
TitreSuivant("")
FONCTION maison de fermeture de l'application
SINON
SI gbNotifAffichee = Faux
notif est une Notification
notif.Titre = gsOperation+" terminée"
notif.Message = "L'opération "+gsOperation+" est terminée "
notif.ActiveApplication = Vrai
NotifAjoute(notif)
gbNotifAffichee = Vrai
FIN
FIN
FIN


Sur Android 9, ZERO soucis, ça tourne puis lorsque le thread se termine , j'ai ma fenêtre d'information et l'application se ferme
Sur les versions + récentes (Android 13, 14 mais possible que ça le fasse aussi sur 10 pas pu tester), l'application se met en arrière plan au bout d'un moment et du coup ça ne fonctionne pas comme attendu

Quelqu'un sait comment forcer la fenêtre au premier plan ? J'ai essayé plusieurs choses sans succès
Evénement mise en arrièe plan de NomApplication depuis la fenêtre MaFenêtre
SI ThreadEtat(gsNomThread)=threadEnCours ALORS
RepriseSaisie (MaFenêtre)
FIN


import android.app.Activity;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
public static void miseEnVeilleDesactive_JAVA()
{
Activity xa = getCurrentActivity();
Window xw = xa.getWindow();
xw.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}


--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Registered member
405 messages
Posted on May, 27 2024 - 8:52 AM
Bonjour,
Je n'ai pas tout compris à ta présentation générale, mais on est d'accord que le problème principal est qu'un affichage peut se produire alors que l'application est en arrière-plan ?
Pour te croiser régulièrement sur ce forum, je ne crois pas t'apprendre que, depuis Android 10 (ou 11), les affichages sont interdits lorsqu'on est en arrière-plan ...
Donc par définition, si tu ouvres une fenêtre à partir d'un thread secondaire ou même que tu exécutes un simple Info(), tu t'exposes à des problèmes.
Je suis conscient que je ne fais pas beaucoup avancer le problème, mais j'espère contribuer un peu à l'éclaircir ;) !
Registered member
240 messages
Posted on May, 27 2024 - 4:16 PM
Pucpood a écrit :
Bonjour,
Je n'ai pas tout compris à ta présentation générale, mais on est d'accord que le problème principal est qu'un affichage peut se produire alors que l'application est en arrière-plan ?
Pour te croiser régulièrement sur ce forum, je ne crois pas t'apprendre que, depuis Android 10 (ou 11), les affichages sont interdits lorsqu'on est en arrière-plan ...
Donc par définition, si tu ouvres une fenêtre à partir d'un thread secondaire ou même que tu exécutes un simple Info(), tu t'exposes à des problèmes.
Je suis conscient que je ne fais pas beaucoup avancer le problème, mais j'espère contribuer un peu à l'éclaircir !

Je me rends compte que j'ai pas été clair du tout au final
Le soucis c'est pas que je crée un un affichage (ça provoquerait un plantage) mais que du coup comme on est en arrière plan, l'utilisateur n'a plus du tout le visuel sur ce qui se passe (c'est une simple fenêtre avec un boucle qui tourne jusqu'à la fin du thread)
Du coup, en attendant de trouver mieux, lorsque l'utilisateur repasse au premier plan, je reprends où j'en étais lorsque l'application était en arrière plan

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Registered member
240 messages
Posted on March, 20 2025 - 4:03 PM
Pour information, j'avais également des soucis de performance que j'ai en parti corrigé ( c'est encore long mais c'est mieux) et ça a corrigé ce soucis de fermeture intempestive / passage à l'arrière plan non maîtrisé

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Registered member
405 messages
Posted on March, 21 2025 - 8:18 AM
Bonjour,
Je ne suis pas sûr d'avoir tout tout bien compris, mais j'ai l'impression c'est en lien avec des problèmes de performances que j'ai sur mon appli avec les versions Android les plus récentes.
Ton problème de départ : l'appli se mettait en arrière-plan spontanément alors qu'avant Android 9 ce n'était pas le cas.
Il semble que tu aies réglé ce problème indirectement en réglant des problèmes de performances.
Finalement comment as-tu fait ? Qu'as-tu corrigé ?
Registered member
240 messages
Posted on March, 21 2025 - 12:08 PM
Pucpood a écrit :
Bonjour,
Je ne suis pas sûr d'avoir tout tout bien compris, mais j'ai l'impression c'est en lien avec des problèmes de performances que j'ai sur mon appli avec les versions Android les plus récentes.
Ton problème de départ : l'appli se mettait en arrière-plan spontanément alors qu'avant Android 9 ce n'était pas le cas.
Il semble que tu aies réglé ce problème indirectement en réglant des problèmes de performances.
Finalement comment as-tu fait ? Qu'as-tu corrigé ?


Bonjour, je ne sais pas si ma réponse va pouvoir t'aider mais voici ce que j'ai fait

Avant : plusieurs appel Webservice soap, récupération de la réponse en xml puis transformation avec la méthode jsonVersVariant et parcours des membres du variant pour ajout dans base HFSQL classique
Après plusieurs appel Webservice soap, récupération de la réponse stockée dans une variable JSON et c'est cette variable que je parcours pour ajouter dans HFSQL
Je suis passé de presque 7 minutes avec passage intempestif multiple en arrière plan à 3 minutes pour le traitement global

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir