2011-09-29 8 views
1

Mon besoin d'applications est de contacter le webservice, obtenir le xml, l'analyser et l'afficher en utilisant un champ liste. J'appelle toutes ces classes xmlhandler, objectmodel, en l'affichant en utilisant un lisfield d'une classe qui étend l'écran principal qui rend mon application lente.comment augmenter la vitesse de mon application?

Quelqu'un peut-il me suggérer comment le rendre rapide?

Est-il un apt pour faire apparaître un écran de chargement et lancer un fil pour contacter le webservice, obtenir le XML, l'analyser et tuer le thread, puis peupler l'écran de liste et l'afficher?

des suggestions de toute nature est la bienvenue!

+0

C'est généralement la bonne façon de le faire, je ne sais pas si c'est comme ça dans Blackberry. –

+0

récupérez-vous l'intégralité de xml avant de commencer à l'analyser? cela va perdre du temps. Utilisez-vous Buffering sur le flux? Ça va aider. Plus que cela nécessite probablement de voir ce que vous avez fait. – MeBigFatGuy

+0

Vous pouvez placer un message de chargement ou une superposition d'animation dans la liste. –

Répondre

0

Découvrez quelle partie est lente avant de faire quoi que ce soit d'autre. Sinon, vous perdrez beaucoup de temps sur les mauvaises pièces. Pour faire ce genre de travail de minutage, je ferai souvent une journalisation interne dans un StringBuilder, ou peut-être juste dans une ArrayList contenant des données brutes non formatées. Une fois le test terminé, je formate et envoie les données. Cela minimise l'effet de la journalisation sur les minutages.

+0

merci pour votre réponse Ed staub, Il prend environ dix secondes pour ouvrir l'application .. Dans la plupart des similaires applications que le calendrier est commun, mais mon je suis confus au sujet de l'utilisation d'une application séparée pour le processus de récupération sans perturber la classe de l'écran principal.pouvez-vous poster un exemple pour cela? – ayachama

+0

@Newbie - Je ne voulais pas dire quelque chose comme ça. Si je vous comprends bien, la lenteur est en ouverture (initialisation) de l'application - droit? Je voulais inclure temporairement cette connexion ultra-léger dans l'application. Quand il est ouvert, il serait vider/afficher/écrire sur le disque le journal (selon ce qui est pratique). –

+0

c'est java-me, les vecteurs et les stringbuffers, qui doivent tous les deux être synchronisés pour que vous n'obtiendiez pas la même performance. Vous êtes mieux avec l'enregistreur de système de BB, ou le système dehors à la console. –

1

Testez la vitesse de chaque partie de votre programme. Ce que j'utilise habituellement est System.nanoTime() et trouve la différence dans le temps après chaque partie du programme.

+0

merci pour votre réponse simplyianm, je vais le faire – ayachama

+0

Voulez-vous me upvote? : D –

+2

System.nanoTime() n'est pas disponible dans J2ME. Utilisez System.currentTimeMillis() à la place. – Jonathan

0

Je ne peux que me pardonner si je me trompe - pour moi, il semble plus efficace de créer l'élément de champ de liste seulement quand ils sont vraiment regardés. Donc, je voudrais essayer de garder en mémoire seulement les chaînes analysées et créer uniquement les éléments d'interface utilisateur actuellement à afficher, jeter invisible. Pour le rendre plus lisse, vous pouvez vous étendre une ou plusieurs pages avant et après la page actuelle.

De cette façon, le nombre d'éléments affichés est toujours constant. Vous pouvez également ajouter une pagination à la couche de service pour limiter le nombre d'enregistrements transmis simultanément.

+0

merci pour votre réponse binary_runner, première page dans mon application est listfield, c'est une application de papier de nouvelles .. – ayachama

Questions connexes