Heim > häufiges Problem > Hauptteil

Für die Enzyklopädie zur Android-Anwendungsoptimierung

little bottle
Freigeben: 2019-04-10 14:33:16
nach vorne
2147 Leute haben es durchsucht

Für technische Praktiker ist es oft nicht so, dass sie nicht wissen, wie es geht, sondern dass sie nicht wissen, was sie tun sollen. Heute habe ich einige Erfahrungen darüber gesammelt, wie? zur Optimierung von Android-Anwendungen. , insgesamt acht Dimensionen.

Für die Enzyklopädie zur Android-Anwendungsoptimierung

1. Layoutoptimierung

Warum?

Das Android-System sendet alle 16 ms ein VSYNC-Signal, um das Rendern der Benutzeroberfläche auszulösen, 60 fps Dies muss erreicht werden, was bedeutet, dass der Vorgang innerhalb von 16 ms abgeschlossen sein muss. Zusätzlich dazu, dass die obige Schnittstelle zu komplex ist und das Rendern nicht rechtzeitig abgeschlossen wird, besteht auch das Problem des Überzeichnens Das sogenannte Überzeichnen bedeutet, dass ein bestimmtes Pixel mehrmals im selben Frame gezeichnet wird. Wenn in einer mehrstufigen Benutzeroberfläche auch die unsichtbare Benutzeroberfläche gezeichnet wird, werden die Pixel in diesen überlappenden Bereichen mehrmals gezeichnet. Dadurch werden viele CPU- und GPU-Ressourcen verschwendet, wenn sich der Hintergrund überschneidet, z. B. wenn das Layout einen eigenen Hintergrund hat und die Unteransicht einen eigenen Hintergrund hat.

Wie man erkennt ?

Verwenden Sie HierarchyViewer, um herauszufinden, ob das Layout in der Aktivität zu komplex ist.

  • Aktivieren Sie die Option „GPU-Überzeichnung anzeigen“ im Entwickleroptionen, um zu beobachten, ob eine Überzeichnung vorliegt

  • Wählen Sie im Entwickler „Profil GPU Rendering“ in den Optionen die Option „Auf dem Bildschirm als Leiste“ aus

  • TraceView verwenden um die CPU-Ausführung zu beobachten

  • Wie optimiert man?

Reduzieren Sie die Layoutebene und verwenden Sie Include, Merge und ViewStub rational

  • um eine große Anzahl von Erstellungen benutzerdefinierter Komponenten in onDraw() zu vermeiden. Temporäre Objekte wie String, um ein häufiges Auslösen von GC zu vermeiden

  • Erwägen Sie in onDraw() von benutzerdefinierten Komponenten die Verwendung von canvas.clipRect(), um den Bereich zu zeichnen, der gezeichnet werden muss

  • Für Komponentencontainer wie ListView sollten Sie die Verwendung von „convertView“ und „ViewHolder“ in Betracht ziehen >

  • Erwägen Sie die Verwendung von Komponenten mit höherer Leistung. Es wird beispielsweise empfohlen, RecycleView anstelle von ListView zu verwenden, um einen automatischen Zeilenumbruch zu erreichen 🎜>

  • 2. Speicheroptimierung

Warum?Ressourcen sind immer begrenzt, und auch bei Android führt eine übermäßige/unangemessene Belegung von Speicherressourcen dazu, dass Anwendungen häufig abgebrochen werden und sich letztendlich auch auf die allgemeine Benutzererfahrung auswirkt. Wie erkennt man?

Verwenden Sie LeakCanary

Verwenden Sie MAT, um den Java-Heap zu analysieren

    Verwenden Sie Application Tracker im Android Device Monitor, um Informationen zur Speicherzuordnung zu verfolgen
  • Android Monitor in Android Studio, wählen Sie „Speicher“
  • Wie optimiert man?

  • Aktiv Speicher freigeben, Speicher entsprechend in onLowMemory() und onTrimMemory() freigeben

Vermeiden Sie Speicherverluste und Speicherüberläufe

    bei der Verwendung von Bitmap. Erwägen Sie zu diesem Zeitpunkt die Komprimierung, die Verwendung von Caching oder das Ändern des Farbmodus. Das Standardfarbformat von Android ist beispielsweise ARGB_8888 Die Anforderungen sind nicht hoch. Sie können RGB__565 verwenden, sodass der von jedem Pixel belegte Speicher 4 Byte bis 2 Byte betragen kann.
  • Reduzieren Sie die Verwendung von Frame-Animationen und implementieren Sie diese bei Bedarf SurfaceView
  • Verwenden Sie leichtere Datenstrukturen wie ArrayMap/SparseArray
  • Verwenden Sie relevante Komponenten wie Service und Webview entsprechend und beenden Sie sie aktiv ihre Lebenszyklen, wenn sie nicht benötigt werden
  • Verwenden Sie sinnvoll mehrere Prozesse, z. B. Musikplayer, die in Hauptprozesse und Wiedergabeprozesse unterteilt werden können

  • Berücksichtigen Sie begrenzte Warteschlangen, wenn Sie asynchrone Warteschlangen verwenden

  • Wenn Sie die Größe der HashMap genau kennen, legen Sie die Kapazität dafür während der Initialisierung fest

3. Energieoptimierung

Warum?

Energie ist eine sehr wertvolle Ressource für mobile Geräte. Als Entwickler gibt es sie Es ist notwendig, den Benutzer zu berücksichtigen und den Stromverbrauch zu senken. Umfragen zeigen, dass in der Regel nur etwa 30 % des Stroms von den Kernfunktionen des Programms verbraucht werden, wie z und Hintergrundbenachrichtigungen.

Wie erkennt man?

  • Sehen Sie sich die Stromverbrauchsstatistiken der APP in den Telefonoptionen an

  • Verwenden Sie das Battery Historian Tool, um den detaillierten Stromverbrauch anzuzeigen

Wie optimiert man?

  • Reduzieren Sie den Anzahl der Bildschirmaktivierungen Verwenden Sie WakeLock mit der Dauer korrekt.

  • Wenn Sie nicht unbedingt erforderliche Vorgänge in den Ladezustand verzögern, wie z. B. Protokollberichte, kann dies während des Nachtladens erfolgen. Dies kann in Verbindung mit JobScheduler verwendet werden

  • Wenn Sie Sensoren zur Datenerfassung verwenden, denken Sie daran, die Registrierung zu stornieren, sobald sie nicht mehr benötigt wird.

  • Netzwerkkommunikation reduzieren und Kommunikation zusammenführen.

  • Nutzen Sie die Positionierungsfunktion rational, reduzieren Sie die Häufigkeit von Standortaktualisierungen und verwenden Sie Positionierungsanforderungen unterschiedlicher Genauigkeit entsprechend der tatsächlichen Situation

4. Netzwerkoptimierung

Warum?

Heutzutage Fast alle Apps müssen mit dem Internet verbunden sein, um einerseits das Erlebnis zu verbessern und andererseits den Datenverkehr und den Stromverbrauch zu reduzieren für Benutzer oder Netzwerkdienstanbieter, und kein Entwickler sollte davon ausgehen, dass die Netzwerkressourcen unbegrenzt sind.

Wie wäre es mit Detect?

  • Verwenden Sie Network Traffic Tools in Android Studio, um Netzwerkanfragen anzuzeigen

  • Monitor in Android Studio verwenden

  • Verwenden Sie Paketerfassungstools wie Fidder oder Charles, um Netzwerkdatenpakete zu analysieren

Wie optimiert man?

  • Stellen Sie sicher, dass Sie bei Bedarf einen Cache verwenden, egal ob es sich um Bilder oder normale Daten handelt LruCache und DiskLruCache zum Aufbau Ihres eigenen Caching-Systems und zum Entwerfen von Caching-Strategien entsprechend tatsächlichen Szenarien

  • Vermeiden Sie übermäßige Netzwerksynchronisierung und führen Sie verwandte Netzwerkanforderungen zusammen

  • Bestimmen Sie die Anforderungsstrategie entsprechend dem tatsächlichen Szenario und vermeiden Sie die Verwendung fester Intervallfrequenzen für den Netzwerkbetrieb. Wenn Sie beispielsweise eine Verbindung zu WLAN herstellen und aufladen, kann die Häufigkeit hoch sein, nachdem die erste Netzwerkanforderung fehlgeschlagen ist für die nächste

  • verwendet werden, um die Datenübertragungsmenge zu reduzieren und die übertragenen Daten zu komprimieren. Bei der Übertragung müssen Sie das entsprechende Bildformat auswählen und entsprechende Bilder anfordern Spezifikationen entsprechend der Anzeigegröße. Sie können die Verwendung von ProtocolBuffers in Betracht ziehen, um die Größe der übertragenen Daten zu reduzieren Einerseits DNS-Auflösungszeit und andererseits Domain-Namen-Hijacking verhindern

5. Optimierung starten

Warum?

Startup-Optimierung scheint nicht so notwendig zu sein, aber aus psychologischer Sicht bringen schnellere Startgeschwindigkeiten den Benutzern tendenziell etwas Gutes Leistung, Effizienz und Zuverlässigkeit, es ist für Benutzer leicht, einen guten Eindruck davon zu bekommen, so dass Sie später Raum haben, Benutzer zu beeindrucken

Methodenverfolgung verwenden

Verwenden Sie Systrace, z. B. durch Hinzufügen von Trace.beginSection() und Trace.endSection()
    in onCreate
  • Verwenden Sie adb shell am start -W [packageName]/[packageName.MainActivity], um die Kaltstartzeit zu messen

Wie optimiert man?

  • Reduzieren Sie komplexe und zeitaufwändige Vorgänge in onCreate() der Aktivität

  • onCreate() und attachmentBaseContext() der Anwendung reduzieren ebenfalls komplexe und zeitaufwändige Vorgänge, aber für viele Apps ist dies A Hier werden zahlreiche Initialisierungsvorgänge für Komponenten und Dienste durchgeführt. Erwägen Sie nach Möglichkeit eine parallele Initialisierung.

  • Stellen Sie ein benutzerdefiniertes Startfenster bereit, indem Sie beispielsweise ein Bild als Startfenster anzeigen Thema.

  • Optimiertes Layout

6. Volumenoptimierung

Warum?

Für Benutzer ist die Volumenoptimierung ein wichtiger Teil der Ressourceneinsparung, egal ob es sich um Benutzerplatz, Netzwerk oder Zeit handelt . Wenn Sie derzeit SDK-Produkte herstellen, ist die Größenoptimierung ebenso wichtig.

Wie erkennt man?

  • Verwenden Sie Android Lint, um ungenutzte Ressourcen zu überprüfen

Wie optimiert man?

  • Reduzieren Sie unnötige abhängige Bibliotheken/Jar und geben Sie der Erfüllung von Anforderungen Vorrang. Wählen Sie eine kleine Größe.

  • Verwenden Sie das Proguard-Tool, um den Code zu verschlanken, zu optimieren und zu verschleiern

  • Reduzieren Sie die Anzahl der SO-Dateien und stellen Sie SO-Dateien bereit entsprechend der tatsächlichen Situation Datei

  • Verwenden Sie ShrinkResource in Gradle, um nutzlosen Code und Ressourcen aus dem APK-Installationspaket auszuschließen

  • Reduzieren Sie die Bildgröße Ressourcen, Bildkomprimierung in Betracht ziehen oder Vertor Drawable anstelle von PNG/JPEG verwenden

  • Bildressourcen gezielt mit entsprechenden Auflösungen bereitstellen

  • Vorhandene Bilder wiederverwenden meist durch Umwandlung vorhandener Bilder durch Code wiederverwendet

  • Verwenden Sie Plug-in-Technologie (verwenden Sie sie nicht, wenn das Projekt einfach ist)

7. Leistungsoptimierung

Wenn Sie 100 % Ihrer Fähigkeiten nutzen können, nutzen Sie nicht nur 50 % davon Wichtig für die Anwendung. Wenn zwei Autos zum gleichen Preis verkauft werden, werden sich die meisten Leute für das mit der besseren Leistung entscheiden.

Wie erkennt man das?

  • Verwenden Sie Lint, um eine statische Analyse durchzuführen, aktivieren Sie StrictMode in den Entwickleroptionen in Android Studio Analysis->Inspect Code

  • oder in der Code

  • Codeüberprüfung

Wie optimiert man?

  • Aufgabenparallelisierung, mögliche Aufgaben parallelisieren. Verlassen Sie sich bei Vorgängen mehr auf Thread-Pools, anstatt Threads direkt zu verwenden

  • Wenn Sie Daten serialisieren müssen, geben Sie Serialisierbar Vorrang

  • Wird von Android selbst bereitgestellt und nicht von Java.

    Wählen Sie geeignete Datenstrukturen und klären Sie die Komplexität von List/Set/Map/Stack-Operationen

  • Verwenden Sie Android, um effizientere Container bereitzustellen , wie zum Beispiel die Verwendung von ArrayMap anstelle von HashMap. Darüber hinaus gibt es SparseBoolMap, SparseIntMap, SparseLongMap

  • Die Verwendung statischer Konstanten anstelle von Enum-Typen kann den Speicherverbrauch um mindestens das Doppelte reduzieren

  • Verwenden Sie Objektpool-Technologie. Stellen Sie beispielsweise einen Objektpool wie String bereit

  • Verwenden Sie Caching-Technologie

  • String Der Spleißvorgang ist auf die Verwendung von StringBuilder beschränkt

  • Optimieren Sie verwandte Algorithmen und Logik, um unnötige Prozesse zu reduzieren

  • Übernehmen Sie JNI, um seine Coroutine-So-Dateien für Logik zu konvertieren mit großer Rechenlast, wie z. B. Bildverarbeitung

Geschäftsoptimierung

Zusätzlich zu den oben genannten allgemeineren Optimierungslösungen sollten Sie auch Aufgrund des Zeitdrucks ist die aktuelle Lösung für die Geschäftsimplementierung nicht optimal. Um beispielsweise das Hochladen mehrerer Bilder zu unterstützen, verwenden viele Menschen dies direkt. es ist nicht optimal

Da das Geschäft jedes Produkts unterschiedlich ist, ist es schwierig, einen allgemeinen Optimierungsplan zu haben. Hier sind zwei weitere Ziele, die es wert sind, in Betracht gezogen zu werden:

  • Wenn möglich, parallelisieren Sie das Seriengeschäft

  • Vereinfachen Sie Geschäftsprozesse, wenn möglich. Um einen Elefanten in einen Kühlschrank zu stellen, müssen Sie den Kühlschrank öffnen, den Elefanten hineinstellen und ihn schließlich schließen.

Der Hauptgrund dafür, dass die Geschäftsoptimierung an letzter Stelle steht, ist, dass die Geschäftsoptimierung hohe Risiken birgt und die umfassende Zusammenarbeit des Teams erfordert.

Es gibt vier Farbformate für Bilder in Android:

Für die Enzyklopädie zur Android-Anwendungsoptimierung

Der Standardwert ist <code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);"><span style="font-size:14px;">ARGB_8888</span>ARGB_8888
, wobei ARGB darstellt Was ist Transparenz, Rot, Grün, Blau? Jeder Wert wird mit 8 Bit aufgezeichnet, dh ein Pixel belegt 4 Byte, insgesamt 32 Bit. Und<span style="font-size:14px;">ARGB_4444</span><span style="font-size:14px;">ARGB_4444<br></span>Es ist ähnlich wie oben, aber jeder Wert wird mit 4 Bits aufgezeichnet, d. h. ein Pixel belegt 2 Byte, also insgesamt 16 Bits. <span style="font-size:14px;">RGB_565</span><br>RGB_565 <span style="font-size:14px;">ALPHA_8</span>Verwenden Sie dann 5 Bit, 6 Bit und 5 Bit, um jeden Wert aufzuzeichnen. Es gibt keine Transparenz. Jedes Pixel belegt 2 Byte, insgesamt 16 Bit "font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);">ALPHA_8
: Dieses Pixel Nur das Speichern von Transparenz belegt 1 Byte, also insgesamt 8 Bit. <code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);"><span style="font-size:14px;">ARGB_8888</span>In praktischen Anwendungen wird empfohlen,ARGB_8888<span style="font-size:14px;">RGB_565</span> und <span style="font-size:14px;">RGB_565</span>RGB_565, Wenn Sie keine Transparenz benötigen, dann wählen Sie

<p style="font-size:16px;font-family:'微软雅黑';min-height:1em;color:rgb(62,62,62);line-height:34.1333px;">RGB_565<a href="http://www.php.cn/course/list/56.html" target="_self"></a></p>, wodurch die Speichernutzung um die Hälfte reduziert werden kann. [Empfohlener Kurs: Android-Video-Tutorial]

Das obige ist der detaillierte Inhalt vonFür die Enzyklopädie zur Android-Anwendungsoptimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!