Berita Produk

Mengoptimalkan baterai aplikasi menggunakan metrik penguncian layar saat aktif Android vitals

Waktu baca: 7 menit
Alice Yuan
Developer Relations Engineer

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.

warning.png

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 audiolokasi, 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:

wakelock.png

Flowchart untuk memutuskan kapan harus memperoleh penguncian layar saat aktif secara manual

  1. Apakah layar harus tetap aktif?
  2. Apakah aplikasi menjalankan layanan latar depan?
    • Tidak: Anda tidak perlu memperoleh penguncian layar saat aktif secara manual.
  3. 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.
  4. Apakah sudah ada API yang menjaga perangkat tetap aktif atas nama Anda?
  5. 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.

breakdowns2.png

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

taskinspector.png


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_TIMEOUTSTOP_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: 

powermgmt.png

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”.

perfetto.png


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.

Ditulis oleh:

Lanjutkan membaca