2011-07-13 3 views
2

Dans l'application que j'écris, j'ai un tas de statistiques que je veux afficher pour l'utilisateur. Les statistiques comprennent la dernière exécution d'un module spécifique, son exécution la plus proche, la dernière communication avec le serveur et la suivante.Android - Mise à jour efficace des compteurs dans les vues

En plus de cela, il y a des choses comme l'utilisation de la mémoire (utilisation de la mémoire simple, ne pas mesurer l'utilisation réelle).

L'utilisation de la mémoire, etc peut être mis à jour toutes les quelques secondes afin que pas un problème, mais les temps doivent être mis à jour chaque seconde au moins (pour les compteurs).
Étant donné que l'exécution toutes les secondes (ou même avec une période de 500 ms) entraîne des mises à jour irrégulières/secondes ignorées, je l'exécute maintenant à 300 ms.

J'ai remarqué cependant que mon application a commencé à ralentir au démarrage.
Après un certain profilage, il s'avère que ce sont les vues qui ont besoin de redimensionner qui prennent 70% du temps et le formateur de chaîne (pour le formatage du compteur) prend à peu près le reste. En dehors de la CPU utilisée, je vois beaucoup d'allocations, toutes les quelques secondes je vois un GC_CONCURRENT dans le logcat.

Des conseils pour résoudre ce problème efficacement?

+0

Question stupide: Utilisez-vous un fil séparé pour les calculs? –

+0

Non, je ne pense pas que ce serait important si je le faisais puisque la plupart du temps est passé à redimensionner des vues qui ne peuvent être effectuées qu'à partir du thread principal de l'interface utilisateur. –

+0

Vous ne devez effectuer aucun travail intensif sur le thread d'interface utilisateur. –

Répondre

0

J'ai résolu le problème en écrivant ma propre minuterie qui dort par incréments courts et ne met à jour la vue qu'une seconde complète passé. De cette façon, l'intervalle de tir sera [period, period+sleepTime), ce qui est acceptable lorsque vous choisissez un sleepTime court.

J'ai aussi changé de sorte qu'il est écrit "5 minutes auparavant" et j'ai deux minuteurs, un qui tire chaque minute et un qui tire chaque seconde.

0

Pouvez-vous le restructurer d'une manière telle que les foires nécessitent moins de redimensionnement? Par exemple: définissez la largeur de votre élément sur fill_screen ou sur une taille DP supérieure à la taille de la plus longue chaîne

+0

J'utilise des vues de table avec la largeur maximale sur cette colonne, je ne pense pas que ce serait important de toute façon. –

Questions connexes