Maison > Problème commun > le corps du texte

Pour l'encyclopédie d'optimisation des applications Android

little bottle
Libérer: 2019-04-10 14:33:16
avant
2147 Les gens l'ont consulté

Pour les praticiens techniques, souvent, ce n'est pas qu'ils ne savent pas comment le faire, mais qu'ils ne savent pas quoi faire. Aujourd'hui, j'ai rassemblé quelques expériences sur comment ? pour optimiser les applications Android, un total de huit dimensions.

Pour lencyclopédie doptimisation des applications Android

1. 🎜>

Pourquoi ?

Le système Android envoie un signal VSYNC toutes les 16 ms pour déclencher le rendu de l'interface utilisateur pour obtenir une interface fluide, 60 ips. doit être réalisé, ce qui signifie que la plupart de l'opération doit être terminée dans les 16 ms

En plus du fait que l'interface ci-dessus est trop complexe et que le rendu n'est pas terminé à temps, il y a aussi le problème du surdessin. ce qu'on appelle le surdessin signifie qu'un certain pixel est dessiné plusieurs fois dans le même cadre, dans une interface utilisateur à plusieurs niveaux, si l'interface utilisateur invisible est également dessinée, alors les pixels de ces zones qui se chevauchent seront dessinés plusieurs fois, ce qui gaspille beaucoup de ressources CPU et GPU. Le surdessin se produit également lorsque l'arrière-plan se chevauche, par exemple, la mise en page a son propre arrière-plan et la sous-vue a son propre arrière-plan

Comment détecter. ?

    Utilisez HierarchyViewer pour trouver La disposition dans l'activité est-elle trop complexe
  • Activez l'option Afficher le surdessin du GPU dans le options du développeur pour observer s'il y a un surdessin
  • Dans le développeur, sélectionnez le rendu GPU du profil dans les options, sélectionnez À l'écran sous forme de barre
  • Utiliser TraceView pour observer l'exécution du processeur
Comment optimiser ?

    Réduire le niveau de mise en page et utiliser rationnellement inclure, fusionner, ViewStub
  • pour éviter un grand nombre de créations dans onDraw() de composants personnalisés Des objets temporaires, comme String, pour éviter de déclencher fréquemment GC
  • Dans onDraw() des composants personnalisés, pensez à utiliser canvas.clipRect() pour dessiner la zone qui doit être dessinée
  • Pour les conteneurs de composants comme ListView, pensez à utiliser convertView et ViewHolder
  • Envisagez d'utiliser des composants plus performants. Par exemple, il est recommandé d'utiliser RecycleView au lieu de ListView. Utilisez staticlayout pour obtenir un retour à la ligne automatique
  • <.>
2. Optimisation de la mémoire

Pourquoi ?

Les ressources sont toujours limitée, et la mémoire est également une ressource. Sous Android, une occupation excessive/inappropriée des ressources mémoire entraînera la suppression fréquente d'applications et, à terme, affectera également l'expérience utilisateur globale. Tout développeur doit garder à l'esprit l'économie de mémoire. Comment détecter ?

Utilisez LeakCanary

  • Utilisez MAT pour analyser le tas Java

  • Utilisez Application Tracker dans Android Device Monitor pour suivre les informations d'allocation de mémoire

  • Android Monitor dans Android Studio, sélectionnez Mémoire

  • Comment optimiser ?

Activer la mémoire de libération, libérer la mémoire de manière appropriée dans onLowMemory() et onTrimMemory()

  • Évitez les fuites de mémoire et les débordements de mémoire

  • lors de l'utilisation de Bitmap. À ce stade, pensez à le compresser, à utiliser la mise en cache ou à modifier le mode de couleur. Par exemple, le format de couleur par défaut d'Android est ARGB_8888. les exigences ne sont pas élevées, vous pouvez utiliser RGB__565, de sorte que la mémoire occupée par chaque pixel puisse être de 4 octets à 2 octets

  • Réduisez l'utilisation de l'animation par image, si nécessaire, implémentez-la via. SurfaceView

  • Utilisez des structures de données plus légères, telles que ArrayMap/SparseArray

  • Utilisez les composants pertinents de manière appropriée, tels que Service et Webview, et terminez activement leurs cycles de vie quand ils ne sont pas nécessaires

  • Utilisez raisonnablement plusieurs processus, tels que des lecteurs de musique, qui peuvent être divisés en processus principaux et processus de lecture

  • Considérez les files d'attente limitées lorsque vous utilisez des files d'attente asynchrones

  • Si vous pouvez clairement connaître la taille du HashMap, définissez sa capacité lors de l'initialisation

3. Optimisation de la puissance

Pourquoi ?

La puissance est une ressource très précieuse pour les appareils mobiles. En tant que développeur, il y en a. Il est nécessaire de prendre en compte l'utilisateur et de réduire la consommation d'énergie. Les enquêtes montrent qu'en général, seulement environ 30 % de l'énergie est consommée par les fonctions de base du programme, telles que le rendu de l'interface, et les 70 % restants sont consommés par les rapports de données et les mises à jour de localisation. et notifications en arrière-plan.

Comment détecter ?

  • Afficher les statistiques de consommation électrique de l'application dans les options du téléphone

  • Utilisez Battery Historian Tool pour afficher la consommation électrique détaillée

Comment optimiser ?

  • Réduire la nombre de réveils d'écran Avec la durée, utilisez WakeLock correctement.

  • Lorsque vous retardez des opérations non essentielles vers l'état de charge, telles que le rapport de journal, cela peut être effectué pendant la charge de nuit. Ceci peut être utilisé avec JobScheduler

  • Lorsque vous utilisez des capteurs pour collecter des données, n'oubliez pas d'annuler l'enregistrement une fois qu'il n'est plus nécessaire.

  • Réduisez la communication réseau et fusionnez la communication.

  • Utilisez la fonction de positionnement de manière rationnelle, réduisez la fréquence des mises à jour de localisation et utilisez des exigences de positionnement de précision différente en fonction de la situation réelle

4. Optimisation du réseau

Pourquoi ?

Aujourd'hui, presque toutes les applications doivent être connectées à Internet. L'optimisation du réseau peut améliorer l'expérience d'une part et réduire le trafic et la consommation d'énergie. utilisateurs ou fournisseurs de services réseau, et aucun développeur ne doit supposer que les ressources réseau sont illimitées

Que diriez-vous de Détecter ?

  • Utilisez les outils de trafic réseau dans. Android Studio pour afficher les requêtes réseau

  • Utilisez Monitor dans Android Studio

  • Utilisez des outils de capture de paquets tels que Fidder ou Charles pour analyser les paquets de données réseau

Comment optimiser ?

  • Assurez-vous de mettre en cache lorsque cela est nécessaire, qu'il s'agisse d'images ou de données ordinaires, utilisez LruCache et DiskLruCache pour créer votre propre système de mise en cache et concevoir des stratégies de mise en cache en fonction de scénarios réels

  • Évitez une synchronisation réseau excessive, fusionnez les requêtes réseau associées

  • Déterminez la stratégie de demande en fonction du scénario réel et évitez d'utiliser des fréquences d'intervalle fixes pour les opérations réseau. Par exemple, lors de la connexion au WiFi et de la recharge, la fréquence de demande peut être élevée. Après l'échec de la première demande réseau, l'intervalle de temps peut être doublé. utilisé pour le prochain

  • pour réduire la quantité de transmission de données et compresser les données transmises. Si la transmission est destinée aux images, vous devez choisir le format d'image approprié et demander des images avec les spécifications appropriées. en fonction de la taille d'affichage. Pour les données ordinaires, vous pouvez envisager d'utiliser des ProtocolBuffers pour réduire la taille des données transmises

  • Dans certains cas, une connexion directe IP peut être utilisée, ce qui peut réduire le DNS. temps de résolution d'une part, et empêcher le piratage de nom de domaine d'autre part

5. Démarrer l'optimisation

Pourquoi ?

L'optimisation du démarrage ne semble pas si nécessaire, mais d'un point de vue psychologique, des vitesses de démarrage plus rapides ont tendance à donner aux utilisateurs l'implication psychologique de bonnes performances , efficacité et fiabilité, il est facile pour les utilisateurs d'en avoir une bonne impression, vous laissant la possibilité d'impressionner les utilisateurs plus tard

Comment détecter ?

    <.>
  • Utilisez le traçage de méthode

  • Utilisez Systrace, par exemple en ajoutant trace.beginSection() et trace.endSection()

    dans onCreate

  • Utilisez adb shell am start -W [packageName]/[packageName.MainActivity] pour mesurer le temps de démarrage à froid

Comment optimiser ?

  • Réduisez les opérations complexes et fastidieuses dans onCreate()

  • OnCreate() et attachBaseContext() de l'application réduisent également les opérations complexes et fastidieuses, mais pour de nombreuses applications, cet A un grand nombre d'opérations d'initialisation pour les composants et les services seront effectuées ici. Si possible, envisagez l'initialisation parallèle

  • Fournissez une fenêtre de démarrage personnalisée, par exemple en affichant une image comme fenêtre de démarrage en définissant un thème.

  • Mise en page optimisée

6. Optimisation du volume

Pourquoi ?

Pour les utilisateurs, qu'il s'agisse de l'espace utilisateur, du réseau ou du temps, ce sont toutes des ressources. L'optimisation du volume est un élément important de l'économie de ressources pour les utilisateurs. . Si vous créez actuellement des produits SDK, l'optimisation de la taille est tout aussi importante

Comment détecter ?

  • Utilisez Android Lint pour vérifier les ressources inutilisées

Comment optimiser ?

  • Réduire les bibliothèques/Jar dépendantes inutiles, en donnant la priorité à la satisfaction des besoins Choisissez un petit taille.

  • Utilisez l'outil Proguard pour affiner, optimiser et obscurcir le code

  • Réduire le nombre de fichiers so et fournir des fichiers so selon la situation réelle Fichier

  • Utilisez ShrinkResource dans Gradle pour exclure le code et les ressources inutiles du package d'installation APK

  • Réduire la taille de l'image ressources, envisagez la compression d'image ou utilisez Vertor Drawable au lieu de png/jpeg

  • Fournissez sélectivement les ressources d'image avec les résolutions correspondantes

  • Réutilisez celles existantes. Les images sont principalement réutilisé en transformant des images existantes via du code

  • Utiliser la technologie des plug-ins (ne l'utilisez pas si le projet est simple)

7. Optimisation des performances

Si vous pouvez exercer 100 % de vos capacités, n'en exercez pas seulement 50 %. important pour l'application. Ce n'est pas une mauvaise chose. Si deux voitures sont vendues aux utilisateurs au même prix, je pense que la plupart des gens choisiront celle qui a les meilleures performances

Comment détecter ?

    Utilisez Lint pour effectuer une analyse statique, activez StrictMode dans les options de développement dans Analyse->Inspecter le code d'Android Studio
  • ou dans le code
  • Révision du code
Comment optimiser ?

    Parallélisation des tâches, paralléliser les tâches possibles Pour les opérations, comptez davantage sur les pools de threads au lieu d'utiliser les threads directement
  • Si vous avez besoin de sérialiser des données, donnez la priorité à Serialisable
  • fourni par Android lui-même plutôt que fourni par Java
  • Choisissez les structures de données appropriées et clarifiez la complexité des opérations List/Set/Map/Stack
  • Utilisez Android pour fournir des conteneurs plus efficaces. , comme l'utilisation d'ArrayMap au lieu de HashMap. De plus, il existe SparseBoolMap, SparseIntMap, SparseLongMap
  • L'utilisation de constantes statiques au lieu des types Enum peut réduire la consommation de mémoire d'au moins deux fois
  • <.>

    Utiliser la technologie de pool d'objets, par exemple, fournissez un pool d'objets tel que String
  • Utiliser la technologie de mise en cache
  • String l'opération d'épissage est limitée à l'utilisation de StringBuilder
  • Optimiser les algorithmes et la logique associés pour réduire les processus inutiles
  • Adopter JNI pour convertir sa coroutine afin que les fichiers soient logiques avec une charge de calcul importante, comme le traitement d'images
  • Optimisation commerciale

En plus des solutions d'optimisation plus générales mentionnées ci-dessus, vous devez également consacrer du temps à l'optimisation commerciale. Souvent, en raison du manque de temps, la solution actuelle pour la mise en œuvre commerciale n'est pas optimale. Par exemple, pour prendre en charge le téléchargement de plusieurs images, de nombreuses personnes utilisent directement des opérations en série. ce n'est pas optimal

Étant donné que l'activité de chaque produit est différente, il est difficile d'avoir un plan d'optimisation général. Voici deux autres objectifs à considérer :

  • Si possible, l'activité en série Paralléliser

  • Simplifiez les processus commerciaux si possible. La façon de mettre un éléphant dans un réfrigérateur est d'ouvrir le réfrigérateur, d'y mettre l'éléphant et enfin de fermer le réfrigérateur.

La raison fondamentale pour laquelle l'optimisation commerciale est placée en dernier lieu est que l'optimisation commerciale comporte des risques élevés et nécessite la coopération globale de l'équipe pour être réalisée.

Il existe quatre formats de couleurs pour les images dans Android, qui sont


Pour lencyclopédie doptimisation des applications Android

La valeur par défaut est ARGB_8888<span style="font-size:14px;">ARGB_8888</span>, où ARGB représente Qu'est-ce que la transparence, rouge, vert, bleu, chaque valeur est enregistrée sur 8 bits, c'est-à-dire qu'un pixel occupera 4 octets, soit un total de 32 bits.
Et
<code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);"><span style="font-size:14px;">ARGB_4444</span>ARGB_4444
C'est similaire à ce qui précède, mais chaque valeur est enregistrée avec 4 bits, c'est-à-dire qu'un pixel occupera 2 octets, soit un total de 16 bits. <span style="font-size:14px;">RGB_565</span><span style="font-size:14px;">RGB_565<br> </span> Utilisez ensuite 5 bits, 6 bits et 5 bits pour enregistrer chaque valeur. Il n'y a pas de transparence. Chaque pixel occupera 2 octets, un total de 16 bits <span style="font-size:14px;">ALPHA_8</span><br>ALPHA_8<span style="font-size:14px;">ARGB_8888</span> : Ce pixel seule la transparence de sauvegarde occupera 1 octet, soit un total de 8 bits. Dans les applications pratiques, il est recommandé d'utiliser<span style="font-size:14px;">RGB_565</span>ARGB_8888 et <span style="font-size:14px;">RGB_565</span><span style="font-size:14px;">RGB_565</span>

, Si vous n'avez pas besoin de transparence, alors choisissez

<a href="http://www.php.cn/course/list/56.html" target="_self">RGB_565</a>

, ce qui peut réduire de moitié l'utilisation de la mémoire. [Cours recommandé : Tutoriel vidéo Android]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!