Beberapa library dan API sistem dapat memperoleh wake lock yang dapat dikaitkan dengan aplikasi Anda. Hal ini dapat menyulitkan identifikasi wake lock di aplikasi Anda yang mungkin menyebabkan masalah. Jika Anda menyalahgunakan API, hal itu dapat menyebabkan aplikasi memegang kunci layar aktif terlalu lama, meskipun Anda tidak memanggil API kunci layar aktif secara langsung.
Dokumen ini mencantumkan beberapa nama wake lock umum yang mungkin Anda lihat saat menggunakan alat proses debug wake lock. Anda mungkin juga melihat nama ini dalam laporan dari Android vitals. Dalam beberapa kasus, kunci layar aktif mungkin telah dibuat oleh library atau API sistem. Dalam kasus lain, ada alasan mengapa alat mengaburkan nama wake lock yang Anda gunakan di aplikasi. Anda dapat menggunakan alat proses debug untuk mengidentifikasi wake lock yang berperilaku tidak semestinya, lalu mencari nama wake lock dalam dokumen ini untuk mengidentifikasi API yang mungkin menyebabkan masalah dan cara menyelesaikannya.
Dokumen ini membahas nama kunci layar aktif berikut. Dalam setiap kasus, meskipun kunci aktif dapat dibuat oleh beberapa library atau API lain, kunci diatribusikan ke aplikasi yang memanggil API tersebut.
*alarm*
: Dibuat olehAlarmManager
.AudioIn
,AudioMix
: Dibuat oleh media API.GOOGLE_C2DM
: Diperoleh saat mengirimkan siaran Firebase Cloud Message (FCM) ke aplikasi.*job*/<package_name>/<package_and_job_name>
: Dibuat oleh tugas JobScheduler.*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: Dibuat oleh pekerja WorkManager.NetworkLocationLocator
,FusedLocation
,*location*
: Dibuat oleh API lokasi._UNKNOWN
: Ditampilkan oleh alat proses debug jika nama wake lock tampaknya menggunakan informasi identitas pribadi (PII).
*alarm*
Kunci layar saat aktif ini diperoleh oleh AlarmManager
dan diatribusikan ke aplikasi
pemanggil. AlarmManager
memperoleh kunci layar saat aktif saat alarm berbunyi, dan melepaskan
kunci saat metode onReceive()
siaran alarm selesai
dieksekusi.
Rekomendasi
Sebaiknya lakukan praktik berikut untuk mengoptimalkan perilaku alarm:
- Gunakan
AlarmManager
untuk mengoptimalkan frekuensi penjadwalan alarm. - Hanya gunakan alarm
RTC_WAKEUP
(yang mengaktifkan perangkat) jika diperlukan. - Minimalkan penggunaan alarm, dan hindari melakukan pekerjaan yang panjang dalam
metode
onReceive()
.
AudioIn
, AudioMix
, dll.
Berbagai wake lock yang namanya diawali dengan Audio
diperoleh oleh API media
saat merekam atau memutar audio. Wake lock diatribusikan ke aplikasi
pemanggil.
AudioIn
diperoleh selama perekaman AudioRecord
dalam mode camcorder,
saat mikrofon aktif. AudioMix
diperoleh selama pemutaran AudioTrack
ke perangkat. API media lainnya dapat memperoleh wake lock dengan nama lain
yang diawali dengan Audio
.
Rekomendasi
Sebaiknya lakukan praktik berikut:
- Jangan gunakan nama penguncian layar saat aktif yang diawali dengan
Audio
. - Jika menggunakan media API, Anda tidak perlu mendapatkan kunci layar aktif secara langsung; Anda dapat mengandalkan API untuk mendapatkan kunci layar aktif yang diperlukan untuk Anda.
- Saat menggunakan API media, akhiri sesi media jika Anda tidak lagi memerlukannya.
GOOGLE_C2DM
Wake lock ini diperoleh oleh GCM saat mengirimkan siaran Firebase Cloud Message (FCM) ke aplikasi. Wake lock dilepaskan setelah metode onMessageReceived()
siaran FCM selesai dieksekusi.
Rekomendasi
Sebaiknya lakukan praktik berikut untuk mengoptimalkan perilaku FCM:
- Optimalkan frekuensi pengiriman FCM.
- Jangan gunakan FCM prioritas tinggi kecuali jika pesan benar-benar perlu dikirim segera.
- Selesaikan metode
onMessageReceived()
secepat mungkin. Lihat panduan Firebase untuk mengetahui informasi selengkapnya.
*job*/<package_name>/<package_and_job_name>
Wake lock ini digunakan oleh tugas JobScheduler saat menjalankan tugas di latar belakang. Wake lock diatribusikan ke aplikasi yang membuat pekerja.
"<package_name>" adalah nama paket aplikasi Anda, bukan
teks literal <package name>
. Demikian pula, "<package_and_job_name>"
adalah nama paket yang diikuti dengan nama tugas. *job*
adalah urutan karakter
*job*
, dengan tanda bintang; tanda bintang tidak digunakan sebagai karakter pengganti.
Berikut adalah contoh nama kunci layar saat aktif tersebut:
*job*/com.example.app/com.example.app.example.path.ExampleJobService
Rekomendasi
Audit penggunaan tugas JobScheduler Anda. Secara khusus, ikuti panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Wake lock ini digunakan oleh pekerja WorkManager saat menjalankan tugas di latar belakang. Wake lock diatribusikan ke aplikasi yang membuat pekerja.
"<package_name>" adalah nama paket aplikasi Anda, bukan
teks literal <package name>
. *job*
adalah urutan karakter
*job*
, dengan tanda bintang; tanda bintang tidak digunakan sebagai karakter pengganti.
Rekomendasi
Audit penggunaan pekerja WorkManager Anda. Secara khusus, ikuti panduan kami untuk mengoptimalkan penggunaan baterai untuk API penjadwalan tugas.
NetworkLocationLocator
, FusedLocation
, *location*
Nama kunci layar aktif ini digunakan oleh LocationManager
dan
FusedLocationProviderClient
untuk mendapatkan dan mengirimkan
lokasi perangkat. Wake lock diatribusikan ke aplikasi yang memanggil
API tersebut.
Rekomendasi
Mengoptimalkan penggunaan lokasi. Misalnya, tetapkan waktu tunggu, permintaan lokasi batch, atau gunakan update lokasi pasif.
_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, labeli kunci layar sebagai _UNKNOWN
. Misalnya, alat mungkin melakukannya jika nama
wake lock 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 wake lock bernama _UNKNOWN
yang diatribusikan ke aplikasi Anda, coba
identifikasi wake lock mana, dan beri nama yang berbeda.