PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → Lenteurs Android généralisées et récentes
Lenteurs Android généralisées et récentes
Started by Pucpood, Sep., 14 2023 11:37 AM - 14 replies
Registered member
328 messages
Posted on September, 14 2023 - 11:37 AM
Bonjour !

J'ai recherché les sujets parlant de lenteur, mais ils visent généralement des fonctionnalités précises.

Dans mon cas, il s'agit d'une réelle lenteur avec apparition de la fenêtre système proposant l'attente ou l'arrêt. Elle est très irrégulière, mais suffisamment fréquente pour beaucoup pénaliser l'utilisateur.

Ca apparaît sans gros volumes de données, ça peut arriver aussi bien dès le démarrage de l'appli qu'après plusieurs heures d'utilisation.

J'ai l'impression que les appareils avant Android 11 ne sont pas concernés (j'utilise majoritairement un Zebra TC57 que j'ai passé récemment de A8 à A11) et n'avais jamais remarqué ces lenteurs avant. Le dernier client m'ayant signalé ces lenteurs a un TC57 A11. Ce dernier a une version compilée sous WM26, la mienne est sous WM28 .....

Une expérience à ce sujet ?
Posted on September, 14 2023 - 12:06 PM
Pucpood a écrit :
Bonjour !

J'ai recherché les sujets parlant de lenteur, mais ils visent généralement des fonctionnalités précises.

Dans mon cas, il s'agit d'une réelle lenteur avec apparition de la fenêtre système proposant l'attente ou l'arrêt. Elle est très irrégulière, mais suffisamment fréquente pour beaucoup pénaliser l'utilisateur.

Ca apparaît sans gros volumes de données, ça peut arriver aussi bien dès le démarrage de l'appli qu'après plusieurs heures d'utilisation.

J'ai l'impression que les appareils avant Android 11 ne sont pas concernés (j'utilise majoritairement un Zebra TC57 que j'ai passé récemment de A8 à A11) et n'avais jamais remarqué ces lenteurs avant. Le dernier client m'ayant signalé ces lenteurs a un TC57 A11. Ce dernier a une version compilée sous WM26, la mienne est sous WM28 .....

Une expérience à ce sujet ?


Mon expérience sous Android démontre une certaine lenteur concernant les applications développées en Windev Mobile par rapport aux applications développées avec d'autres outils.
Les fonctions BLE sont particulièrement lentes!
En utilisant directement des procédures Java pour remplacer une fonction du WLanguage démontrent bien souvent ces lenteurs.
On constate également des utilisations de l'api non conformes, par exemple on arrive a connecter des périphériques BLE sans que le Bluetooth du périphérique soit activé mais cela entraine une déconnexion ensuite.
Pour mettre en évidence ces lenteurs j'ai testé des fonctions du Wlanguage isolées et c'est flagrant.
Je pense que l'optimisation des procédures java cachée derrière les fonctions du Wlanguage n'est pas le fort des développeurs.
Sujet très intéressant si il n'est pas verrouillé par PCSoft!
Registered member
477 messages
Popularité : +20 (20 votes)
Posted on September, 14 2023 - 1:29 PM
une explication plutôt

il y a eu un changement au niveau de l'ANR avec Android 11 pour afficher ce message avec les traitements longs dans le thread principal. Avant Android 11, le message "L'application ne répond pas. Attendre ou Terminer" s'affichait uniquement lorsque l'application était bloquée. En revanche, avec Android 11, ce message s'affiche également lorsque l'application n'est pas bloquée, mais qu'elle ne répond pas aux demandes du système d'exploitation pendant une période prolongée.

Ce changement a été introduit pour améliorer l'expérience utilisateur. Avant Android 11, les utilisateurs pouvaient être confus lorsque le message "L'application ne répond pas" s'affichait alors que l'application semblait fonctionner correctement. Avec Android 11, le message est plus clair et indique à l'utilisateur que l'application est en train de traiter une tâche longue.

Ce changement peut avoir un impact sur les applications qui exécutent des tâches longues dans le thread principal. Ces applications peuvent être plus susceptibles d'afficher le message "Attendre ou Terminer" avec Android 11. Pour éviter ce problème, les développeurs doivent s'assurer que leurs applications utilisent des threads pour exécuter les tâches longues. Cela permettra à l'interface utilisateur de rester réactive, même si l'application exécute une tâche longue.
Registered member
797 messages
Popularité : +40 (42 votes)
Posted on September, 14 2023 - 2:30 PM
Une façon d'éviter ces messages est d'utiliser Multitâche(-1) dans les boucles et les longs processus pour donner un contrôle momentané à Android.

Rubén
Registered member
328 messages
Posted on September, 14 2023 - 2:39 PM
stef1811 a écrit :
une explication plutôt

...

Que voilà une réponse intéressante et constructive !
Et là je me prends en pleine tête la structure archaïque de l'appli dont j'ai hérité où tout est mélangé : code UI, code métier, traitement des données (242 fenêtres, 100 000 lignes de code dont 38000 de commentaires, 88 fichiers de données). Une horreur ! Et bien sûr tout dans le thread principal.
Eh bien voilà, cette appli est rattrapée par la réalité d'aujourd'hui et finalement par le bon sens il faut l'admettre.

La réponse de stef1811 me montre le chemin pour un avenir meilleur !

Peut-être que ce sujet mériterait de vivre un peu. Les fans de bonnes pratiques lâchez-vous !
Posted on September, 14 2023 - 2:40 PM
Rubén Sánchez Peña a écrit :
Une façon d'éviter ces messages est d'utiliser Multitâche(-1) dans les boucles et les longs processus pour donner un contrôle momentané à Android.

Rubén


Une autre façon (beaucoup plus propre à mon sens) est de programmer en asynchrone pour déporter tous les traitements longs dans des threads ou des tâches parallèle.

L'usage de Multitache est à proscrire absolument car il est souvent source de problème vicieux et donne une fausse impression de fluidité.
Registered member
328 messages
Posted on September, 14 2023 - 2:41 PM
Rubén Sánchez Peña a écrit :
Une façon d'éviter ces messages est d'utiliser Multitâche(-1) dans les boucles et les longs processus pour donner un contrôle momentané à Android.

Rubén

C'est vrai, mais ça ne remplacera jamais un programme bien conçu du départ ... quand on a le choix ;).
Posted on September, 14 2023 - 3:21 PM
Pucpood a écrit :
Rubén Sánchez Peña a écrit :
Une façon d'éviter ces messages est d'utiliser Multitâche(-1) dans les boucles et les longs processus pour donner un contrôle momentané à Android.

Rubén
C'est vrai, mais ça ne remplacera jamais un programme bien conçu du départ ... quand on a le choix ;).


Décidément on en revient toujours au même insérer des multitache partout... Et d'autres diront qu'il ne faut surtout pas les mettre.

Pour la conception de l'application, testez simplement des commandes lentes Wlanguage et les mêmes codées en Java vous verrez la différence.

Le problème principal se situe dans le code de l'outil, ceci est visible dans des mini projets avec juste quelques lignes de code.

Et que dire du débogueur direct sur le matériel en Android qui ne fonctionne pas ... Ce depuis des années maintenant!
Registered member
328 messages
Posted on September, 14 2023 - 4:08 PM
Cezame a écrit :
> ...

Les produits PCSoft ont les défauts de leurs qualités. Beaucoup d'utilisateurs de Windev n'ont pas la compétence Java et personne n'oblige ceux qui l'ont à utiliser Windev. Personnellement, Windev, même avec ses défauts, me rend de grands services. Ca ne m'empêche pas de soumettre les problème à PCSoft et aussi de râler de temps en temps, mais je considère que sur ce forum il faut privilégier les solutions et contournements des problèmes plutôt que se lamenter.
Quand on creuse, on s'aperçoit que beaucoup de problèmes ont une solution et qu'elle est rationnelle.
N'oublions pas aussi que les équipes de PCSoft doivent composer avec les enchaînements hyper rapides des versions de Android ...

... et aussi qu'ils ont besoin de beaucoup de temps pour gérer les photos d'un autre âge leurs communications...
Posted on September, 14 2023 - 4:49 PM
Pucpood a écrit :
Cezame a écrit :
...

Les produits PCSoft ont les défauts de leurs qualités. Beaucoup d'utilisateurs de Windev n'ont pas la compétence Java et personne n'oblige ceux qui l'ont à utiliser Windev. Personnellement, Windev, même avec ses défauts, me rend de grands services. Ca ne m'empêche pas de soumettre les problème à PCSoft et aussi de râler de temps en temps, mais je considère que sur ce forum il faut privilégier les solutions et contournements des problèmes plutôt que se lamenter.
Quand on creuse, on s'aperçoit que beaucoup de problèmes ont une solution et qu'elle est rationnelle.
N'oublions pas aussi que les équipes de PCSoft doivent composer avec les enchaînements hyper rapides des versions de Android ...

... et aussi qu'ils ont besoin de beaucoup de temps pour gérer les photos d'un autre âge leurs communications...


Très bien dit, j'adhère tout à fait.
Il est tellement plus facile de critiquer l'outil que de se questionner sur son propre code.
attention, je ne dis pas que tout est parfait, rapide et exempt de bugs, loin de là. Mais bien souvent les solutions se trouvent avec une autre façon de penser le problème.
Registered member
797 messages
Popularité : +40 (42 votes)
Posted on September, 17 2023 - 3:49 PM
La fonction "Multitâche" n'implique pas le "multitâche". Il cède simplement au système l'exécution des tâches en attente du système opérationnel ou d'autres programmes, ce qui empêche le système d'exploitation lui-même de vous avertir que votre application bloque trop le flux du système.

Rubén
Registered member
964 messages
Popularité : +16 (20 votes)
Posted on September, 18 2023 - 8:55 AM
Salut à tous.

Lors du premier démarrage de mon application (juste après son installation), une phase d'init charge une base locale HFSQL à partir de fichiers JSON encapsulés dans l'application.

Ca fait belle lurette que j'ai ajouté des Multitâche dans les boucles de chargement mais je reçois quand même le fameux message "L'application ne répond pas. Attendre ou Terminer" .

Pour info voici comment j'utilise multitache : est-ce la bonne méthode ?

SI PAS EnModeSimulateur() ALORS
<Compile SI TypeConfiguration=iOS>
Multitâche(-1)
<FIN>
<Compile SI TypeConfiguration=Android>
Multitâche(-100)
<FIN>

SINON
Multitâche(-99)
FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Message modified, September, 18 2023 - 9:12 AM
Posted on September, 18 2023 - 10:58 AM
Multitache rend la main au thread principal pendant la durée indiquée en paramètre. Pourquoi c'est une mauvaise idée de l'utiliser partout ? parceque cela peut provoquer des réentrances dans le code difficile à reproduire car aléatoire.
Je prends un exemple, dans le code de clic de bouton j'écris

BOUCLE
// Traitement à exécuter en boucle
[...]
Multitache(-1)
SI <test de sortie de boucle> ALORS
SORTIR
FIN
FIN
A chaque appel de Multitâche, la main est rendue au thread principal, donc si l'utilisateur interagit avec l'interface, le code des champs sur lesquels il a cliqué sera exécuté. En conséquence en plein milieu de votre boucle, il peut recliquer sur le même bouton (réentrance), fermer la fenêtre, passer sur un autre plan de la fenêtre, etc.

En programmation mobile il y a deux approches à privilégier pour tous les traitements longs/bloquants :
1- les déporter sur un backend, le tel se contentant d'envoyer/recevoir les données via un WS par exemple
2- programmer en asynchrone pour effectuer les calculs dans des thread ou des tâches parallèle et ne faire que la mise à jour de l'interface dans le thread principal. Le WLangage propose maintenant bcp d'outils pour simplifier cela : thread, tache parallèle, tâche en arrière plan, ExecuteThreadPrincipal, OuvreAsynchrone, etc.
Registered member
797 messages
Popularité : +40 (42 votes)
Posted on September, 18 2023 - 11:53 AM
Pourquoi utilisez-vous -1 sur iOS et -100 sur Android ? L'option recommandée pour céder le processus au système d'exploitation est -1 afin que votre application ne s'arrête pas.

Rubén
Registered member
328 messages
Posted on March, 28 2024 - 3:02 PM
Hello !
J'ai des éléments nouveaux. Est-ce que quelqu'un sait déchiffrer ça :



Comme on peut le voir ça boucle. Ce bouclage correspond à mes lenteurs.
Je crois que j'ai déjà soumis ce truc, mais je ne le retrouve pas sur le forum ........
A bientôt !