articles d'optimisation de code Android

Tout d'abord, la sélection structure de données

1, Array, ArrayList, Liste, LinkedList, HashMap, HashSet, Hashtable 区别

tableau

Un ensemble (Array): est une structure de données de table linéaire. Il utilise un ensemble d'espace mémoire contiguë pour stocker un ensemble de données ayant le même type, et ne prend pas en charge l' expansion dynamique.

Table linéaire
forme linéaire est disposé dans une ligne en tant que structure de données, chacun des linéaire directions avant et arrière plus deux tableaux, les tableaux, les listes chaînées la file d' attente Dian Dian pile sont tous structure de données de table linéaire.

Tableau Nonlinear
données de table non linéaire est irrégulière, avec une table linéaire est à l'opposé, par exemple tas binaire Dian Dian analogue, dans la table non linéaire, et non pas une relation simple entre les données avant et après.

Avantages: en mémoire sont stockées jointive, la vitesse d'indexation est très rapide, les affectations simples et modifier des éléments.

Inconvénients: Lorsqu'une déclaration doit indiquer la longueur des éléments de ce type de stockage, la longueur, le tableau est trop long, se traduira par une perte de mémoire, et un tableau de longueur est trop courte, il peut provoquer le débordement de données erronées. insert Array, des éléments de suppression inefficaces.

Liste des tableaux

avantages:

  • Lors de la déclaration ArrayList n'a pas besoin de déclarer son type, la longueur, parce que la capacité peut se développer de façon dynamique.
  • Lorsque l'objet ArrayList est stocké, abandonné le type d'information, tous les objets comme boucliers objet, pas de compilation vérification de type, mais se plaindra de l'exécution.

inconvénients:

  • l'expansion du réseau ArrayList est l'impact sur l'efficacité d'un facteur important.
  • Chaque fois que Ajouter méthode d'exécution, AddRange, Insérer, InsertRange tels que l'ajout d'éléments, la capacité vérifie si le tableau interne ne suffit pas, si elle est, ce sera le double de la capacité actuelle de reconstruire un tableau, les éléments anciens dans la nouvelle copie tableau, puis défausse l'ancien tableau, l'expansion des opérations à ce moment critique, il devrait être relativement influent sur l'efficacité.
  • Ne tapez pas sûr.
  • boxe processus et unboxing est la perte de performance.

liste collection

  • Est-ce le type de sécurité, une description du type de données stockées.
  • Liste ne peut pas être construit, mais vous pouvez créer comme référence pour la liste à ce qui précède, et ListArray peut être construit.
  • Énumérer les avantages des médicaments génériques:
      en permettant de spécifier un type particulier ou le mode de fonctionnement d'une classe générique, fonction générique du type de tâches de sécurité de votre au compilateur. Pas besoin de code d'écriture pour détecter le type de données est correct, car il forcera l'utilisation du type de données correctes au moment de la compilation. La réduction de la possibilité de faux besoins et moulages d' exécution. Génériques offrent une sécurité de type , mais n'a pas augmenté les frais généraux de multiples implémentations.

LinkedList

  • LinkedList aussi Liste interface classe d'implémentation.
  • LinkedList est une liste doublement chaînée. Il dispose lié structure de données de la liste est la distribution spatiale de chaque élément ne doit pas être éléments continus, insérer et supprimer très rapide, mais la vitesse est des éléments d'accès lents.
  • Ajout et a de meilleures performances que les éléments remove ArrayList. Mais dans la requête et modifier les termes des éléments plus faibles que l'ArrayList.

Hashtable 与 HashMap, HashSet

  • Synchronisation: Hashtable est sûr de fil, qui est synchronisé, et un programme de ligne HashMap est dangereux, non synchronisé.
  • HashMap autorisé à annuler une clé, une pluralité de la valeur nulle.
  • Hashtable de clé et la valeur ne sont pas autorisés à être nulle.
  • HashSet met en œuvre l'ensemble de l' interface, le fond est faite pour obtenir une table de hachage ( en fait le HashMap), Set éléments à l' intérieur trouble pas répéter, une valeur null peut être autorisée.

Deux, Handler utilisation correcte

private static class  InnerHandler extends Handler{
        private final WeakReference<MainActivity> mActivity;

        private InnerHandler(MainActivity activity) {
            mActivity = new WeakReference<MainActivity>(activity);
        }

        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            MainActivity activity = mActivity.get();
            if(activity!=null){
                
            }
        }
    }

Troisièmement, l'utilisation correcte du contexte 

L'utilisation correcte du singleton 

public class SingleInstance {
    private Context mContext;
    private static SingleInstance sInstance;

    private SingleInstance(Context context) {
        mContext = context;
    }

    public static SingleInstance getInstance(Context context) {
        if (sInstance == null) {
            sInstance = new SingleInstance(context.getApplicationContext());
        }
        return sInstance;
    }
}

 Comparaison des différents contextes

Quatre, quatre maître référence Java

Une référence forte: java dans le plus largement utilisé l'un, la valeur par défaut est l'objet d'un type de référence. Si un objet a des références fortes, la période de récupération des déchets est de ne pas fonctionner, et quand il y a un espace de mémoire insuffisante, machine virtuelle Java lancera une OutOfMemoryError, l'application prendra fin.

Citation douce: S'il n'y a qu'une seule référence d'objet, doux puis lorsque l'espace de mémoire suffisant, il ne refusera pas la période de récupération pour les opérations de récupération, que si la mémoire est, cet objet sera récupéré.

Faible Référence: Lorsque le garbage collector balaye qu'une faible référence à un objet, que ce soit ou non l'espace mémoire actuel est insuffisant, sera sur les objets de référence faibles pour le recyclage.

citation Faux: les références fantômes n'aura aucun impact sur le cycle de vie d'un objet pointu, il suivra la façon originale est détruite, mais une marque de référence fantôme sur le rôle de la nature, principalement utilisé pour les objets suivre les activités de déchets recyclés référence virtuelle doit être utilisé en conjonction avec une file d'attente de référence, lorsque l'objet est une ânerie, si la référence virtuelle existe, la machine virtuelle Java entière sera ajouté à la référence fantôme de référence associée à la file d'attente.

Cinquièmement, les pratiques de codage

  1. XML réduire les variables membres inutiles;
  2. Essayez de ne pas utiliser l'énumération, moins iterator;
  3. Pour curseur, récepteur, capteur, et d'autres objets fichier, attention à leur création, la reprise et l'enregistrement, l'anti-inscription, éviter l'utilisation extensive des annotations, de réflexion;
  4. Rappelez-vous l'annulation de l'événement de diffusion, les objets d'interface de sortie WebView, rappelez-vous la destruction, vide.
  5. Sans référence à l'objet, le flan est nul, facile à détecter la mémoire de spam.
  6. types de données multi-base, moins les types de données de référence. Tels que entier partageront plus grand que int.
  7. Moins variables statiques modifiées, les variables globales modifiées qui ne peuvent pas être récupérés GC.
  8. Utilisez StringBuffer chaîne de remplacement de concaténation de chaîne (avec append couture), String chacun plus « + », sera plus d'un objet est créé.
  9. bitmap, curseur curseur, IO ou flux de fichiers, etc. ne sont pas, souvenez-vous de recycler. En particulier, la mémoire d'image pour le chargement et grande, la qualité d'image peut être compressée ou taille physique.
  10. Évitez de créer des objets dans la méthode OnDraw souvent tirés dans.
  11. Prévenir à long terme singleton classe contient aucune référence à l'objet, essayez ApplicationContext entrant.
  12. classes internes non statiques provoquer des fuites de mémoire, comme l'activité créé Handler, vous pouvez essayer d'obtenir une faible référence à une référence d'objet externe.
  13. Diffusion fermeture de session, la page n'a pas été effectuée la sortie d'activité le fil d'annulation ou de minuterie effectuer également des tâches régulières et déconnectent ainsi de suite.
  14. heure de fin d'activité, la nécessité d'annuler l'animation de la propriété.
  15. destruction de sortie webview.

 

« Android avancée »

https://www.jianshu.com/p/cd7552bdaf6e

https://blog.csdn.net/zhuolou1208/article/details/78095293

https://blog.csdn.net/qq_30257149/article/details/99588189

Publié 49 articles originaux · louange gagné 2 · Vues 8584

Je suppose que tu aimes

Origine blog.csdn.net/yangjunjin/article/details/105158956
conseillé
Classement