Mengoptimalkan baterai aplikasi menggunakan metrik penguncian layar saat aktif Android vitals
Waktu baca: 7 menit
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.
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 audio, lokasi, 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:
Diagram alir untuk memutuskan kapan harus mendapatkan kunci aktif secara manual
- Apakah layar harus tetap aktif?
- Ya: Lihat dokumentasi Layar Tetap Aktif
- Apakah aplikasi menjalankan layanan latar depan?
- Tidak: Anda tidak perlu mendapatkan kunci aktif secara manual.
- 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.
- Apakah sudah ada API yang membuat perangkat tetap aktif atas nama Anda?
- Anda dapat memanfaatkan dokumentasi Mengidentifikasi kunci wake yang dibuat oleh API lain untuk mengidentifikasi skenario saat kunci wake dibuat oleh API lain seperti LocationManager.
- Jika tidak ada API, lanjutkan ke pertanyaan terakhir.
- 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.
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
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_TIMEOUT, STOP_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:
- Memanfaatkan alat command line rekaman aktivitas sistem
- Menggunakan CPU Profiler Android Studio
- Menggunakan UI Perfetto
- Merekam rekaman aktivitas secara manual di perangkat langsung dari opsi developer.
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”.
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 terprogram, menganalisis 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.
-
Berita ProdukDi Google Play, kami berkomitmen untuk memberikan pengalaman terbaik kepada pengguna, sekaligus memastikan developer memiliki alat dan kemampuan beradaptasi untuk meraih kesuksesan.
Paul Feng • Waktu baca: 3 menit -
Berita ProdukTahun lalu, kami memperkenalkan verifikasi developer Android untuk memperkuat keamanan ekosistem dan menghentikan pihak tidak bertanggung jawab yang bersembunyi di balik anonimitas untuk merilis aplikasi berbahaya.
Matthew Forsythe • Waktu baca: 2 menit -
Berita ProdukMulai dari overlay beraugmentasi hingga lingkungan yang sepenuhnya imersif, ekosistem Android XR berkembang pesat, dengan Samsung Galaxy XR yang sudah tersedia saat ini.
Stevan Silva, Vinny DaSilva • Waktu baca: 3 menit
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.