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 atau API sistem lain yang terkait dengan kasus penggunaan ini. Karena penguncian layar saat aktif ini dapat dikaitkan dengan 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 memperoleh penguncian layar saat aktif.
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 data penting. Nama-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 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
- Pengiriman 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 mengaitkannya dengan aplikasi panggilan. AlarmManager memperoleh penguncian layar saat aktif saat alarm berbunyi, dan melepaskan
penguncian 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 ikuti praktik berikut untuk mengoptimalkan perilaku alarm:
- Lihat Memilih jenis alarm untuk memutuskan antara alarm tidak akurat atau akurat. Jika alarm Anda tidak perlu akurat, gunakan alarm tidak akurat untuk memberi sistem lebih banyak fleksibilitas dalam penjadwalan, yang dapat meningkatkan masa pakai baterai.
- Perhatikan kuota alarm yang ditetapkan 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
API media dapat memperoleh penguncian layar saat aktif saat merekam atau memutar audio. Penguncian layar saat aktif dikaitkan dengan aplikasi panggilan.
Nama penguncian layar saat aktif
API media 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 musik saja dalam jangka panjang, untuk aplikasi yang mendukung mode ini.AudioSpatial: Digunakan untuk pemutaran audio film atau musik multi-channel di perangkat yang mendukung audio spasial.AudioUnknown: Digunakan saat situasi lain tidak berlaku.MmapCapture: Digunakan untuk perekaman audio latensi rendah.MmapPlayback: Digunakan untuk pemutaran latensi rendah, seperti untuk game atau aplikasi audio profesional.
Rekomendasi
Sebaiknya ikuti praktik berikut:
- Jangan deklarasikan nama penguncian layar saat aktif yang diawali dengan
Audio. - Jika menggunakan API media, Anda tidak perlu memperoleh penguncian layar saat aktif secara langsung; Anda dapat mengandalkan API untuk memperoleh penguncian layar saat aktif yang diperlukan.
- Saat menggunakan API media, akhiri sesi media dan layanan latar depan terkait jika Anda tidak memerlukannya lagi.
Bluetooth
Bluetooth API platform terutama menahan penguncian layar saat aktif kernel saat tindakan Bluetooth terjadi, yang tidak dapat dikaitkan dengan aplikasi.
Rekomendasi
- Gunakan pairing Perangkat Pendamping untuk memasangkan perangkat Bluetooth guna menghindari perolehan penguncian layar saat aktif manual selama pairing Bluetooth.
- Lihat panduan berkomunikasi di latar belakang untuk memahami cara melakukan komunikasi Bluetooth di latar belakang.
- Penggunaan
WorkManagersering kali cukup jika tidak ada dampak pengguna pada komunikasi yang tertunda. Jika penguncian layar saat aktif manual dianggap perlu, tahan penguncian layar saat aktif hanya selama 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 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 sensor adalah sensor bangun,
yang dapat diidentifikasi menggunakan isWakeUpSensor API.
Rekomendasi
Menggunakan sensor untuk merekam pada kecepatan pengambilan sampel yang tinggi dapat menguras baterai secara signifikan. Berikut adalah rekomendasi untuk mengurangi pengurasan baterai dan penggunaan penguncian layar saat aktif:
- Jika melacak jumlah langkah atau jarak yang ditempuh, gunakan Recording API untuk merekam data dengan cara yang hemat baterai. Untuk perangkat yang menjalankan Android 14 atau yang lebih tinggi, pertimbangkan Health Connect untuk mengakses data perangkat historis dan jumlah langkah gabungan.
- 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 ditahan sistem untuk pembaruan lokasi, Anda tidak memerlukan penguncian layar saat aktif untuk menjaga CPU tetap aktif. Gunakan pekerja 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 mengirim 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 ditahan dengan nama GOOGLE_C2DM. Di Android 16+, nama penguncian layar saat aktif adalah GCM_MESSAGE.
Rekomendasi
Sebaiknya ikuti praktik berikut untuk mengoptimalkan perilaku FCM:
- Optimalkan frekuensi pengiriman FCM.
- Jangan gunakan FCM prioritas tinggi kecuali jika pesan benar-benar perlu dikirim segera.
- Pastikan metode
onMessageReceived()selesai secepat mungkin atau jadwalkan pekerja untuk melanjutkan tugas jika pemrosesan tambahan diperlukan. 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 dikaitkan dengan 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 sudut 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 ini:
*job*u/@<name_space>@/<package_name>/<classname>
Tugas lainnya 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 aktivitas 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 lama, 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 memperoleh 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 sehingga tidak selesai dalam skenario tertentu. Pertimbangkan untuk menganalisis alasan penghentian tugas,
terutama jika Anda melihat kemunculan
STOP_REASON_TIMEOUTyang tinggi. - Lakukan audit atas 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 terpisah dan berkelanjutan untuk data lokasi caching, karena hal ini berlebihan dan harus dihapus.
Saat meminta pembaruan lokasi menggunakan
FusedLocationProvideratauLocationManagerAPI, sistem akan otomatis memicu pengaktifan perangkat selama callback peristiwa lokasi. Sebagai gantinya, simpan peristiwa lokasi dalam memori atau penyimpanan, dan proses peristiwa lokasi secara berkala menggunakanWorkManager.
Pengiriman Pesan Jarak Jauh
Bagian ini membahas skenario yang melibatkan pengiriman 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 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 pengiriman pesan jarak jauh ini adalah penguncian layar saat aktif kernel. Karena penguncian layar saat aktif kernel tidak dikaitkan dengan 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 seorang pekerja yang diprioritaskan jika pemrosesan data FCM tambahan 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 penguncian layar saat aktif kernel. Kemudian, Anda dapat memilih untuk menjadwalkan pekerja atau memperoleh penguncian layar saat aktif untuk memproses data.
- Misalnya, jika Anda menggunakan
ktor-networkuntuk memproses paket data di soket jaringan, Anda hanya boleh memperoleh penguncian layar saat aktif saat paket telah dikirim ke klien.
WorkManager
PekerjaWorkManager memperoleh penguncian layar saat aktif saat menjalankan tugas di latar belakang. Penguncian layar saat aktif dikaitkan dengan aplikasi yang membuat pekerja.
Nama penguncian layar saat aktif
Nama penguncian layar saat aktif yang diperoleh oleh WorkManager bergantung pada versi sistem Android yang dijalankannya.
Android 15 dan yang lebih lama
Tugas WorkManager membuat penguncian layar saat aktif 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 penguncian layar saat aktif 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
Misalnya, ada pekerja yang diprioritaskan bernama BackupFileWorker. Nama paketnya adalah com.example.app.
Di perangkat yang menjalankan Android 15 atau yang lebih lama, 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 detail di Android 16 QPR2 atau yang lebih baru.
- Lakukan audit atas penggunaan pekerja WorkManager Anda. Secara khusus, pastikan pekerja tersebut mengikuti
panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
Untuk membuat tag penguncian layar saat aktif lebih detail di Android 16 QPR2 atau yang lebih baru, gunakan metode
setTraceTagpada pekerja untuk menambahkan informasi proses debug lainnya, seperti class yang menjadwalkan pekerja. - 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 sehingga tidak selesai dalam skenario tertentu. Pertimbangkan untuk menganalisis alasan penghentian pekerja
, terutama jika Anda melihat
kemunculan
STOP_REASON_TIMEOUTyang tinggi. - Selain mencatat alasan penghentian pekerja, lihat dokumentasi kami tentang proses debug pekerja. Selain itu, pertimbangkan untuk mengumpulkan dan menganalisis aktivitas 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, alat tersebut akan memberi label penguncian layar saat aktif sebagai _UNKNOWN. Misalnya, alat mungkin melakukan hal 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.