2010-02-13 8 views
0

J'essaie de rendre ma liste d'activités plus efficace. J'ai une liste d'activités dans mon application, à chaque appel, il va à la base de données de recueillir des informations et de les montrer sur l'écran (comme la liste).Activité efficace Liste

donc basiclly chaque fois que vous terminez et appelez cette liste, il appelle onCreate .. encore et encore .. mon problème ici est avec la répartition que j'essaie de réduire! Par exemple, j'ai un Arraylist qui est alloué à chaque fois sur la méthode onCreate de ma liste d'activités, et beaucoup d'autres allocations que je fais surCreate.

Je trouve que cela ralentit énormément mon programme, mon programme est très instable, et j'essaie d'atteindre certaines performances ... aucune idée comment puis-je éviter cela surCréer chaque fois que je rappelle ma liste d'activités? mybe une autre technique pour réduire les réallocations? Merci, Idan.

+0

Pourquoi votre activité est démarrée plusieurs fois? – JRL

+0

c'est un écran avec la liste des articles, donc par son but, vous entrez et quittez cet écran plusieurs fois ... – rayman

+0

Mybe je devrais enregistrer les objets alloués ainsi je n'ai pas besoin de réallouer chaque fois que j'entre dans cet écran de ListActiviy? Il doit y avoir un moyen d'éviter ou de contourner certaines techniques pour le contourner, car il y a quelques objets qui pourraient être alloués une fois, plutôt que de les réaffecter à chaque fois que nous entrons à l'écran. Merci, ray. – rayman

Répondre

0

Si vous récupérez des données à partir de SQLite pour mettre dans un ListView, renvoyez les données en tant que Cursor et créez un CursorAdapter personnalisé pour fonctionner avec la liste. Ce sera plus efficace que de retourner un ArrayList d'objets (je suppose que c'est ce que vous faites).

+0

Mais je retourne les données avec le curseur! par le curseur, je récupère les données ligne par ligne de ma base de données, et en les plaçant dans un nouvel objet, chaque objet symbolise l'élément dans la liste de mes éléments. alors maintenant nous avons une autre liste de tableau d'objet. maintenant cette liste d'objets que je dois ajouter à ma liste d'adaptateurs (objet par objet). et avec cet adaptateur je construis ma fonction getView ... et c'est la liste que je vois sur l'écran. ill sum il: nous avons deux listes de tableaux ici .. les éléments ArrayList , et l'adaptateur ArrayLoad heh devinez que quelque chose ne va pas ici non? Merci. rayon. – rayman

+0

Ah, je vois ce que tu fais. Pouvez-vous convertir votre ArrayAdapter en CursorAdapter?De cette façon, vous n'auriez pas besoin de créer le tableau intermédiaire d'objets - le CursorAdapter pourrait lire directement à partir du curseur. –

+0

Ok, ça fonctionne bien, mais maintenant que vous comprenez ce que j'ai fait, mybe vous pouvez m'aider et me dire comment vais-je récupérer l'article dont la case a été cochée? coz quand j'ai utilisé ArrayAdapter, ive modélisé chaque ligne dans l'objet, et je pourrais juste passer par tous les objets et vérifier par un verbe local appelé 'vérifié' si vrai/faux, mais maintenant je ne modélise pas la base de données aux objets, comment Je passe en revue tous les éléments et je vérifie qui a été coché dans le bouton de la case à cocher. Merci, Ray. – rayman

2

Plutôt que de rendre l'ArrayList statique, vous devez conserver ces données dans un modèle. Vous pouvez utiliser un modèle Singleton pour le modèle. Vous pouvez également créer une classe qui étend Application, demander à votre application d'utiliser votre classe Application au lieu de la valeur par défaut et conserver les données de la liste à cet endroit. Dans votre fichier manifeste, la ligne suivante pointe vers votre classe d'application.

<application android:name=".MyApplicationClass" android:icon="@drawable/icon" android:label="@string/app_name"> 

Si vous allez à l'approche de l'application puis appelez getApplication vous de votre ListActivity et vérifier si les données ont été chargées à partir du DB.