Rafraichissement d'une vue pendant un calcul long

Fermé
MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 - 5 mars 2022 à 19:10
MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 - 21 mars 2022 à 11:59
Bonjour,

J'ai un petit problème que je n'arrive pas à résoudre. J'ai beaucoup cherché sur Internet, sans trouver de réponse qui corresponde à ce que je cherche.

Le problème est le suivant:
Dans une activité, j'effectue un travail assez long.
J'ai donc placé une progressBar dans ma feuille.
En début de calcul, je mets sa visibilité à VISIBLE.
En fin de calcul, je remets sa visibilité à GONE.
Mais... Elle ne s'affiche jamais !

Je suppose que la vue n'est pas rafraichie pendant le calcul. J'ai souvent le même problème en C#, mais il existe la méthode Refresh() qui règle le problème. On peut aussi appeler "Application.DoEvents()" qui rend la main à Windows un bref instant pour rafraichir toutes les applications.

Je n'ai pas trouvé l'équivalent dans Android. Existe-t-il une méthode pour forcer le rafraichissement d'une vue pendant que le code tourne ?

Note : je ne peux pas faire mon calcul dans une tâche de fond pour des raisons de séquencement avec d'autres parties du code.

Merci de me donner des pistes.
A voir également:

2 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
7 mars 2022 à 09:57
Hello,

Dans une activité, j'effectue un travail assez long.
Les calculs longs sont à faire en dehors du thread principal. Si tu es en Kotlin, regardes du côté des Coroutine
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
7 mars 2022 à 10:07
Bonjour à tous les deux
J'ai souvent le même problème en C#, mais il existe la méthode Refresh() qui règle le problème. On peut aussi appeler "Application.DoEvents()" qui rend la main à Windows un bref instant pour rafraichir toutes les applications.

En fait en C#, les calculs doivent aussi se faire dans un thread différent du thread principal, les solutions que tu utilises sont déconseillées
0
MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022
21 mars 2022 à 11:59
Je suis d'accord, ce n'est pas la panacée.
Mais de toutes façons il faut bloquer l'application tant que le résultat des calculs n'est pas connu. Alors quel est l'intérêt d'avoir une tâche asynchrone, sinon la nécessité de générer une usine à gaz pour l'attente ? Et si j'utilise une tâche synchrone (ça existe ??) cela revient au même car il n'y aura pas de rafraichissement de la vue.
J'ai peu d'expérience en Android et la communication entre threads m'est encore inconnue. J'avoue que j'ai un peu de répulsion au vu de la complexité du développement sous Android comparé à d'autres langages comme le C# ou Visual Basic.

De toutes façons, Android Studio EST une usine à gaz : 25 Mo, 248 répertoires pour une appli comportant une unique vue, dont seulement 34 fichiers et moins de 200 Ko de sources et d'exécutable, ressources comprises...

0