Berita Produk
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 penguncian layar saat aktif memainkan peran utama. Apakah Anda menggunakannya secara berlebihan? Dalam postingan blog ini, kita akan membahas apa itu penguncian layar saat aktif, apa saja praktik terbaik untuk menggunakannya, dan bagaimana 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 pengurasan baterai, dengan fokus 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 dan ANR yang dirasakan pengguna secara berlebihan. Kami telah menentukan batas perilaku buruk untuk penguncian layar saat aktif yang berlebihan. Mulai 1 Maret 2026, jika judul Anda tidak memenuhi batas kualitas ini, kami dapat mengecualikan judul tersebut dari platform penemuan yang menonjol seperti rekomendasi. Dalam beberapa kasus, kami dapat menampilkan peringatan di listingan Play Store Anda untuk menunjukkan kepada pengguna bahwa aplikasi Anda dapat menyebabkan pengurasan baterai yang berlebihan.
Peringatan penguncian layar saat aktif yang berlebihan di ringkasan Android vitals.
Untuk perangkat seluler, metrik Android vitals berlaku untuk penguncian layar saat aktif yang tidak dikecualikan yang diperoleh saat layar mati 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 ditahan selama minimal dua jam dalam periode 24 jam.
- Penguncian layar saat aktif memengaruhi lebih dari 5% sesi aplikasi Anda, yang dirata-ratakan selama 28 hari.
Penguncian layar saat aktif yang dibuat oleh audio, lokasi, dan JobScheduler API yang dimulai pengguna 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 tersebut.
Penguncian layar saat aktif parsial menjaga CPU tetap berjalan meskipun layar mati, sehingga mencegah CPU memasuki status "ditangguhkan" berdaya rendah. Penguncian layar saat aktif penuh menjaga layar dan CPU tetap berjalan.
Ada 2 metode penguncian layar saat aktif parsial diperoleh:
- Aplikasi secara manual memperoleh dan melepaskan penguncian layar saat aktif menggunakan PowerManager API 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 dikaitkan dengan 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 pengurasan baterai yang signifikan. Kami telah melihat kasus ketika aplikasi menahan penguncian layar saat 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 Penguncian Layar Saat Aktif
Sebelum 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 telah mempertimbangkan opsi penguncian layar saat aktif alternatif?
Sebelum mempertimbangkan untuk memperoleh penguncian layar saat aktif parsial manual, ikuti flowchart pengambilan keputusan ini:
Flowchart untuk memutuskan kapan harus memperoleh penguncian layar saat aktif secara manual
- Apakah layar harus tetap aktif?
- Ya: Lihat dokumentasi Jaga Layar Tetap Aktif sebagai gantinya
- Apakah aplikasi menjalankan layanan latar depan?
- Tidak: Anda tidak perlu memperoleh penguncian layar saat aktif secara manual.
- Apakah pengalaman pengguna akan terganggu jika perangkat ditangguhkan?
- 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 menjaga perangkat tetap aktif atas nama Anda?
- Anda dapat memanfaatkan dokumentasi Mengidentifikasi penguncian layar saat aktif yang dibuat oleh API lain untuk mengidentifikasi skenario saat penguncian layar saat aktif 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, Anda harus melanjutkan dengan memperoleh penguncian layar saat aktif secara manual.
2. Apakah Anda memberi nama penguncian layar saat aktif dengan benar?
Saat memperoleh penguncian layar saat aktif secara manual, pemberian nama yang tepat penting untuk proses debug:
- Jangan sertakan Informasi Identitas Pribadi (PII) dalam nama seperti alamat email. Jika PII terdeteksi, penguncian layar saat aktif akan dicatat sebagai
_UNKNOWN, sehingga menghambat proses debug. - Jangan beri nama penguncian layar saat aktif Anda secara terprogram menggunakan nama class atau metode, karena nama tersebut dapat diobfuscated oleh alat seperti Proguard. Sebagai gantinya, gunakan string yang dikodekan secara permanen.
- Jangan menambahkan penghitung atau ID unik ke tag penguncian layar saat aktif. Tag yang sama harus digunakan setiap kali penguncian layar saat aktif berjalan agar sistem dapat mengagregasi penggunaan berdasarkan nama, sehingga perilaku abnormal lebih mudah dideteksi.
3. Apakah penguncian layar saat aktif yang diperoleh selalu dilepaskan?
Jika Anda memperoleh penguncian layar saat aktif secara manual, pastikan pelepasan penguncian layar saat aktif selalu dieksekusi. Kegagalan melepaskan penguncian layar saat aktif dapat menyebabkan pengurasan baterai yang signifikan.
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 penguncian layar saat aktif dilepaskan, meskipun terjadi pengecualian.
Selain itu, Anda dapat menambahkan waktu tunggu ke penguncian layar saat aktif untuk memastikan penguncian layar saat aktif dilepaskan setelah periode 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 berkala di PeriodicWorkRequests.
- SensorManager: Manfaatkan pengelompokan 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 menggunakan setMinUpdateIntervalMillis.
Anda dapat melihat detail selengkapnya di dokumentasi praktik terbaik penguncian layar saat aktif.
Men-debug 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 yang berlebihan di 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 penguncian layar saat aktif ditahan oleh aplikasi atau ditahan oleh API lain.
Dasbor penguncian layar saat aktif parsial yang berlebihan di Android vitals di-scroll ke bawah ke bagian perincian untuk melihat tag penguncian layar saat aktif yang berlebihan.
Men-debug penguncian layar saat aktif yang berlebihan yang ditahan oleh pekerja/tugas
Anda dapat mengidentifikasi penguncian layar saat aktif yang ditahan pekerja dengan nama penguncian layar saat aktif ini:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Daftar lengkap variasi nama penguncian layar saat aktif yang ditahan pekerja tersedia dalam dokumentasi. Untuk men-debug penguncian layar saat aktif ini, Anda dapat menggunakan Background Task Inspector untuk men-debug secara lokal, atau memanfaatkan getStopReason untuk men-debug masalah di lapangan.
Background Task Inspector Android Studio
Screenshot Background Task Inspector, yang dapat 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, dieksekusi, dalam antrean), sehingga Anda dapat memeriksa detail dan memahami rantai pekerja.
Misalnya, alat 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 dengan penguncian layar saat aktif yang berlebihan di lapangan, gunakan WorkInfo.getStopReason() di WorkManager 2.9.0+ atau untuk JobScheduler, JobParameters.getStopReason() yang tersedia di SDK 31+.
API ini membantu mencatat alasan pekerja berhenti (misalnya, STOP_REASON_TIMEOUT, STOP_REASON_QUOTA), sehingga menunjukkan masalah seperti waktu tunggu yang sering terjadi 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 untuk mengetahui detail selengkapnya.
Men-debug jenis penguncian layar saat aktif yang berlebihan lainnya
Untuk skenario yang lebih kompleks yang melibatkan penguncian layar saat aktif yang ditahan secara manual atau API yang menahan penguncian layar saat aktif, sebaiknya gunakan pengumpulan rekaman aktivitas sistem untuk men-debug.
Pengumpulan rekaman aktivitas sistem
Rekaman aktivitas sistem adalah alat proses debug yang canggih yang merekam aktivitas sistem secara mendetail selama periode 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:
- Menggunakan 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 di tab aplikasi & layanan Android.
Terlepas dari metode yang dipilih, Anda harus memastikan bahwa Anda mengumpulkan "power:PowerManagement" kategori Atrace untuk mengaktifkan tampilan jalur 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 di bagian “Status Perangkat”.
Sematkan jalur di bagian “Status Perangkat” seperti jalur "Aplikasi teratas", "Status layar", "Penguncian layar saat aktif yang lama", dan “Tugas” untuk mengidentifikasi secara visual bagian penguncian layar saat aktif yang berjalan lama.
Setiap blok mencantumkan nama peristiwa, waktu peristiwa dimulai, dan waktu peristiwa berakhir. Di Perfetto, ini disebut bagian.
Untuk analisis beberapa rekaman aktivitas yang skalabel, Anda dapat menggunakan analisis SQL Perfetto. Kueri SQL dapat menemukan semua penguncian layar saat aktif yang diurutkan berdasarkan durasi, sehingga membantu mengidentifikasi kontributor utama penggunaan yang berlebihan.
Berikut adalah contoh kueri yang menjumlahkan semua tag penguncian layar saat aktif yang terjadi dalam rekaman aktivitas 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 awal dan akhir. API ini menawarkan kontrol yang lebih besar atas titik pemicu awal dan akhir untuk pengumpulan profil dan 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, merekam aktivitas, menganalisis data pembuatan profil, dan menggunakan perintah proses debug lokal.
Rekaman aktivitas sistem yang dikumpulkan menggunakan ProfilingManager akan terlihat mirip dengan rekaman aktivitas yang dikumpulkan secara manual, tetapi proses sistem dan proses aplikasi lainnya akan 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 kesuksesan aplikasi Anda di Google Play.
Lanjutkan membaca
-
Berita Produk
Ekosistem seluler selalu berkembang, sehingga menghadirkan peluang dan ancaman baru. Melalui perubahan ini, Android dan Google Play tetap berkomitmen untuk memastikan miliaran pengguna dapat terus menikmati aplikasi mereka dengan percaya diri dan inovasi developer dapat berkembang.
Vijaya Kaza • Waktu baca: 3 menit
-
Berita Produk
Rilis Jetpack Compose April ‘26 sudah stabil. Rilis ini berisi modul Compose inti versi 1.11 (lihat pemetaan BOM lengkap), alat proses debug elemen bersama, peristiwa trackpad, dan lainnya.
Meghan Mehta • Waktu baca: 5 menit
-
Berita Produk
Android Studio Panda 4 kini stabil dan siap digunakan dalam produksi. Rilis ini menghadirkan Mode Perencanaan, Prediksi Edit Berikutnya, dan lainnya, sehingga memudahkan Anda membuat aplikasi Android berkualitas tinggi.
Matt Dyor • Waktu baca: 5 menit
Terus dapatkan informasi
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.