Berita Produk

Mengoptimalkan baterai aplikasi menggunakan metrik penguncian layar saat aktif Android vitals

Waktu baca: 7 menit
Lihat profil Alice Yuan
Alice Yuan Developer Relations Engineer, Android

Masa pakai baterai adalah aspek penting dari pengalaman pengguna dan kunci tetap aktif berperan besar. Apakah Anda menggunakannya secara berlebihan? Dalam postingan blog ini, kita akan mempelajari apa itu kunci tetap aktif, beberapa praktik terbaik untuk menggunakannya, dan cara Anda dapat lebih memahami perilaku aplikasi Anda sendiri dengan metrik Konsol Play.

Penggunaan penguncian layar saat aktif parsial yang berlebihan di Android Vitals

Konsol Play kini memantau penggunaan baterai, dengan berfokus pada penggunaan penguncian layar saat aktif parsial yang berlebihan, sebagai indikator performa utama.

Fitur ini meningkatkan pentingnya efisiensi baterai bersama indikator stabilitas metrik inti yang ada: error yang dirasakan pengguna dan ANR yang berlebihan. Kami telah menentukan batas perilaku buruk untuk penguncian layar saat aktif berlebihan. Mulai 1 Maret 2026, jika judul Anda tidak memenuhi nilai minimum kualitas ini, kami dapat mengecualikan judul tersebut dari platform penemuan yang menonjol seperti rekomendasi. Dalam beberapa kasus, kami dapat menampilkan peringatan di listingan Google Play Store Anda untuk menunjukkan kepada pengguna bahwa aplikasi Anda dapat menyebabkan baterai cepat habis.

warning.png

Peringatan penguncian layar saat aktif berlebihan di ringkasan Android vitals.

Untuk perangkat seluler, metrik penting Android berlaku untuk fitur penguncian layar saat aktif yang tidak dikecualikan dan diperoleh saat layar nonaktif dan aplikasi berada di latar belakang atau menjalankan layanan latar depan. Android vitals menganggap penggunaan penguncian layar saat aktif parsial berlebihan jika:

  • Penguncian layar saat aktif dipertahankan selama minimal dua jam dalam periode 24 jam.
  • Error ini memengaruhi lebih dari 5% sesi aplikasi Anda, dengan rata-rata selama 28 hari.

Penguncian layar saat aktif yang dibuat oleh API yang dimulai pengguna audiolokasi, dan JobScheduler dikecualikan dari perhitungan penguncian layar saat aktif.

Memahami penguncian layar saat aktif

Penguncian layar saat aktif adalah mekanisme yang memungkinkan aplikasi menjaga CPU perangkat tetap berjalan meskipun pengguna tidak berinteraksi secara aktif dengan perangkat. 

Penguncian layar saat aktif parsial menjaga CPU tetap berjalan meskipun layar dinonaktifkan, sehingga mencegah CPU memasuki status "ditangguhkan" berdaya rendah. Penguncian layar saat aktif penuh membuat layar dan CPU tetap berjalan.

Ada 2 metode untuk mendapatkan kunci aktivasi parsial:

  • Aplikasi secara manual mendapatkan dan melepaskan penguncian layar saat aktif menggunakan API PowerManager untuk kasus penggunaan tertentu, yang sering kali diperoleh bersama dengan Layanan Latar Depan - API siklus proses platform yang ditujukan untuk operasi yang dapat dirasakan pengguna.
  • Atau, penguncian layar saat aktif diperoleh oleh API lain, dan diatribusikan ke aplikasi karena penggunaan API, selengkapnya di bagian praktik terbaik.

Meskipun penguncian layar saat aktif diperlukan untuk tugas seperti menyelesaikan download file besar yang dimulai pengguna, penggunaan yang berlebihan atau tidak tepat dapat menyebabkan baterai cepat habis yang signifikan. Kami telah melihat kasus ketika aplikasi menahan kunci tetap aktif selama berjam-jam atau gagal melepaskannya dengan benar, sehingga menyebabkan keluhan pengguna tentang pengurasan baterai yang signifikan meskipun mereka tidak berinteraksi dengan aplikasi.

Praktik Terbaik untuk Penggunaan Wake Lock

Sebelum kita membahas cara men-debug penggunaan penguncian layar saat aktif yang berlebihan, pastikan Anda mengikuti praktik terbaik penguncian layar saat aktif. 

Pertimbangkan empat pertanyaan penting ini.


1. Apakah Anda sudah mempertimbangkan opsi kunci tetap aktif alternatif?

Sebelum mempertimbangkan untuk mendapatkan kunci wake parsial manual, ikuti diagram alur pengambilan keputusan ini:

wakelock.png

Diagram alir untuk memutuskan kapan harus mendapatkan kunci aktif secara manual

  1. Apakah layar harus tetap aktif?
  2. Apakah aplikasi menjalankan layanan latar depan?
    • Tidak: Anda tidak perlu mendapatkan kunci aktif secara manual.
  3. Apakah perangkat yang ditangguhkan merusak pengalaman pengguna?
    • Tidak: Misalnya, memperbarui notifikasi setelah perangkat aktif tidak memerlukan penguncian layar saat aktif.
    • Ya: Jika penting untuk mencegah perangkat ditangguhkan, seperti komunikasi yang sedang berlangsung dengan perangkat eksternal, lanjutkan.
  4. Apakah sudah ada API yang membuat perangkat tetap aktif atas nama Anda?
  5. Jika Anda telah menjawab semua pertanyaan ini dan menentukan bahwa tidak ada alternatif lain, Anda harus melanjutkan dengan mendapatkan penguncian layar saat aktif secara manual.

2. Apakah Anda memberi nama penguncian layar saat aktif dengan benar?

Saat mendapatkan kunci aktif secara manual, penamaan yang tepat penting untuk proses debug:

  • Kosongkan Informasi Identitas Pribadi (PII) dalam nama seperti alamat email. Jika PII terdeteksi, penguncian layar saat aktif dicatat sebagai _UNKNOWN, sehingga menghambat proses debug.
  • Jangan memberi nama kunci tetap terjaga secara terprogram menggunakan nama class atau metode, karena nama ini dapat diobfuscate oleh alat seperti Proguard. Sebagai gantinya, gunakan string hard code.
  • Jangan menambahkan penghitung atau ID unik ke tag penguncian layar saat aktif. Tag yang sama harus digunakan setiap kali penguncian layar saat aktif berjalan untuk memungkinkan sistem menggabungkan penggunaan menurut nama, sehingga perilaku tidak normal lebih mudah dideteksi.

3. Apakah kunci wake yang diperoleh selalu dilepaskan?

Jika Anda mendapatkan penguncian layar saat aktif secara manual, pastikan pelepasan penguncian layar saat aktif selalu dieksekusi. Jika tidak melepaskan fitur penguncian layar saat aktif, baterai dapat cepat habis. 

Misalnya, jika pengecualian yang tidak tertangkap ditampilkan selama processingWork(), panggilan release() mungkin tidak akan pernah terjadi. Sebagai gantinya, Anda dapat menggunakan blok try-finally untuk menjamin pelepasan penguncian layar saat aktif, meskipun terjadi pengecualian.

Selain itu, Anda dapat menambahkan waktu tunggu ke penguncian layar saat aktif untuk memastikan kunci tersebut dilepaskan setelah jangka waktu tertentu, sehingga mencegahnya ditahan tanpa batas waktu.

fun processingWork() {
    wakeLock.apply {
        try {
            acquire(60 * 10 * 1000) // timeout after 10 minutes
            doTheWork()
        } finally {
            release()
        }
    }
}

4. Dapatkah Anda mengurangi frekuensi aktivasi?

Untuk permintaan data berkala, mengurangi frekuensi aplikasi Anda mengaktifkan perangkat adalah kunci untuk pengoptimalan baterai. Beberapa contoh pengurangan frekuensi aktivasi mencakup:

  • WorkManager: Tingkatkan interval periodik dalam PeriodicWorkRequest.
  • SensorManager: Manfaatkan batching dengan menentukan maxReportLatencyMs saat mendaftarkan pemroses.
  • Fused Location Provider:
    • Kurangi frekuensi pengambilan lokasi dengan menggunakan getLastLocation untuk lokasi yang di-cache terbaru.
    • Gunakan setPriority(PRIORITY_PASSIVE) untuk metode update yang tidak terlalu menguras baterai.
    • Selain itu, Anda dapat memanfaatkan mekanisme pengelompokan lokasi dengan menetapkan interval update minimum dengan setMinUpdateIntervalMillis.

Anda dapat melihat detail selengkapnya di dokumentasi praktik terbaik penguncian layar saat aktif.

Mendebug penggunaan penguncian layar saat aktif yang berlebihan

Meskipun dengan niat terbaik, penggunaan penguncian layar saat aktif yang berlebihan dapat terjadi. Jika aplikasi Anda ditandai di Konsol Play, berikut cara men-debugnya:

Identifikasi awal dengan Konsol Play

Dasbor penguncian layar saat aktif parsial berlebihan Android vitals memberikan perincian nama penguncian layar saat aktif yang tidak dikecualikan yang terkait dengan aplikasi Anda, yang menunjukkan sesi dan durasi yang terpengaruh. Pengingat untuk menggunakan dokumentasi guna membantu Anda mengidentifikasi apakah nama kunci tetap aktif ditahan oleh aplikasi atau ditahan oleh API lain.

breakdowns2.png

Dasbor penguncian layar saat aktif parsial berlebihan Android vitals di-scroll ke bawah ke bagian perincian untuk melihat tag penguncian layar saat aktif berlebihan.

Men-debug penguncian layar saat aktif yang berlebihan yang ditahan oleh pekerja/tugas

Anda dapat mengidentifikasi penguncian layar saat aktif yang dipegang worker dengan nama penguncian layar saat aktif ini:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

Daftar lengkap variasi nama kunci aktif yang dipegang pekerja tersedia di dokumentasi. Untuk men-debug kunci aktif ini, Anda dapat menggunakan Background Task Inspector untuk men-debug secara lokal, atau memanfaatkan getStopReason untuk men-debug masalah di lapangan. 

Android Studio Background Task Inspector

taskinspector.png


Screenshot Background Task Inspector, yang telah berhasil mengidentifikasi pekerja “WeatherSyncWorker” yang sering mencoba lagi dan gagal.

Untuk men-debug masalah WorkManager secara lokal, gunakan alat ini di emulator atau perangkat yang terhubung (level API 26+). Alat ini menampilkan daftar pekerja dan statusnya (selesai, sedang dieksekusi, dalam antrean), sehingga Anda dapat memeriksa detail dan memahami rantai pekerja. 

Misalnya, hal ini dapat mengungkapkan apakah pekerja sering gagal atau mencoba lagi karena mencapai batasan sistem. 

Lihat dokumentasi Background Task Inspector untuk mengetahui detail selengkapnya.

WorkManager getStopReason

Untuk men-debug pekerja di lapangan dengan kunci wake yang berlebihan, gunakan WorkInfo.getStopReason() di WorkManager 2.9.0+ atau untuk JobScheduler, JobParameters.getStopReason() yang tersedia di SDK 31+. 

API ini membantu mencatat alasan mengapa pekerja berhenti (misalnya, STOP_REASON_TIMEOUTSTOP_REASON_QUOTA), sehingga dapat menunjukkan masalah seperti seringnya terjadi waktu tunggu habis karena durasi runtime yang habis.

backgroundScope.launch {
    WorkManager.getInstance(context)
        .getWorkInfoByIdFlow(workRequest.id)
        .collect { workInfo ->
            logStopReason(workRequest.id, workInfo?.stopReason)
        }
}

Lihat Mengoptimalkan penggunaan baterai untuk API penjadwalan tugas guna mengetahui detail selengkapnya.

Men-debug jenis penguncian layar saat aktif berlebihan lainnya

Untuk skenario yang lebih rumit yang melibatkan penguncian layar saat aktif yang dipegang secara manual atau API yang menahan penguncian layar saat aktif, sebaiknya gunakan pengumpulan pelacakan sistem untuk proses debug.

Pengumpulan rekaman aktivitas sistem

Pelacakan sistem adalah alat proses debug yang canggih yang merekam aktivitas sistem secara mendetail selama jangka waktu tertentu, sehingga memberikan insight tentang status CPU, aktivitas thread, aktivitas jaringan, dan metrik terkait baterai seperti durasi tugas dan penggunaan penguncian layar saat aktif.

Anda dapat merekam aktivitas sistem menggunakan beberapa metode: 

powermgmt.png

Aktifkan kategori Atrace "power:PowerManagement" di UI Perfetto pada tab Android apps & svcs. 

Terlepas dari metode yang dipilih, Anda harus memastikan bahwa Anda mengumpulkan kategori Atrace "power:PowerManagement" untuk mengaktifkan penayangan rekaman aktivitas status perangkat. 

Pemeriksaan UI Perfetto dan analisis SQL

Rekaman aktivitas sistem dapat dibuka dan diperiksa di UI Perfetto. Saat membuka rekaman aktivitas, Anda akan melihat visualisasi berbagai proses pada linimasa. Jalur yang akan kita fokuskan dalam panduan ini adalah jalur yang ada di bagian “Status Perangkat”.

perfetto.png


Sematkan jalur di bagian “Status Perangkat” seperti jalur "Aplikasi teratas", "Status layar", "penguncian layar saat aktif yang berjalan lama", dan “Jobs” untuk mengidentifikasi secara visual slice penguncian layar saat aktif yang berjalan lama.

Setiap blok mencantumkan nama acara, kapan acara dimulai, dan kapan acara berakhir. Di Perfetto, ini disebut slice.

Untuk analisis beberapa rekaman aktivitas yang skalabel, Anda dapat menggunakan analisis SQL Perfetto. Kueri SQL dapat menemukan semua kunci aktif yang diurutkan berdasarkan durasi, sehingga membantu mengidentifikasi kontributor utama penggunaan berlebihan.

Berikut contoh kueri yang menjumlahkan semua tag penguncian layar saat aktif yang terjadi dalam pelacakan sistem, yang diurutkan berdasarkan total durasi:

SELECT slice.name as name, track.name as track_name,SUM(dur / 100000) as total_dur_ms
FROM slice
JOIN track ON slice.track_id = track.id
WHERE track.name = 'WakeLocks'GROUP BY slice.name, track.name
ORDER BY total_dur_ms DESC

Menggunakan ProfilingManager untuk pengumpulan rekaman aktivitas di lapangan

Untuk masalah yang sulit direproduksi, ProfilingManager (ditambahkan di SDK 35) adalah API terprogram yang memungkinkan developer mengumpulkan rekaman aktivitas sistem di lapangan dengan pemicu mulai dan akhir. API ini menawarkan kontrol yang lebih besar atas titik pemicu mulai dan akhir untuk pengumpulan profil serta menerapkan pembatasan frekuensi tingkat sistem untuk mencegah dampak performa perangkat. 

Lihat dokumentasi ProfilingManager untuk mengetahui langkah-langkah lebih lanjut tentang cara menerapkan pengumpulan rekaman aktivitas sistem di lapangan yang mencakup cara merekam aktivitas secara terprogrammenganalisis data pembuatan profil, dan menggunakan perintah debug lokal.

Rekaman aktivitas sistem yang dikumpulkan menggunakan ProfilingManager akan terlihat mirip dengan yang dikumpulkan secara manual, tetapi proses sistem dan proses aplikasi lainnya disamarkan dari rekaman aktivitas.

Kesimpulan

Metrik penguncian layar saat aktif parsial yang berlebihan di Android vitals hanyalah sebagian kecil dari komitmen berkelanjutan kami untuk mendukung developer dalam mengurangi pengurasan baterai dan meningkatkan kualitas aplikasi. 

Dengan memahami dan menerapkan penguncian layar saat aktif dengan benar, Anda dapat mengoptimalkan performa baterai aplikasi secara signifikan. Memanfaatkan API alternatif, mematuhi praktik terbaik penguncian layar saat aktif, dan menggunakan alat proses debug yang canggih seperti Background Task Inspector, rekaman aktivitas sistem, dan ProfilingManager adalah kunci untuk memastikan keberhasilan aplikasi Anda di Google Play.

Ditulis oleh:
Lanjutkan membaca