Menggunakan penguncian layar saat aktif dapat mengganggu performa perangkat. Jika Anda perlu menggunakan penguncian layar saat aktif, penting untuk melakukannya dengan benar. Dokumen ini membahas beberapa praktik terbaik yang dapat membantu Anda menghindari kesalahan umum terkait penguncian layar saat aktif.
Beri nama penguncian layar saat aktif dengan benar
Sebaiknya sertakan nama paket, class, atau metode di tag penguncian layar saat aktif. Dengan begitu, jika terjadi error, akan lebih mudah untuk menemukan lokasi dalam kode sumber tempat penguncian layar saat aktif dibuat. Berikut ini beberapa tips tambahan:
- Kosongkan informasi identitas pribadi (PII) dalam nama,
seperti alamat email. Jika perangkat mendeteksi PII dalam tag penguncian layar saat aktif,
perangkat akan mencatat
_UNKNOWNke dalam log, bukan tag yang Anda tentukan. - Jangan mendapatkan nama class atau metode secara terprogram, misalnya dengan
memanggil
getName(). Jika Anda mencoba mendapatkan nama secara terprogram, nama tersebut mungkin akan di-obfuscate oleh alat seperti Proguard. Sebaiknya gunakan string hard code. - Jangan menambahkan penghitung atau ID unik ke tag penguncian layar saat aktif. Kode yang membuat penguncian layar saat aktif harus menggunakan tag yang sama setiap kali dijalankan. Praktik ini memungkinkan sistem menggabungkan penggunaan penguncian layar saat aktif untuk setiap metode.
Memastikan aplikasi Anda terlihat di latar depan
Saat penguncian layar saat aktif aktif, perangkat akan menggunakan daya. Pengguna perangkat harus mengetahui bahwa hal ini sedang terjadi. Oleh karena itu, jika Anda menggunakan penguncian layar saat aktif, Anda harus menampilkan beberapa notifikasi kepada pengguna. Dalam praktiknya, ini berarti Anda harus mendapatkan dan mempertahankan penguncian layar saat aktif di layanan latar depan. Layanan latar depan diperlukan untuk menampilkan notifikasi.
Jika layanan latar depan bukan pilihan yang tepat untuk aplikasi Anda, Anda mungkin juga tidak perlu menggunakan penguncian layar saat aktif. Lihat dokumentasi Memilih API yang tepat untuk menjaga perangkat tetap aktif untuk mengetahui cara lain melakukan pekerjaan saat aplikasi Anda tidak berada di latar depan.
Buat logika tetap sederhana
Pastikan logika untuk mendapatkan dan melepaskan penguncian layar saat aktif sesederhana mungkin. Saat logika penguncian layar saat aktif dikaitkan ke mesin yang berstatus kompleks, waktu tunggu, gabungan eksekusi, atau peristiwa callback, bug halus dalam logika tersebut dapat menyebabkan penguncian layar saat aktif ditahan lebih lama daripada yang diharapkan. Bug ini sulit untuk didiagnosis dan didebug.
Memastikan penguncian layar saat aktif selalu dilepaskan
Jika menggunakan penguncian layar saat aktif, Anda harus memastikan bahwa setiap penguncian layar saat aktif yang Anda peroleh dilepaskan dengan benar. Hal ini tidak selalu semudah kedengarannya. Misalnya, kode berikut memiliki masalah:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
acquire()
doTheWork() // can potentially throw MyException
release() // does not run if an exception is thrown
}
}
Java
void doSomethingAndRelease() throws MyException {
wakeLock.acquire();
doTheWork(); // can potentially throw MyException
wakeLock.release(); // does not run if an exception is thrown
}
Masalahnya di sini adalah metode doTheWork() dapat menampilkan pengecualian
MyException. Jika ya, metode doSomethingAndRelease() akan menyebarkan
pengecualian ke luar, dan tidak akan pernah mencapai panggilan release(). Hasilnya,
penguncian layar saat aktif diperoleh, tetapi tidak dilepaskan, yang sangat buruk.
Dalam kode yang diperbaiki, doSomethingAndRelease() memastikan untuk melepaskan
penguncian layar saat aktif meskipun pengecualian ditampilkan:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
try {
acquire()
doTheWork()
} finally {
release()
}
}
}
Java
void doSomethingAndRelease() throws MyException {
try {
wakeLock.acquire();
doTheWork();
} finally {
wakeLock.release();
}
}