Häufige Leistungsprobleme beheben

Damit Ihre App flüssig, stabil und akkusparend läuft, müssen Sie häufige Leistungsengpässe in Bezug auf Stabilität, UI-Rendering, Arbeit im Hintergrund, Startlatenz und Build-Optimierung erkennen und beheben.

In den Anleitungen in diesem Abschnitt wird das zugrunde liegende Verhalten der Android-Plattform für jede Art von Problem erläutert. Außerdem wird beschrieben, wie Sie Probleme mit Tools wie Android Studio Profiler, Perfetto, Logcat und ApplicationExitInfo diagnostizieren, profilieren und beheben.

Stabilität

  • ANRs: „App antwortet nicht“-Fehler (ANRs) diagnostizieren und beheben, die durch blockierte UI-Threads, E/A-Vorgänge im Hauptthread, Konflikte bei der Sperrung oder langsame Broadcast-Empfänger verursacht werden.
  • Abstürze:Stacktraces lesen, Logcat-Ausgabe prüfen und nicht abgefangene Ausnahmen und native Signale verhindern.

Rendering und Start

  • Langsames Rendering:Ermitteln und beheben Sie ausgelassene oder eingefrorene UI-Frames (>16ms und >700ms), die durch aufwendige Layouts, Bindungsvorgänge oder Hauptthread-Blockierungen verursacht werden.
  • Langsamer Sitzungsanteil (nur Spiele):Mit SurfaceFlinger kannst du das Frame-Pacing messen und die Frameraten von Spielen mit Android Frame Pacing (Swappy), Vulkan und dem Android Dynamic Performance Framework (ADPF) optimieren.
  • App-Startzeit:Sie können die Interna von Kalt-, Warm- und Heißstarts nachvollziehen, die Zeit bis zur ersten Anzeige (Time to Initial Display, TTID) und die Zeit bis zur vollständigen Anzeige (Time to Full Display, TTFD) messen und die Startvorgänge optimieren.

Speicherverwaltung

  • Low Memory Killers (LMKs):Hier erfahren Sie, wie der Android Low Memory Killer-Daemon (lmkd) Prozesse über oom_adj_score priorisiert und den Speicherbedarf in Android Studio, Unity und Unreal Engine profiliert.
  • Arbeitsspeichernutzung (anonyme RSS + Auslagerung):Messen und reduzieren Sie den anonymen Speicherbedarf Ihrer App (Resident Set Size (RSS) und Auslagerung) im Vordergrund, als Dienst und im Hintergrund.
  • Nutzung des Bitmap-Arbeitsspeichers:Untersuchen Sie überdimensionierte oder nicht freigegebene Bitmap-Zuweisungen und geben Sie Grafikpuffer frei, wenn UI-Komponenten in den Hintergrund verschoben werden.

Akku und Hintergrundarbeiten

  • Übermäßige Wakelocks:Vermeiden Sie es, Teil-Wakelocks über einen längeren Zeitraum zu halten, und migrieren Sie Hintergrundaufgaben zu WorkManager oder JobScheduler.
  • Hängende Teil-Wakelocks:Achten Sie darauf, dass jeder erworbene Teil-Wakelock auf allen Ausführungs- und Fehlerpfaden ordnungsgemäß freigegeben wird.
  • Zu viele Weckvorgänge:Reduzieren Sie die Anzahl der Weckvorgänge für genaue Alarme und führen Sie geplante Hintergrundarbeiten in Batches aus oder verschieben Sie sie.
  • Übermäßige WLAN-Scans im Hintergrund:Reduzieren Sie die Häufigkeit von WLAN-Scans im Hintergrund und verwenden Sie passive oder gebündelte Standort- und Konnektivitäts-APIs.
  • Übermäßige Netzwerknutzung im Hintergrund:Mobilfunknetzwerkübertragungen im Hintergrund mithilfe von WorkManager-Einschränkungen in Batches zusammenfassen und verzögern.
  • Hohe Akkunutzung:Diagnostizieren Sie einen hohen Akkuverbrauch auf Mobilgeräten und Wear OS-Geräten, indem Sie die CPU-, Sensor- und Funkaktivität analysieren.

Berechtigungen und Build-Optimierung

  • Abgelehnte Berechtigungen:Fordern Sie Laufzeitberechtigungen im Kontext an und erläutern Sie Nutzern die Berechtigungsbegründung klar und deutlich.
  • DEX-Codeoptimierung:Konfigurieren Sie die Regeln für R8-Shrinking, -Verschleierung und ‑Optimierung, um die DEX-Größe zu verringern und die Laufzeitleistung zu verbessern.