Android memiliki dua fitur hemat daya yang memperpanjang masa pakai baterai bagi pengguna dengan mengelola cara aplikasi berperilaku saat perangkat tidak terhubung ke sumber daya: Istirahatkan dan Aplikasi Standby. Istirahatkan mengurangi konsumsi baterai dengan menunda CPU latar belakang dan aktivitas jaringan untuk aplikasi saat perangkat tidak digunakan untuk jangka waktu lama. Aplikasi Standby menangguhkan aktivitas jaringan di latar belakang untuk aplikasi yang tidak memiliki aktivitas pengguna terbaru.
Saat perangkat dalam mode Istirahat, akses aplikasi ke resource intensif baterai tertentu akan ditunda hingga masa pemeliharaan. Pembatasan spesifik tercantum dalam Pembatasan pengelolaan daya.
Mode Istirahatkan dan Aplikasi Standby mengelola perilaku semua aplikasi yang berjalan di Android 6.0 atau yang lebih tinggi, terlepas dari apakah aplikasi tersebut secara khusus menargetkan API level 23 atau tidak. Untuk membantu memastikan pengalaman terbaik bagi pengguna, uji aplikasi Anda dalam mode Istirahatkan dan Aplikasi Siaga, lalu lakukan penyesuaian yang diperlukan pada kode Anda. Bagian berikut memberikan detailnya.
Memahami Mode Istirahatkan
Jika pengguna membiarkan perangkat tidak terhubung dan tidak bergerak selama jangka waktu tertentu, dengan layar mati, perangkat akan memasuki mode Istirahatkan. Dalam mode Istirahatkan, sistem mencoba menghemat baterai dengan membatasi akses aplikasi ke layanan jaringan dan intensif CPU. Mode ini juga mencegah aplikasi mengakses jaringan dan menunda tugas, sinkronisasi, dan alarm standar.
Secara berkala, sistem keluar dari mode Istirahatkan sesaat untuk memungkinkan aplikasi menyelesaikan aktivitas yang ditangguhkan. Selama masa pemeliharaan ini, sistem akan menjalankan semua sinkronisasi, tugas, serta alarm yang tertunda, dan memungkinkan aplikasi mengakses jaringan.
Saat masa pemeliharaan berakhir, sistem kembali memasuki mode Istirahatkan, menangguhkan akses jaringan dan menunda tugas, sinkronisasi, serta alarm. Seiring waktu, sistem menjadwalkan masa pemeliharaan lebih jarang, sehingga membantu mengurangi penggunaan baterai jika tidak aktif lebih lama ketika perangkat tidak sedang mengisi daya.
Jika pengguna mengaktifkan perangkat dengan memindahkannya, menyalakan layar, atau menghubungkan pengisi daya, sistem akan keluar dari mode Istirahatkan dan semua aplikasi melanjutkan aktivitas normal.
Pembatasan Mode Istirahatkan
Sistem menerapkan pembatasan berikut pada aplikasi Anda saat berada dalam mode Istirahatkan:
- Menangguhkan akses jaringan.
- Mengabaikan penguncian layar saat aktif.
- Menunda alarm
AlarmManager
standar, termasuksetExact()
dansetWindow()
, ke masa pemeliharaan berikutnya.- Jika Anda perlu menyetel alarm yang berbunyi saat dalam mode Istirahatkan, gunakan
setAndAllowWhileIdle()
atausetExactAndAllowWhileIdle()
. - Alarm yang disetel dengan
setAlarmClock()
akan terus berbunyi seperti biasa. Sistem keluar dari mode Istirahatkan sesaat sebelum alarm tersebut berbunyi.
- Jika Anda perlu menyetel alarm yang berbunyi saat dalam mode Istirahatkan, gunakan
- Tidak melakukan pemindaian Wi-Fi.
- Tidak mengizinkan adaptor sinkronisasi berjalan.
- Tidak mengizinkan
JobScheduler
berjalan.
Checklist mode Istirahatkan
- Jika memungkinkan, gunakan Firebase Cloud Messaging (FCM) untuk pesan downstream.
- Jika pengguna Anda perlu segera melihat notifikasi, gunakan pesan prioritas tinggi FCM. Hanya gunakan prioritas tinggi untuk pesan yang menghasilkan notifikasi. Untuk panduan lebih lanjut, baca dokumentasi FCM tentang prioritas pesan untuk Android.
- Sediakan informasi yang cukup dalam payload pesan awal sehingga akses jaringan berikutnya tidak diperlukan.
- Setel alarm penting dengan
setAndAllowWhileIdle()
dansetExactAndAllowWhileIdle()
. - Menguji aplikasi dalam mode Istirahatkan.
Menyesuaikan aplikasi Anda dengan mode Istirahatkan
Mode Istirahatkan dapat memengaruhi aplikasi secara berbeda, bergantung pada kemampuan yang ditawarkan dan layanan yang digunakan. Banyak aplikasi berfungsi secara normal di sepanjang siklus Istirahatkan tanpa modifikasi. Dalam beberapa kasus, Anda harus mengoptimalkan cara aplikasi mengelola jaringan, alarm, tugas, dan sinkronisasi. Aplikasi harus dapat mengelola aktivitas secara efisien selama masing-masing masa pemeliharaan.
Untuk membantu penjadwalan alarm, Anda dapat menggunakan dua metode
AlarmManager
: setAndAllowWhileIdle()
dan
setExactAndAllowWhileIdle()
. Dengan metode ini, Anda dapat menyetel alarm
yang menyala meskipun perangkat dalam mode Istirahatkan.
Pembatasan mode Istirahatkan pada akses jaringan juga kemungkinan akan memengaruhi aplikasi Anda, terutama jika aplikasi bergantung pada pesan real-time seperti tickle atau notifikasi. Jika aplikasi Anda memerlukan koneksi persisten ke jaringan untuk menerima pesan, gunakan Firebase Cloud Messaging (FCM) jika memungkinkan.
Untuk mengonfirmasi bahwa aplikasi berperilaku seperti yang diharapkan dengan mode Istirahatkan, Anda dapat menggunakan
perintah adb
untuk memaksa sistem masuk dan keluar dari mode Istirahatkan dan
mengamati perilaku aplikasi. Untuk mengetahui detailnya, lihat
Menguji dengan Mode Istirahatkan dan Aplikasi Standby.
Memahami Aplikasi Standby
Aplikasi Standby memungkinkan sistem menentukan apakah aplikasi tidak ada aktivitas saat pengguna tidak aktif menggunakannya. Sistem menentukan hal ini saat pengguna tidak menyentuh aplikasi selama jangka waktu tertentu dan tidak ada kondisi berikut yang berlaku:
- Pengguna secara eksplisit meluncurkan aplikasi.
- Aplikasi memiliki proses yang sedang berada di latar depan, baik sebagai aktivitas atau layanan latar depan, atau sedang digunakan oleh aktivitas atau layanan latar depan lain.
- Aplikasi menghasilkan notifikasi yang dilihat pengguna di layar kunci atau di baki notifikasi.
Saat pengguna mencolokkan perangkat ke catu daya, sistem akan melepaskan aplikasi dari status standby sehingga memungkinkan aplikasi dengan bebas mengakses jaringan serta menjalankan tugas dan sinkronisasi yang tertunda. Jika perangkat tidak ada aktivitas dalam jangka waktu yang lama, sistem memungkinkan akses jaringan aplikasi yang sedang tidak aktif dalam sehari.
Menggunakan FCM untuk berinteraksi dengan aplikasi Anda saat perangkat tidak ada aktivitas
Firebase Cloud Messaging (FCM) adalah layanan cloud-ke-perangkat yang dapat Anda gunakan untuk mendukung pengiriman pesan downstream real-time antara layanan backend dan aplikasi di perangkat Android. FCM menyediakan satu koneksi persisten ke cloud. Semua aplikasi yang memerlukan pesan real-time dapat membagikan koneksi ini. Koneksi bersama ini secara signifikan mengoptimalkan konsumsi baterai dengan membuatnya tidak diperlukan bagi beberapa aplikasi untuk mempertahankan koneksi persisten terpisah mereka sendiri, yang dapat menguras baterai secara cepat. Oleh karena itu, jika aplikasi Anda memerlukan integrasi pesan dengan layanan backend, sebaiknya gunakan FCM jika memungkinkan, daripada mempertahankan koneksi jaringan persisten Anda.
FCM dioptimalkan untuk berfungsi dengan mode tidak ada aktivitas dari Istirahatkan dan Aplikasi Standby. Dengan pesan prioritas tinggi FCM, Anda dapat mengaktifkan aplikasi untuk berinteraksi dengan pengguna. Dalam mode Istirahatkan atau Aplikasi Standby, sistem akan mengirimkan pesan dan memberi aplikasi akses sementara ke layanan jaringan dan penguncian layar saat aktif parsial, lalu mengembalikan perangkat atau aplikasi ke status tidak ada aktivitas. Untuk notifikasi yang mendesak dan terlihat oleh pengguna, pertimbangkan untuk menggunakan pesan prioritas tinggi guna mengaktifkan pengiriman dalam mode Istirahat. Pesan berprioritas tinggi dapat menghasilkan notifikasi. Lihat panduan FCM tentang pesan berprioritas tinggi untuk mengetahui informasi selengkapnya.
Untuk pesan yang tidak mengakibatkan notifikasi, misalnya memperbarui konten aplikasi di latar belakang atau memulai sinkronisasi data, gunakan pesan FCM prioritas normal. Pesan berprioritas normal segera dikirim jika perangkat tidak dalam mode Istirahatkan. Jika perangkat berada dalam mode Istirahat, perangkat akan dikirimkan selama masa pemeliharaan Istirahatkan secara berkala atau segera setelah pengguna membangunkan perangkat.
Sebagai praktik terbaik umum, jika aplikasi Anda memerlukan pengiriman pesan downstream, gunakan FCM. Jika aplikasi Anda sudah menggunakan FCM, pastikan aplikasi tersebut menggunakan pesan berprioritas tinggi hanya untuk pesan yang menghasilkan notifikasi yang ditampilkan kepada pengguna.
Dukungan untuk kasus penggunaan lainnya
Hampir semua aplikasi dapat mendukung fitur Istirahatkan dengan mengelola konektivitas jaringan, alarm, tugas, dan sinkronisasi, serta dengan menggunakan pesan FCM. Untuk sejumlah kecil kasus penggunaan, hal ini mungkin tidak cukup. Untuk kasus semacam itu, sistem menyediakan daftar aplikasi yang dapat dikonfigurasi yang sebagian dikecualikan dari pengoptimalan Istirahat dan Aplikasi Standby.
Aplikasi yang dikecualikan sebagian dapat menggunakan jaringan dan menahan penguncian layar saat aktif parsial selama mode Istirahatkan dan Aplikasi Standby. Namun, pembatasan lain masih berlaku
untuk aplikasi tersebut, seperti yang berlaku untuk aplikasi lain. Misalnya, tugas dan sinkronisasi aplikasi
ditangguhkan pada API level 23 dan yang lebih lama, dan alarm
AlarmManager
regulernya tidak berbunyi. Aplikasi dapat memeriksa apakah
saat ini berada di daftar pengecualian dengan memanggil
isIgnoringBatteryOptimizations()
.
Pengguna dapat secara manual mengonfigurasi daftar aplikasi yang dikecualikan di Settings > Battery > Battery Optimization. Atau, sistem menyediakan cara bagi aplikasi untuk meminta pengguna mengecualikannya:
- Sebagian besar aplikasi dapat memanggil intent yang berisi
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
. - Aplikasi yang memenuhi kasus penggunaan yang dapat diterima
dapat memanggil intent yang berisi
tindakan intent
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
untuk memungkinkan pengguna menambahkan aplikasi ke daftar pengecualian secara langsung, tanpa harus membuka setelan sistem.
Aplikasi dapat memeriksa apakah saat ini berada dalam daftar pengecualian dengan memanggil
isIgnoringBatteryOptimizations()
.
Menguji dengan fitur Istirahatkan dan Aplikasi Standby
Untuk membantu memastikan pengalaman yang luar biasa bagi pengguna, uji aplikasi Anda sepenuhnya dalam mode Istirahatkan dan Aplikasi Standby.
Menguji aplikasi dengan Istirahatkan
Anda dapat menguji mode Istirahatkan dengan melakukan hal berikut:
- Konfigurasikan hardware atau perangkat virtual dengan Android 6.0 (API level 23) atau image sistem yang lebih tinggi.
- Hubungkan perangkat ke mesin development lalu pasang aplikasi Anda.
- Jalankan aplikasi Anda dan biarkan aktif.
- Paksa sistem masuk ke mode tidak ada aktivitas dengan menjalankan perintah berikut:
$ adb shell dumpsys deviceidle force-idle
- Jika sudah siap, keluar dari mode tidak ada aktivitas dengan menjalankan perintah berikut:
$ adb shell dumpsys deviceidle unforce
- Aktifkan kembali perangkat dengan melakukan perintah berikut:
$ adb shell dumpsys battery reset
- Perhatikan perilaku aplikasi Anda setelah mengaktifkan kembali perangkat. Pastikan aplikasi pulih dengan baik saat perangkat keluar dari mode Istirahatkan.
Menguji aplikasi dengan Aplikasi Standby
Untuk menguji mode Aplikasi Standby dengan aplikasi Anda, lakukan hal berikut:
- Konfigurasikan hardware atau perangkat virtual dengan Android 6.0 (API level 23) atau image sistem yang lebih tinggi.
- Hubungkan perangkat ke mesin development lalu pasang aplikasi Anda.
- Jalankan aplikasi Anda dan biarkan aktif.
- Paksa aplikasi ke mode Aplikasi Standby dengan menjalankan perintah berikut:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- Simulasikan pengaktifan aplikasi menggunakan perintah berikut:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- Perhatikan perilaku aplikasi Anda setelah mengaktifkannya. Pastikan aplikasi pulih dengan baik dari mode standby. Secara khusus, periksa apakah notifikasi aplikasi dan tugas latar belakang berfungsi seperti yang diharapkan.
Kasus penggunaan yang dapat diterima untuk pengecualian
Tabel berikut menyoroti beberapa kasus penggunaan dan apakah aplikasi dapat
menggunakan tindakan intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
dalam situasi ini. Secara umum, aplikasi Anda tidak memenuhi pengecualian ini, kecuali jika fitur Istirahatkan atau Aplikasi Standby memutus fungsi inti aplikasi atau ada alasan teknis mengapa aplikasi Anda tidak dapat menggunakan pesan berprioritas tinggi FCM.
Untuk mengetahui informasi selengkapnya, lihat Dukungan untuk kasus penggunaan lainnya.
Jenis | Kasus penggunaan | Bisa menggunakan FCM? | Pengecualian dapat diterima? | Catatan |
---|---|---|---|---|
Instant messaging, chat, atau aplikasi telepon. | Memerlukan pengiriman pesan real-time ke pengguna saat perangkat berada dalam mode Istirahatkan atau aplikasi dalam mode Aplikasi Standby. | Ya, menggunakan FCM | Tidak bisa | Gunakan pesan prioritas tinggi FCM untuk mengaktifkan aplikasi dan mengakses jaringan. |
Ya, tetapi tidak menggunakan pesan prioritas tinggi FCM. | ||||
Instant messaging, chat, atau aplikasi panggilan; aplikasi VOIP perusahaan. | Tidak, tidak dapat menggunakan FCM karena ketergantungan teknis pada layanan pesan lain, atau fitur Istirahatkan dan Aplikasi Standby merusak fungsi inti aplikasi. | Dapat diterima | ||
Aplikasi Keselamatan. | Aplikasi yang menjaga keamanan pengguna dan keluarganya. | Jika berlaku. | Dapat diterima | |
Aplikasi otomatisasi tugas. | Fungsi inti aplikasi menjadwalkan tindakan otomatis, seperti untuk instant messaging, panggilan suara, atau pengelolaan foto baru. | Jika berlaku. | Dapat diterima | |
Aplikasi pendamping perangkat periferal. | Fungsi inti aplikasi adalah mempertahankan koneksi persisten dengan perangkat periferal untuk tujuan menyediakan akses internet perangkat periferal. | Jika berlaku. | Dapat diterima | |
Aplikasi hanya perlu terhubung ke perangkat periferal secara berkala untuk menyinkronkan, atau hanya perlu terhubung ke perangkat, seperti headphone nirkabel, yang terhubung melalui profil Bluetooth standar. | Jika berlaku. | Tidak bisa |