Dokumen ini membantu Anda mengidentifikasi dan mengoptimalkan kasus penggunaan penguncian layar saat aktif di aplikasi, serta menyoroti apakah ada penguncian layar saat aktif yang diperoleh oleh library lain atau API sistem yang terkait dengan kasus penggunaan ini. Karena penguncian layar saat aktif ini dapat diatribusikan ke aplikasi Anda, mungkin sulit untuk menentukan sumber penguncian layar saat aktif yang bermasalah. Penggunaan API yang salah dapat menyebabkan aplikasi Anda ditandai karena penggunaan penguncian layar saat aktif yang berlebihan, meskipun Anda tidak secara eksplisit mendapatkan penguncian layar saat aktif.
Dokumen ini mencantumkan beberapa nama kunci tetap aktif umum yang mungkin Anda temui saat menggunakan alat proses debug kunci tetap aktif atau dalam laporan dari metrik penting. Nama ini dapat berasal dari library atau API sistem, atau mungkin di-obfuscate. Dengan menggunakan alat proses debug untuk mengidentifikasi penguncian layar saat aktif yang berperilaku tidak semestinya, lalu menelusuri nama penguncian layar saat aktif dalam dokumen ini, Anda dapat menentukan API mana yang mungkin menyebabkan masalah dan menemukan rekomendasi tentang cara mengoptimalkan penggunaannya.
Dokumen ini menguraikan kasus penggunaan umum untuk mendapatkan penguncian layar saat aktif, yang menjelaskan nama penguncian layar saat aktif yang digunakan oleh berbagai API dan library, serta memberikan rekomendasi dan praktik terbaik untuk mengoptimalkan dan mengurangi penggunaan penguncian layar saat aktif.
- AlarmManager
- Audio dan media
- Bluetooth
- Sensor Perangkat
- Firebase Cloud Message (FCM)
- JobScheduler
- Lokasi
- Pesan Jarak Jauh
- WorkManager
_UNKNOWN: Ditampilkan oleh alat proses debug jika nama penguncian layar saat aktif tampaknya menggunakan informasi identitas pribadi (PII).
AlarmManager
AlarmManager mendapatkan penguncian layar saat aktif dan mengatribusikannya ke aplikasi
penelepon. AlarmManager mendapatkan penguncian layar saat aktif saat alarm berbunyi, dan melepaskan
penguncian saat metode onReceive()
siaran alarm selesai dieksekusi.
Nama penguncian layar saat aktif
AlarmManager membuat kunci aktif dengan nama *alarm*. (Tanda bintang adalah bagian dari nama kunci tetap aktif, bukan karakter pengganti.)
Rekomendasi
Sebaiknya lakukan praktik berikut untuk mengoptimalkan perilaku alarm:
- Lihat memilih jenis alarm untuk memutuskan antara alarm tidak tepat atau alarm presisi. Jika alarm Anda tidak perlu akurat, gunakan alarm tidak akurat untuk memberi sistem lebih banyak fleksibilitas dalam penjadwalan, yang dapat meningkatkan masa pakai baterai.
- Waspadai kuota alarm yang diterapkan sistem dan desain aplikasi Anda untuk mematuhinya.
- Hindari melakukan pekerjaan yang panjang dalam metode
onReceive()dan jadwalkan pekerja jika pemrosesan tambahan diperlukan setelah alarm.
Audio dan media
Media API dapat memperoleh kunci tetap aktif saat merekam atau memutar audio. Wake lock dikaitkan dengan aplikasi pemanggil.
Nama penguncian layar saat aktif
API Media mendapatkan penguncian layar saat aktif dengan berbagai nama yang diawali dengan Audio:
AudioBitPerfect: Digunakan untuk pemutaran audio USB lossless.AudioDirectOut: Digunakan untuk pemutaran audio lossless di TV atau perangkat khusus.AudioDup: Digunakan untuk pemutaran notifikasi saat terhubung menggunakan Bluetooth atau USB.AudioIn: Digunakan untuk merekam audio saat dalam mode camcorder dan mikrofon aktif.AudioMix: Digunakan untuk pemutaran audio ke perangkat umum.AudioOffload: Digunakan untuk pemutaran hanya musik jangka panjang, untuk aplikasi yang mendukung mode ini.AudioSpatial: Digunakan untuk pemutaran audio film atau musik multi-saluran di perangkat yang mendukung audio spasial.AudioUnknown: Digunakan jika situasi lainnya tidak berlaku.MmapCapture: Digunakan untuk pengambilan audio latensi rendah.MmapPlayback: Digunakan untuk pemutaran latensi rendah, seperti untuk game atau untuk aplikasi audio profesional.
Rekomendasi
Sebaiknya lakukan praktik berikut:
- Jangan deklarasikan nama penguncian layar saat aktif yang diawali dengan
Audio. - Jika menggunakan API media, Anda tidak perlu mendapatkan kunci tetap aktif secara langsung; Anda dapat mengandalkan API untuk mendapatkan kunci tetap aktif yang diperlukan untuk Anda.
- Saat Anda menggunakan API media, akhiri sesi media dan layanan latar depan terkait jika Anda tidak lagi membutuhkannya.
Bluetooth
Bluetooth API platform terutama menahan kunci wake kernel saat tindakan Bluetooth terjadi, yang tidak dapat diatribusikan ke aplikasi.
Rekomendasi
- Gunakan penyambungan Perangkat Pendamping untuk menyambungkan perangkat Bluetooth guna menghindari perolehan penguncian layar saat aktif manual selama penyambungan Bluetooth.
- Lihat panduan berkomunikasi di latar belakang untuk memahami cara melakukan komunikasi Bluetooth di latar belakang.
- Penggunaan
WorkManagersering kali sudah cukup jika tidak ada dampak pengguna terhadap penundaan komunikasi. Jika penguncian layar saat aktif manual dianggap perlu, hanya tahan penguncian layar saat aktif selama durasi aktivitas Bluetooth atau pemrosesan data aktivitas.
Sensor Perangkat
Ada beberapa metode untuk melacak data sensor perangkat seperti jumlah langkah, data akselerometer, atau giroskop.
Di Wear OS, gunakan Wear Health Services untuk mengambil data perangkat seperti ketinggian, detak jantung, dan jarak yang ditempuh.
Jika data dikumpulkan oleh aplikasi lain, Anda dapat menggunakan Health Connect yang dikombinasikan dengan WorkManager untuk mengambil data secara berkala.
Untuk skenario seperti melacak selisih langkah atau jarak yang ditempuh, Anda dapat menggunakan Recording API di perangkat seluler yang dikombinasikan dengan WorkManager untuk mengambil data secara berkala. Untuk mengakses data langkah historis (seperti total langkah harian, atau langkah dalam 6 jam terakhir), Health Connect juga mendukung pelacakan langkah di perangkat untuk perangkat yang menjalankan Android 14 atau yang lebih tinggi.
Dalam situasi tertentu, pelacakan sensor perangkat kustom mungkin diperlukan menggunakan
SensorManager. SensorManager tidak mendapatkan
kunci tetap aktif atas nama aplikasi, kecuali jika sensor adalah sensor aktif, yang dapat diidentifikasi menggunakan API isWakeUpSensor.
Rekomendasi
Menggunakan sensor untuk merekam pada frekuensi sampling yang tinggi dapat menghabiskan daya baterai secara signifikan. Berikut rekomendasi untuk mengurangi baterai cepat habis dan penggunaan penguncian layar saat aktif:
- Jika melacak jumlah langkah atau jarak yang ditempuh, gunakan Recording API untuk merekam data secara efisien baterai. Untuk perangkat yang menjalankan Android 14 atau yang lebih tinggi, pertimbangkan Health Connect untuk mengakses data historis perangkat dan jumlah langkah yang digabungkan.
- Untuk pelacakan sensor pasif di Wear OS, gunakan Wear Health Services untuk mengoptimalkan penggunaan baterai.
- Saat mendaftarkan sensor dengan
SensorManager, tentukanmaxReportLatencyUslebih dari 30 detik untuk menggunakan logika pengelompokan sensor dan mengurangi jumlah interupsi yang diterima aplikasi. Saat perangkat kemudian diaktifkan oleh pemicu lain seperti interaksi pengguna, pengambilan lokasi, atau tugas terjadwal, sistem akan segera mengirimkan data sensor yang di-cache. - Jika aplikasi Anda memerlukan data lokasi dan sensor, sinkronkan pengambilan dan pemrosesan peristiwanya. Dengan menggabungkan pembacaan sensor ke penguncian layar saat aktif singkat yang dipegang sistem untuk pembaruan lokasi, Anda tidak memerlukan penguncian layar saat aktif untuk menjaga agar CPU tetap aktif. Gunakan pekerja atau kunci aktif singkat untuk menangani upload dan pemrosesan data gabungan ini.
Firebase Cloud Message (FCM)
Wake lock diperoleh saat mengirimkan siaran
Firebase Cloud Message (FCM) ke aplikasi.
Wake lock dilepaskan setelah metode siaran FCM
onMessageReceived() selesai dieksekusi.
Nama penguncian layar saat aktif
Saat pesan FCM diterima di perangkat, penguncian layar saat aktif singkat akan dipertahankan dengan nama GOOGLE_C2DM, di Android 16+ nama penguncian layar saat aktif adalah GCM_MESSAGE.
Rekomendasi
Sebaiknya lakukan praktik berikut untuk mengoptimalkan perilaku FCM:
- Mengoptimalkan frekuensi pengiriman FCM.
- Jangan gunakan FCM prioritas tinggi kecuali jika pesan benar-benar perlu dikirimkan segera.
- Menyelesaikan metode
onMessageReceived()secepat mungkin atau menjadwalkan pekerja untuk melanjutkan tugas jika pemrosesan tambahan diperlukan. Lihat panduan Firebase untuk mengetahui informasi selengkapnya.
JobScheduler
Tugas JobScheduler mendapatkan wake lock saat menjalankan tugas di latar belakang. Wake lock diatribusikan ke aplikasi yang membuat pekerja.
Nama penguncian layar saat aktif
Nama penguncian layar saat aktif yang diperoleh oleh JobScheduler bergantung pada versi sistem Android yang dijalankannya, dan tujuan tugas.
Item yang diapit tanda kurung siku adalah variabel. Misalnya,
"<package_name>" adalah nama paket aplikasi Anda, bukan
teks <package name>. Namun, *job* adalah urutan karakter
*job*, dengan tanda bintang; tanda bintang tidak digunakan sebagai karakter pengganti.
Android 15 dan yang lebih lama
Tugas yang dimulai pengguna membuat kunci aktivasi dengan nama yang mengikuti pola ini:
*job*u/@<name_space>@/<package_name>/<classname>
Tugas lain menggunakan pola ini:
*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 dan yang lebih baru
Tugas yang dimulai pengguna membuat kunci aktivasi dengan nama yang mengikuti pola ini:
*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Tugas yang diprioritaskan menggunakan pola ini:
*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Tugas reguler menggunakan pola ini:
*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Contoh
Misalkan ada tugas yang diprioritaskan dengan namespace backup dan tag pelacakan started. Nama paketnya adalah com.example.app, dan class yang
membuat tugas adalah com.backup.BackupFileService.
Di perangkat yang menjalankan Android 15 atau yang lebih rendah, penguncian layar saat aktif akan diberi nama:
*job*/@backup@/com.example.app/com.backup.BackupFileService
Pada perangkat yang menjalankan Android 16 QPR2 atau yang lebih tinggi, kunci tetap aktif akan diberi nama:
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
Rekomendasi
- Jangan dapatkan penguncian layar saat aktif manual untuk kasus penggunaan download/ upload yang dimulai pengguna. Sebagai gantinya, gunakan User-Initiated Data Transfer (UIDT) API. Ini adalah jalur yang ditetapkan untuk tugas transfer data yang berjalan lama yang dimulai oleh pengguna.
- Jika Anda mengidentifikasi penguncian layar saat aktif yang dibuat oleh JobScheduler dengan penggunaan penguncian layar saat aktif yang tinggi, hal ini mungkin karena Anda salah mengonfigurasi tugas agar tidak selesai dalam skenario tertentu. Pertimbangkan untuk menganalisis alasan penghentian tugas, terutama jika Anda melihat banyak kemunculan
STOP_REASON_TIMEOUT. - Lakukan audit atas penggunaan tugas JobScheduler Anda. Khususnya, ikuti panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
Lokasi
LocationManager dan FusedLocationProviderClient menggunakan
kunci tetap aktif untuk mendapatkan dan mengirimkan lokasi perangkat. Wake lock dikaitkan dengan aplikasi yang memanggil API tersebut.
Nama penguncian layar saat aktif
Layanan lokasi menggunakan nama berikut:
CollectionLib-SigCollectorNetworkLocationLocatorNetworkLocationScannerNlpCollectorWakeLockNlpWakeLock*location*
Rekomendasi
- Lihat panduan kami untuk Mengoptimalkan penggunaan lokasi. Pertimbangkan untuk menerapkan waktu tunggu, memanfaatkan pengelompokan permintaan lokasi, atau menggunakan update lokasi pasif.
- Hindari mendapatkan kunci tetap aktif berkelanjutan yang terpisah untuk menyimpan data lokasi dalam cache, karena hal ini berlebihan dan harus dihapus.
Saat meminta pembaruan lokasi menggunakan
FusedLocationProvideratauLocationManagerAPI, sistem akan otomatis memicu aktivasi perangkat selama callback peristiwa lokasi. Sebagai gantinya, simpan peristiwa lokasi dalam memori atau penyimpanan, dan proses peristiwa lokasi secara berkala menggunakanWorkManager.
Pesan Jarak Jauh
Bagian ini membahas skenario yang melibatkan pesan jarak jauh saat aplikasi mungkin perlu mempertahankan koneksi atau bereaksi terhadap peristiwa dari perangkat lain, yang berpotensi memengaruhi penggunaan penguncian layar saat aktif. Kasus penggunaan umum meliputi:
- Aplikasi pendamping pemantauan video atau suara yang perlu memantau peristiwa yang terjadi di perangkat eksternal yang terhubung melalui jaringan lokal.
- Aplikasi pesan yang mempertahankan koneksi soket jaringan dengan varian desktop.
Sebagian besar aktivasi dalam skenario pesan jarak jauh ini adalah kunci aktivasi kernel. Karena kunci aktif kernel tidak diatribusikan ke aplikasi, tidak ada nama kunci aktif terkait yang tercantum di sini.
Rekomendasi
- Jika peristiwa jaringan dapat diproses di sisi server, gunakan FCM untuk menerima informasi di klien. Anda dapat memilih untuk menjadwalkan pekerja yang dipercepat jika pemrosesan tambahan data FCM diperlukan.
- Jika peristiwa harus diproses di sisi klien menggunakan koneksi soket, penguncian layar saat aktif tidak diperlukan untuk memproses interupsi peristiwa. Saat paket data tiba di radio Wi-Fi atau seluler, hardware radio akan memicu interupsi dalam bentuk kunci aktif kernel. Kemudian, Anda dapat memilih untuk menjadwalkan pekerja atau mendapatkan kunci aktif untuk memproses data.
- Misalnya, jika Anda menggunakan
ktor-networkuntuk memproses paket data pada soket jaringan, Anda hanya boleh mendapatkan kunci tetap aktif saat paket telah dikirimkan ke klien.
WorkManager
Pekerja WorkManager mendapatkan kunci aktivasi saat menjalankan tugas di latar belakang. Wake lock diatribusikan ke aplikasi yang membuat pekerja.
Nama penguncian layar saat aktif
Nama penguncian layar saat aktif yang diperoleh oleh WorkManager bergantung pada versi sistem Android yang digunakan untuk menjalankannya.
Android 15 dan yang lebih lama
Tugas WorkManager membuat kunci aktivasi dengan nama yang mengikuti pola ini:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 dan yang lebih baru
Tugas yang diprioritaskan membuat kunci aktivasi dengan nama yang mengikuti pola ini:
*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Tugas reguler mengikuti pola ini:
*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Secara default, <trace_tag> adalah nama pekerja.
Contoh
Misalkan ada pekerja yang dipercepat bernama BackupFileWorker. Nama paketnya
adalah com.example.app.
Di perangkat yang menjalankan Android 15 atau yang lebih rendah, penguncian layar saat aktif akan diberi nama:
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Di perangkat yang menjalankan Android 16 QPR2 atau yang lebih tinggi dan menggunakan WorkManager 2.10.0+, penguncian layar saat aktif akan diberi nama:
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Rekomendasi
- Upgrade versi WorkManager Anda ke versi stabil terbaru agar tag penguncian layar saat aktif lebih verbose di Android 16 QPR2 atau yang lebih tinggi.
- Lakukan audit atas penggunaan pekerja WorkManager Anda. Khususnya, pastikan aplikasi mengikuti
panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
Untuk membuat tag penguncian layar saat aktif lebih verbose di Android 16 QPR2 atau yang lebih tinggi, gunakan metode
setTraceTagpada worker untuk menambahkan informasi proses debug lainnya, seperti class mana yang menjadwalkan worker. - Jika Anda mengidentifikasi penguncian layar saat aktif yang dibuat oleh WorkManager dengan penggunaan penguncian layar saat aktif yang tinggi, hal ini mungkin karena Anda salah mengonfigurasi worker sehingga tidak dapat diselesaikan dalam skenario tertentu. Pertimbangkan untuk menganalisis
alasan penghentian pekerja, terutama jika Anda melihat
banyak kejadian
STOP_REASON_TIMEOUT. - Selain mencatat alasan penghentian pekerja, lihat dokumentasi kami tentang men-debug pekerja. Selain itu, pertimbangkan untuk mengumpulkan dan menganalisis rekaman aktivitas sistem untuk memahami kapan kunci tetap aktif diperoleh dan dilepaskan.
_UNKNOWN
Jika alat proses debug menganggap nama penguncian layar saat aktif berisi informasi identitas pribadi (PII), alat tersebut tidak akan menampilkan nama penguncian layar saat aktif yang sebenarnya. Sebagai gantinya, mereka
memberi label penguncian layar saat aktif sebagai _UNKNOWN. Misalnya, alat dapat melakukan hal ini jika nama kunci
layar berisi alamat email.
Rekomendasi
Ikuti praktik terbaik penamaan penguncian layar saat aktif, dan hindari penggunaan PII dalam nama penguncian layar saat aktif. Jika Anda menemukan kunci tetap aktif bernama _UNKNOWN yang dikaitkan dengan aplikasi Anda, coba
identifikasi kunci tetap aktif tersebut, dan beri nama yang berbeda.