Mengikuti praktik terbaik wake lock

Penggunaan penguncian layar saat aktif dapat menurunkan performa perangkat. Jika Anda perlu menggunakan kunci aktif, Anda harus melakukannya dengan benar. Dokumen ini membahas beberapa praktik terbaik yang dapat membantu Anda menghindari masalah umum terkait wake lock.

Beri nama penguncian layar saat aktif dengan benar

Sebaiknya sertakan nama paket, class, atau metode di tag penguncian layar saat aktif. Dengan demikian, jika terjadi error, akan lebih mudah untuk menemukan lokasi dalam kode sumber tempat kunci layar 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 log _UNKNOWN, 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 wake lock harus menggunakan tag yang sama setiap kali dijalankan. Praktik ini memungkinkan sistem menggabungkan penggunaan wake lock setiap metode.

Pastikan 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. Karena alasan ini, jika menggunakan penguncian layar saat aktif, Anda harus menampilkan beberapa notifikasi kepada pengguna. Dalam praktiknya, ini berarti Anda harus mendapatkan dan menahan wakelock 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 boleh menggunakan kunci layar aktif. Lihat dokumentasi Memilih API yang tepat untuk membuat 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 didiagnosis dan di-debug.

Pastikan kunci layar saat aktif selalu dilepaskan

Jika menggunakan penguncian layar saat aktif, Anda harus memastikan bahwa setiap penguncian layar saat aktif yang diperoleh 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 pernah mencapai panggilan release(). Akibatnya, wake lock diperoleh tetapi tidak dirilis, yang sangat buruk.

Dalam kode yang dikoreksi, doSomethingAndRelease() memastikan untuk melepaskan kunci layar 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();
    }
}