Mengatasi masalah performa umum

Menyediakan pengalaman aplikasi yang lancar, stabil, dan hemat baterai memerlukan identifikasi dan penyelesaian hambatan performa umum di seluruh stabilitas, rendering UI, penggunaan memori, pekerjaan latar belakang, latensi startup, dan pengoptimalan build.

Panduan di bagian ini menjelaskan perilaku platform Android yang mendasar untuk setiap jenis masalah dan menjelaskan cara mendiagnosis, membuat profil, dan memperbaikinya menggunakan alat seperti Android Studio Profiler, Perfetto, Logcat, dan ApplicationExitInfo.

Stabilitas

  • ANR: Mendiagnosis dan memperbaiki error Aplikasi Tidak Merespons (ANR) yang disebabkan oleh pemblokiran thread UI, I/O thread utama, perebutan kunci, atau penerima siaran yang lambat.
  • Error: Baca pelacakan tumpukan, periksa output Logcat, dan cegah pengecualian yang tidak tertangani dan sinyal native.

Rendering dan startup

  • Rendering lambat: Identifikasi dan perbaiki frame UI yang menurun atau terhenti (>16ms dan >700ms) yang disebabkan oleh tata letak yang mahal, proses pengikatan, atau jeda thread utama.
  • Sesi lambat (khusus game): Ukur kecepatan frame dengan SurfaceFlinger dan optimalkan kecepatan frame game menggunakan Android Frame Pacing (Swappy), Vulkan, dan Android Dynamic Performance Framework (ADPF).
  • Waktu startup aplikasi: Pahami konten peluncuran cold, warm, dan hot, ukur Waktu hingga Tampilan Awal (TTID) dan Waktu hingga Tampilan Penuh (TTFD), serta optimalkan tugas startup.

Pengelolaan memori

  • Penghentian proses karena memori rendah (LMK): Pahami cara daemon penghentian proses karena memori rendah (lmkd) Android memprioritaskan proses melalui oom_adj_score dan profil footprint memori di Android Studio, Unity, dan Unreal Engine.
  • Penggunaan memori (RSS Anonim + swap): Ukur dan kurangi jejak memori swap dan Resident Set Size (RSS) anonim aplikasi Anda di seluruh status latar depan, layanan, dan latar belakang.
  • Penggunaan memori bitmap: Mendiagnosis alokasi bitmap yang terlalu besar atau bocor dan melepaskan buffer grafis saat komponen UI berpindah ke latar belakang.

Baterai dan pekerjaan latar belakang

Izin dan pengoptimalan build

  • Penolakan izin: Minta izin runtime dalam konteks dan jelaskan alasan izin dengan jelas kepada pengguna.
  • Pengoptimalan kode DEX: Konfigurasi aturan penyingkatan, obfuscation, dan pengoptimalan R8 untuk mengurangi ukuran DEX dan meningkatkan performa runtime.