Agar baterai tidak habis, perangkat Android yang tidak ada aktivitas akan segera jatuh tertidur. Namun, ada kalanya aplikasi perlu mengaktifkan layar atau CPU dan menjaganya tetap aktif untuk menyelesaikan beberapa pekerjaan.
Pendekatan yang Anda ambil bergantung pada kebutuhan aplikasi. Namun, aturan umum praktisnya adalah Anda harus menggunakan pendekatan yang paling ringan untuk untuk meminimalkan dampak aplikasi terhadap resource sistem. Bagian berikut menjelaskan cara menangani kasus saat perilaku tidur default perangkat sehingga tidak kompatibel dengan persyaratan aplikasi Anda.
Cara alternatif untuk menggunakan fitur penguncian layar saat aktif
Sebelum menambahkan dukungan penguncian layar saat aktif ke aplikasi, pertimbangkan apakah penggunaan aplikasi yang sesuai mendukung salah satu solusi alternatif berikut:
Jika aplikasi Anda menjalankan download HTTP yang berjalan lama, pertimbangkan untuk menggunakan
DownloadManager
Jika aplikasi Anda menyinkronkan data dari server eksternal, pertimbangkan untuk membuat adaptor sinkronisasi.
Jika aplikasi Anda mengandalkan layanan latar belakang, sebaiknya gunakan JobScheduler atau Firebase Cloud Messaging untuk memicu layanan ini pada interval tertentu.
Jika perlu tetap menjalankan aplikasi pendamping setiap kali perangkat pendamping dalam jangkauan, gunakan Pengelola Perangkat Pendamping.
Menjaga layar agar tetap aktif
Aplikasi tertentu harus menjaga layar agar tetap aktif, seperti aplikasi film atau game. Tujuan
cara terbaik untuk melakukannya adalah dengan menggunakan
FLAG_KEEP_SCREEN_ON
dalam aktivitas Anda (dan hanya dalam aktivitas, tidak pernah dalam layanan atau aplikasi lain
). Contoh:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
Keuntungan pendekatan ini adalah tidak seperti penguncian layar saat aktif (dibahas di Menjaga CPU Aktif), tanpa memerlukan izin khusus, dan platform dengan benar mengelola pengguna yang berpindah antar-aplikasi, tanpa memerlukan aplikasi Anda perlu khawatir melepaskan sumber daya yang tidak digunakan.
Cara lain untuk mengimplementasikannya adalah di file XML tata letak aplikasi Anda, dengan menggunakan
atribut android:keepScreenOn
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Menggunakan android:keepScreenOn="true"
sama dengan menggunakan
FLAG_KEEP_SCREEN_ON
.
Anda dapat menggunakan pendekatan mana pun yang terbaik untuk aplikasi Anda. Keuntungan menetapkan
penanda secara terprogram dalam aktivitas Anda adalah memberi opsi untuk
menghapus penanda secara terprogram sehingga
kemudian memungkinkan layar untuk berganti
nonaktif.
Mode Standby untuk TV
Di TV,
FLAG_KEEP_SCREEN_ON
harus digunakan untuk mencegah
perangkat masuk ke dalam
Mode Standby
selama pemutaran video aktif. Jika FLAG_KEEP_SCREEN_ON
tidak ditetapkan
oleh aktivitas latar depan, perangkat akan otomatis memasuki Mode Standby
setelah tidak aktif selama beberapa waktu.
Menjaga CPU agar tetap aktif
Jika Anda perlu menjaga CPU tetap berjalan
untuk menyelesaikan beberapa pekerjaan sebelum
perangkat beralih ke mode tidur, Anda dapat menggunakan
Fitur layanan sistem PowerManager
yang disebut penguncian layar saat aktif. Penguncian layar saat aktif memungkinkan aplikasi mengontrol status daya
dari perangkat host.
Membuat dan menahan penguncian layar saat aktif dapat berdampak besar pada fungsi perangkat host
daya tahan baterai. Karena itu, sebaiknya gunakan penguncian layar saat aktif hanya jika benar-benar diperlukan dan
tahan mereka untuk waktu yang sesingkat mungkin. Misalnya, Anda tidak perlu
menggunakan penguncian layar saat aktif dalam aktivitas. Seperti yang dijelaskan di atas, jika Anda ingin mempertahankan
aktif di aktivitas Anda, gunakan
FLAG_KEEP_SCREEN_ON
Salah satu kasus yang sah untuk menggunakan penguncian layar saat aktif adalah layanan latar belakang yang perlu mengambil penguncian layar saat aktif untuk menjaga CPU tetap berjalan agar dapat melakukan pekerjaan saat layar nonaktif. Sekali lagi, praktik ini harus diminimalkan karena dampaknya pada daya tahan baterai.
Untuk menggunakan penguncian layar saat aktif, langkah pertama adalah menambahkan
WAKE_LOCK
untuk
file manifes aplikasi Anda:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Jika aplikasi Anda menyertakan penerima siaran yang menggunakan layanan untuk melakukan beberapa pekerjaan, berikut adalah cara Anda mengatur penguncian layar saat aktif secara langsung:
Kotlin
val wakeLock: PowerManager.WakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply { acquire() } }
Java
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag"); wakeLock.acquire();
Untuk melepaskan penguncian layar saat aktif, panggil
wakelock.release()
Ini melepaskan klaim
Anda terhadap CPU. Penting untuk melepaskan
penguncian layar saat aktif karena
segera setelah aplikasi Anda selesai menggunakannya untuk menghindari kehabisan baterai.