java - Optimisation de l'application Android avant sa sortie




7 Answers

À un moment donné, vous allez arriver au point où l'utilisation des astuces connues atteindra ses limites. La meilleure chose à faire à ce stade est le profil de votre code et de voir quelles sont les zones de goulots d'étranglement en fonction de vos besoins spécifiques.

Étude de l'utilisation de la mémoire RAM à l'aide de MAT et Utilisation de Traceview : un article sur l'utilisation des outils pour profiler votre application.

Je suis dans une situation " spéciale " sur l' efficacité de mon programme. Maintenant, je suis à une phase où j'ai besoin d'améliorer les performances de l'application et de réduire la consommation de la batterie .

Avant la question:

Maintenant, je suis curieux de connaître les correctifs spéciaux d' autres développeurs qu'ils ont utilisés pour optimiser leurs propres applications. Des choses que les utilisateurs peuvent ne jamais reconnaître ou faire attention. Cependant, les corrections augmenteront la durée de vie de la batterie ou contribueront à améliorer la maintenance de l'application.

Alors, quel est votre truc (s) d'optimisation unique?

Je suis dans une situation particulière où je suis vraiment à la recherche de connaissances et je pense que ce sera une excellente occasion de partager les connaissances des développeurs sur une situation dans laquelle ils ont tous été.

S'il vous plaît, votez pour de bonnes réponses car cela encouragera les grands développeurs à partager leurs connaissances.




Si votre application utilise beaucoup de temps d'écran, utilisez du noir partout où vous le pouvez . Cela permettra de réduire la consommation de la batterie de la pire partie de l'appareil: l'écran, spécialement dans les téléphones AMOLED et les tablettes.




Lorsque vous utilisez SQLlite, accordez une attention particulière aux index. Ne présumez rien. J'ai eu d'énormes accélérations dans Zwitscher, quand j'ai mis des index sur les colonnes couramment utilisées pour la recherche.




Quelque chose à penser: NE PAS abuser de String, par exemple dans une énorme boucle. Cela va créer beaucoup d'objets String qui doivent être GCés. L'exemple "Mauvais codage" produira 2 objets chaîne à chaque boucle. L'exemple suivant ne produira qu'une seule chaîne finale et un seul constructeur de chaînes. Cela fait une énorme différence lors de l'optimisation des boucles énormes pour la vitesse. J'ai beaucoup utilisé le stringbuilder lors de la création de mon application Android pour Wordlist Pro, et il est devenu très rapide lorsque j'ai passé 270000 mots en un rien de temps.

    //Bad coding:
    String s = "";
    for(int i=0;i<999999;i++){
        s = "Number=";
        s = s + i;
        System.out.println(s);
    }

    //Better coding
    final String txt = "Number=";
    StringBuilder sb = new StringBuilder();
    for(int i=0;i < 999999;i++){
        sb.setLength(0);
        sb.append(txt);
        sb.append(i);
        System.out.println(sb);
    }

J'ai écrit un blogpost plus étendu à ce sujet. lisez ici




Optimisez vos images PNG avec des outils comme OptiPNG et PNGCrush pour PNGCrush quelques (kilo) octets de la taille de l'APK. Les conseils d'optimisation d'image pour les sites Web s'appliquent ici aussi: utilisez des formats d'image appropriés, jouez avec la compression JPG, envisagez d'utiliser des transparents binaires au lieu de transparents 8 bits, etc.

Si vous expédiez des fichiers PNG volumineux avec un canal alpha, vous pouvez échanger une taille de fichier APK pour la vitesse de démarrage et utiliser des fichiers JPG distincts pour les canaux RVB et A.

Si vous établissez des connexions HTTP, vérifiez que votre client HTTP utilise la compression de contenu. S'il met en cache les réponses HTTP reçues, vérifiez qu'il comprend et utilise correctement les en-têtes HTTP liés à la mise en cache.




Essayez d'utiliser DDMS pour suivre tous les threads en cours d'exécution dans le système. Par exemple, j'ai remarqué que j'utilisais webview pour afficher du contenu html, j'ai remarqué qu'il crée quelques threads pour la gestion des sessions de gestion des cookies, etc., ce qui a augmenté mon empreinte mémoire. Donc, sauf si vous avez un besoin sérieux d'affichage HTML complexe essayez d'utiliser la classe d'utilitaire normale "Html" dans Android pour afficher le contenu html. Cela peut être utile pour les personnes qui affichent Eula car eula typicall contient du texte html.

Si vous devez faire des opérations réseau, essayez d'utiliser AndroidHttpClient si vous êtes débutant, il a de bonnes capacités pour mettre en cache des sessions SSL et tout cela aide vraiment à améliorer vos performances. Définissez toujours vos délais d'attente de connexion de socket à environ 60 secondes ou à des valeurs finies car les délais d'attente infinis peuvent provoquer des interblocages, en particulier si vous supprimez votre connexion lors de l'établissement d'une liaison SSL.




Évitez d'utiliser XPath si vous pouvez analyser votre entrée XML en utilisant des routines de manipulation de chaînes pour obtenir le texte entre les balises. J'ai testé et peut confirmer une amélioration de 10 fois dans ce cas, sur un ensemble de données de 50000 articles, sur un HTC Desire.




Related