2011-03-22 7 views
0

J'ai une activité de travail avec 12 fileurs qui sont liés à une table de base de données unique de plus de 20 000 enregistrements. Chaque spinner est lié à une requête différente pour rendre les sélections dynamiques (en fonction des sélections précédentes). Le code fonctionne mais j'ai des performances terribles en raison du nombre de requêtes et de la taille de la table dans la base de données. La mise en page initiale prend plus de 20 secondes à charger. C'est parce que le premier spinner est mis à une sélection initiale au cours de la mise en page qui provoque le remplissage des 11 autres spinner. La performance est également affectée lors de l'utilisation des filateurs. Si je change la première sélection, cela prend environ 10 secondes pour que tous les autres fileurs se mettent à jour.Améliorer les performances de Spinner

Où devrais-je commencer à chercher de meilleures performances? La table de base de données? Les requêtes? Ou devrais-je éviter d'utiliser 12 spinners?

Répondre

0

Avec de nombreuses options que vous devriez peut-être envisager d'aller pour une liste de drill-down. Cela vous permettra de diviser les requêtes (une par activité) et permettra également à la liste actuelle de prendre tout l'écran. De cette façon, vous pouvez également fournir un moyen pour l'utilisateur de filtrer la liste actuelle qui est probablement un must si vous avez beaucoup d'options.

aussi:

  • Définir votre mise en page, puis commencer à charger vos données. Au moins, de cette façon, quelque chose apparaît pendant que l'utilisateur attend.
  • Est-ce que tous les travaux en cours d'exécution à long dans un AsyncTask/fil pour éviter de bloquer le thread d'interface utilisateur
  • Assurez-vous que vous avez des index primaires sur vos tables de base de données et requête en utilisant ces lorsque cela est possible
  • Ne pas charger toutes vos données à la fois , il suffit d'effectuer chaque requête au besoin
+0

Je voudrais marquer les deux réponses aussi correct que j'utilise des idées des deux. J'ai trouvé un moyen d'indexer certaines colonnes plus efficacement, ce qui a aidé et je ne vais pas activer tous les filateurs sur la mise en page. Merci! – Eric

1

Il semble que vous ne bloquez pas le fil de l'interface utilisateur, alors c'est bien. Vous pouvez créer des index pour accélérer la base de données, mais vous obtiendrez probablement le meilleur gain de performances en divisant les requêtes au lieu de les faire toutes en même temps. Ainsi, le premier Spinner sera le seul contrôle activé lors du lancement de l'activité. Faire une sélection déclencherait la requête pour le second Spinner et activerait celle-ci, et ainsi de suite.

Il y a beaucoup de choses utiles sur le rendement dans ce (1 heure) vidéo: http://www.google.com/events/io/2010/sessions/writing-zippy-android-apps.html

Questions connexes