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 library lain atau API sistem yang terkait dengan kasus penggunaan ini. Karena penguncian layar saat aktif ini dapat dikaitkan dengan aplikasi Anda, mungkin akan 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 memperoleh penguncian layar saat aktif secara eksplisit.
Dokumen ini mencantumkan beberapa nama penguncian layar saat aktif umum yang mungkin Anda temui saat menggunakan alat proses debug penguncian layar saat aktif atau dalam laporan dari vitals. 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 bermasalah, 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 memperoleh 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 memperoleh penguncian layar saat aktif dan mengatribusikannya ke aplikasi
panggilan. AlarmManager memperoleh penguncian layar saat aktif saat alarm berbunyi, dan melepaskan
kunci saat metode onReceive()
siaran alarm selesai dieksekusi.
Nama penguncian layar saat aktif
AlarmManager membuat penguncian layar saat aktif dengan nama *alarm*. (Tanda bintang adalah
bagian dari nama penguncian layar saat aktif, bukan karakter pengganti.)
Rekomendasi
Sebaiknya lakukan praktik berikut untuk mengoptimalkan perilaku alarm:
- Lihat memilih jenis alarm untuk memutuskan antara alarm tidak presisi atau alarm presisi. Jika alarm Anda tidak perlu presisi, gunakan alarm tidak akurat untuk memberi sistem lebih banyak fleksibilitas dalam penjadwalan, yang dapat meningkatkan masa pakai baterai.
- Perhatikan kuota alarm yang diberlakukan sistem dan desain aplikasi Anda untuk mematuhinya.
- Hindari melakukan pekerjaan yang panjang dalam metode
onReceive()dan jadwalkan worker jika pemrosesan tambahan diperlukan setelah alarm.
Audio dan media
API media dapat memperoleh penguncian layar saat aktif saat merekam atau memutar audio. Penguncian layar saat aktif diatribusikan ke aplikasi panggilan.
Nama penguncian layar saat aktif
Media API memperoleh 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 perekaman audio saat dalam mode camcorder saat mikrofon aktif.AudioMix: Digunakan untuk pemutaran audio ke perangkat umum.AudioOffload: Digunakan untuk pemutaran khusus musik jangka panjang, untuk aplikasi yang mendukung mode ini.AudioSpatial: Digunakan untuk pemutaran audio film atau musik multisaluran di perangkat yang mendukung audio spasial.AudioUnknown: Digunakan jika situasi lain tidak berlaku.MmapCapture: Digunakan untuk perekaman audio latensi rendah.MmapPlayback: Digunakan untuk pemutaran latensi rendah, seperti untuk game atau untuk aplikasi audio profesional.
Rekomendasi
Sebaiknya lakukan praktik berikut:
- Jangan mendeklarasikan nama penguncian layar saat aktif yang diawali dengan
Audio. - Jika menggunakan API media, Anda tidak perlu mendapatkan penguncian layar saat aktif secara langsung; Anda dapat mengandalkan API untuk mendapatkan penguncian layar saat aktif yang diperlukan untuk Anda.
- Saat Anda menggunakan media API, akhiri sesi media dan layanan latar depan terkait saat Anda tidak lagi membutuhkannya.
Bluetooth
API Bluetooth platform terutama menahan penguncian layar saat aktif kernel saat tindakan Bluetooth terjadi, yang tidak dapat diatribusikan ke aplikasi.
Rekomendasi
- Gunakan penyambungan Perangkat Pendamping untuk menyambungkan perangkat Bluetooth guna menghindari 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 komunikasi yang tertunda. Jika penguncian layar saat aktif manual dianggap perlu, tahan penguncian layar saat aktif hanya 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 Fitur Kesehatan Wear untuk mengambil data perangkat seperti ketinggian, detak jantung, dan jarak yang ditempuh.
Jika data dikumpulkan oleh aplikasi lain, Anda dapat menggunakan Health Connect yang digabungkan dengan WorkManager untuk mengambil data secara berkala.
Untuk skenario seperti melacak delta 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 memperoleh
penguncian layar saat aktif atas nama aplikasi, kecuali jika sensornya adalah sensor pengaktifan,
yang dapat diidentifikasi menggunakan API isWakeUpSensor.
Rekomendasi
Menggunakan sensor untuk merekam pada frekuensi sampling yang tinggi dapat menguras baterai secara signifikan. Berikut adalah rekomendasi untuk mengurangi penggunaan baterai dan penggunaan penguncian layar saat aktif:
- Jika melacak jumlah langkah atau jarak yang ditempuh, gunakan Recording API untuk mencatat data secara efisien baterai. Untuk perangkat yang menjalankan Android 14 atau yang lebih tinggi, pertimbangkan Health Connect untuk mengakses histori perangkat dan jumlah langkah gabungan.
- Untuk pelacakan sensor pasif di Wear OS, gunakan Fitur Kesehatan Wear 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 peristiwa keduanya. Dengan menggabungkan pembacaan sensor ke penguncian layar saat aktif singkat yang disimpan sistem untuk pembaruan lokasi, Anda tidak memerlukan penguncian layar saat aktif untuk menjaga CPU tetap aktif. Gunakan worker atau penguncian layar saat aktif berdurasi singkat untuk menangani upload dan pemrosesan data gabungan ini.
Firebase Cloud Message (FCM)
Penguncian layar saat aktif diperoleh saat mengirimkan
siaran Firebase Cloud Message (FCM) ke aplikasi.
Penguncian layar saat aktif dilepaskan setelah metode
onMessageReceived() siaran FCM 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 segera dikirim.
- Selesaikan metode
onMessageReceived()secepat mungkin atau jadwalkan worker untuk melanjutkan tugas jika diperlukan pemrosesan tambahan. Lihat panduan Firebase untuk mengetahui informasi selengkapnya.
JobScheduler
Tugas JobScheduler memperoleh penguncian layar saat aktif saat menjalankan tugas di latar belakang. Penguncian layar saat aktif diatribusikan ke aplikasi yang membuat worker.
Nama penguncian layar saat aktif
Nama penguncian layar saat aktif yang diperoleh JobScheduler bergantung pada versi sistem Android yang dijalankan, dan tujuan tugas.
Item yang diapit tanda kurung siku adalah variabel. Misalnya,
"<package_name>" adalah nama paket aplikasi Anda, bukan
teks literal <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 penguncian layar saat aktif dengan nama yang mengikuti pola berikut:
*job*u/@<name_space>@/<package_name>/<classname>
Pekerjaan lain menggunakan pola ini:
*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 dan yang lebih baru
Tugas yang dimulai pengguna membuat penguncian layar saat aktif 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
Misalnya, ada tugas yang diprioritaskan dengan namespace backup dan tag
trace started. Nama paketnya adalah com.example.app, dan class yang
membuat tugas adalah com.backup.BackupFileService.
Pada perangkat yang menjalankan Android 15 atau yang lebih rendah, penguncian layar saat aktif akan diberi nama:
*job*/@backup@/com.example.app/com.backup.BackupFileService
Di perangkat yang menjalankan Android 16 QPR2 atau yang lebih baru, penguncian layar saat 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 API Transfer Data yang Dimulai oleh Pengguna (UIDT). 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 sehingga tidak selesai dalam skenario
tertentu. Pertimbangkan untuk menganalisis alasan penghentian tugas, terutama jika Anda melihat kemunculan
STOP_REASON_TIMEOUTyang tinggi. - Audit penggunaan tugas JobScheduler Anda. Secara khusus, ikuti panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
Lokasi
LocationManager dan FusedLocationProviderClient menggunakan
penguncian layar saat aktif untuk memperoleh dan mengirimkan lokasi perangkat. Penguncian layar saat aktif
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 pembaruan lokasi pasif.
- Hindari memperoleh penguncian layar saat aktif yang terpisah dan berkelanjutan untuk menyimpan data lokasi ke dalam cache,
karena hal ini redundan dan harus dihapus.
Saat meminta pembaruan lokasi menggunakan
API
FusedLocationProvideratauLocationManager, sistem akan otomatis memicu pengaktifan perangkat selama callback peristiwa lokasi. Sebagai gantinya, simpan peristiwa lokasi di memori atau penyimpanan, dan proses peristiwa lokasi secara berkala menggunakanWorkManager.
Pengiriman Pesan Jarak Jauh
Bagian ini membahas skenario yang melibatkan pesan jarak jauh, yang mungkin mengharuskan aplikasi mempertahankan koneksi atau bereaksi terhadap peristiwa dari perangkat lain, sehingga berpotensi memengaruhi penggunaan penguncian layar saat aktif. Kasus penggunaan umum mencakup:
- 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 pengaktifan dalam skenario pesan jarak jauh ini adalah penguncian layar saat aktif kernel. Karena penguncian layar saat aktif kernel tidak diatribusikan ke aplikasi, tidak ada nama penguncian layar saat aktif terkait yang dapat dicantumkan di sini.
Rekomendasi
- Jika peristiwa jaringan dapat diproses di sisi server, gunakan FCM untuk menerima informasi di klien. Anda dapat memilih untuk menjadwalkan worker yang dipercepat jika diperlukan pemrosesan data FCM tambahan.
- Jika peristiwa harus diproses di sisi klien menggunakan koneksi soket, penguncian layar saat aktif tidak diperlukan untuk memproses gangguan peristiwa. Saat paket data tiba di radio Wi-Fi atau seluler, hardware radio akan memicu interupsi dalam bentuk penguncian layar saat aktif kernel. Anda kemudian dapat memilih untuk menjadwalkan worker atau memperoleh penguncian layar saat aktif untuk memproses data.
- Misalnya, jika Anda menggunakan
ktor-networkuntuk memproses paket data di soket jaringan, Anda hanya boleh mendapatkan penguncian layar saat aktif jika paket telah dikirim ke klien.
WorkManager
Worker WorkManager memperoleh penguncian layar saat aktif saat menjalankan tugas di latar belakang. Penguncian layar saat aktif diatribusikan ke aplikasi yang membuat worker.
Nama penguncian layar saat aktif
Nama penguncian layar saat aktif yang diperoleh WorkManager bergantung pada versi sistem Android yang dijalankan.
Android 15 dan yang lebih lama
Tugas WorkManager membuat penguncian layar saat aktif dengan nama yang mengikuti pola berikut:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 dan yang lebih baru
Tugas yang diprioritaskan membuat penguncian layar saat aktif dengan nama yang mengikuti pola berikut:
*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 worker.
Contoh
Misalkan ada worker yang diprioritaskan bernama BackupFileWorker. Nama paketnya
adalah com.example.app.
Pada 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 baru 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 untuk membuat tag penguncian layar saat aktif lebih panjang di Android 16 QPR2 atau yang lebih tinggi.
- Audit penggunaan worker WorkManager Anda. Secara khusus, pastikan aplikasi Anda mengikuti
panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
Untuk membuat tag penguncian layar saat aktif lebih panjang di Android 16 QPR2 atau yang lebih tinggi, gunakan
metode
setTraceTagpada worker untuk menambahkan lebih banyak informasi proses debug, seperti class 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 pekerja agar tidak
selesai dalam skenario tertentu. Pertimbangkan untuk menganalisis
alasan penghentian worker, terutama jika Anda melihat
tingginya kemunculan
STOP_REASON_TIMEOUT. - Selain mencatat alasan penghentian worker, lihat dokumentasi kami tentang men-debug worker. Selain itu, pertimbangkan untuk mengumpulkan dan menganalisis pelacakan sistem untuk memahami kapan penguncian layar saat 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 melabeli penguncian layar saat aktif sebagai _UNKNOWN. Misalnya, alat mungkin melakukan ini jika nama penguncian layar saat aktif 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 penguncian layar saat aktif bernama _UNKNOWN yang dikaitkan dengan aplikasi Anda, coba
identifikasi penguncian layar saat aktif tersebut, dan beri nama yang berbeda.