J'ai une implémentation personnalisée ListCell
, montré dans l'image ci-dessous.Mauvaise performance ListView sur Gluon
Le côté gauche, ce qui représente la date, composé de 3 étiquettes, mis dans un VBox
et le « CounterContent » constitué par le compteur, avec un TextField
pour chaque chiffre, contenu dans un HBox
, et deux Hboxes
contenant des étiquettes pour kWh, kWh/jour et ainsi de suite. Et cela semble être trop, pour être performant.
J'ai essayé de charger les données dans une tâche d'arrière-plan, montrant un indicateur de progression, tandis que la tâche est en cours d'exécution, mais contrairement au bureau, sur android les performances sont très pauvres. Chaque fois que je passe à la liste, la collecte des ordures entre en jeu et bloque le thread ui, de sorte que l'indicateur de progression n'apparaît jamais.
Je l'ai essayé sur un Huawei Y-300, 4.1.1 Android, javafxports 8.60.6 (parce que javafxports 8.60.7 provoque un bug, qui rend inutilisable TextField
), et sur un Samsung S5 mini, Android 5 +. Sur le téléphone Samsung, la performance en général est bien meilleure, comme prévu, à cause de la compilation Ahead-of-Time je suppose, mais il y a toujours le problème de la récupération de place. De plus, après que la liste ait été remplie avec des cellules, le défilement n'est pas très lisse.
Est-ce que listcell est complexe ou quoi d'autre pourrait être la cause de la mauvaise performance?
MISE À JOUR:
Après avoir exécuté beaucoup de tests, il semble que le défilement saccadés n'est pas causée par des problèmes de performance. Au moins sur le S5 (javafxports 8.60.7).
I enlevé tout style CSS, et a remplacé le textfields par une seule étiquette (le nœud de compteur est déjà un contrôle personnalisé (oublié à ce sujet), qui définit les textfields dans 2 Regions
(non HBoxes
) et les noeuds de la ListCell
sont instanciées dans le constructeur). En outre, j'ai commuté le ListView
pour un CharmListView
et j'ai défini android.monocle.input.touchRadius = 1.
Aucune de ces étapes n'a abouti à une amélioration considérable. Juste pour clarifier: Contrairement au téléphone Huawei, le défilement sur le S5 et Android 5+ est utilisable, mais ce n'est pas très lisse, ce qui rend l'expérience utilisateur insatisfaisante. Sur le Huawei (javafxports 8.60.6), changer les champs de texte du compteur pour une étiquette, a donné une amélioration significative, mais pas au point où le défilement est devenu utilisable. Jusqu'à ce que je mette en place ce switch expérimental magique: gluon.experimental.performance = true, ce qui fait que la listview défile rapidement (après un peu de temps d'échauffement), mais pas vraiment lisse.
Merci pour cette information détaillée! J'ai mis à jour ma question avec les étapes que j'ai suivies, pour approfondir le problème. – jns
Je suis content que vous obteniez des améliorations. Avez-vous essayé l'application [JavaOne] 2015 de Gluon (https://play.google.com/store/apps/details?id=com.gluonhq.applications.javaone)? Il utilise un contrôle 'CharmListView' assez performant, mais sans le drapeau expérimental pour le moment. Vérifiez si le défilement se passe bien dans vos appareils. –
Je viens de l'essayer, en voyant les mêmes petits "sauts" lors du défilement, donc ma mise en œuvre de la liste ne provoque pas cet effet, comme je m'y attendais au début. Défilement dans un Webview, par ex. est super lisse. – jns