Mulai dari Android 6.0 (API level 23), Android memperkenalkan dua fitur penghematan daya yang memperpanjang masa pakai baterai untuk pengguna dengan mengelola cara aplikasi berperilaku saat perangkat tidak terhubung ke sumber listrik. Mode Istirahatkan dapat mengurangi penggunaan baterai dengan menunda CPU dan aktivitas jaringan di latar belakang untuk aplikasi ketika perangkat tidak digunakan dalam waktu yang lama. Mode Aplikasi Standby menangguhkan aktivitas jaringan di latar belakang untuk aplikasi yang akhir-akhir ini tidak berinteraksi dengan pengguna.
Saat perangkat dalam mode Istirahatkan, akses aplikasi ke resource intensif baterai tertentu 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 lebih tinggi, terlepas apakah program tersebut secara spesifik menargetkan API level 23 atau tidak. Untuk memastikan pengalaman terbaik bagi pengguna, uji aplikasi Anda dalam mode Istirahatkan dan Aplikasi Standby, lalu lakukan semua penyesuaian yang diperlukan untuk kode Anda. Bagian di bawah ini berisi detail.
Memahami Mode Istirahatkan
Jika pengguna membiarkan perangkat tidak terhubung dan diam selama periode waktu tertentu, dengan layar mati, perangkat akan masuk ke mode Istirahatkan. Dalam mode Istirahatkan, sistem berusaha menghemat baterai dengan membatasi akses aplikasi ke layanan intensif jaringan dan CPU. Mode ini juga mencegah aplikasi mengakses jaringan dan menunda tugas, sinkronisasi, dan alarm standar.
Secara berkala, sistem keluar dari mode Istirahatkan sesaat untuk membiarkan aplikasi menyelesaikan aktivitas yang ditangguhkan. Selama masa pemeliharaan ini, sistem akan menjalankan semua sinkronisasi, tugas, serta alarm yang tertunda dan memungkinkan aplikasi mengakses jaringan.

Gambar 1. Mode Istirahatkan menyediakan masa pemeliharaan berulang bagi aplikasi untuk menggunakan jaringan dan menangani aktivitas yang tertunda.
Pada akhir setiap masa pemeliharaan, sistem kembali masuk ke mode Istirahatkan, menangguhkan akses jaringan, lalu menunda tugas, sinkronisasi, dan alarm. Seiring waktu, sistem menjadwalkan masa pemeliharaan lebih jarang sehingga membantu mengurangi penggunaan baterai jika tidak aktif selama waktu yang lebih panjang ketika perangkat tidak terhubung ke pengisi daya.
Begitu pengguna mengaktifkan perangkat dengan memindahkannya, menyalakan layar, atau menghubungkan ke pengisi daya, sistem akan keluar dari mode Istirahatkan dan semua aplikasi kembali ke aktivitas normal.
Pembatasan Mode Istirahatkan
Pembatasan berikut berlaku untuk aplikasi ketika berada dalam mode Istirahatkan:
- Akses jaringan ditangguhkan.
- Sistem mengabaikan penguncian layar saat aktif.
- Alarm
AlarmManager
standar (termasuksetExact()
dansetWindow()
) ditangguhkan 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 secara normal, dan sistem akan keluar dari mode Istirahatkan sesaat sebelum alarm tersebut berbunyi.
- Jika Anda perlu menyetel alarm yang berbunyi saat dalam mode Istirahatkan, gunakan
- Sistem tidak melakukan pemindaian Wi-Fi.
- Sistem tidak mengizinkan adaptor sinkronisasi berjalan.
- Sistem tidak mengizinkan
JobScheduler
berjalan.
Checklist mode Istirahatkan
- Jika memungkinkan, gunakan FCM untuk messaging downstream.
- Jika pengguna Anda perlu segera melihat notifikasi, pastikan untuk menggunakan pesan prioritas tinggi FCM.
- Sediakan informasi yang cukup dalam payload pesan awal sehingga akses jaringan berikutnya tidak diperlukan.
- Setel alarm penting dengan
setAndAllowWhileIdle()
dansetExactAndAllowWhileIdle()
. - Uji aplikasi Anda dalam mode Istirahatkan.
Menyesuaikan aplikasi Anda dengan mode Istirahatkan
Mode Istirahatkan dapat memengaruhi aplikasi secara berbeda, bergantung kapabilitas yang ditawarkan dan layanan yang mereka gunakan. 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 bisa mengelola aktivitas secara efisien selama masing-masing masa pemeliharaan.
Mode Istirahatkan secara khusus cenderung memengaruhi aktivitas yang dikelola alarm AlarmManager
dan timer, karena alarm di Android 5.1 (API level 22) atau lebih rendah tidak akan berbunyi saat sistem berada dalam mode Istirahatkan.
Untuk membantu penjadwalan alarm, Android 6.0 (API level 23) memperkenalkan dua metode AlarmManager
baru: setAndAllowWhileIdle()
dan setExactAndAllowWhileIdle()
. Dengan metode ini, Anda dapat menyetel alarm yang akan berbunyi meskipun perangkat berada dalam mode Istirahatkan.
Catatan: setAndAllowWhileIdle()
atau setExactAndAllowWhileIdle()
tidak dapat membunyikan alarm lebih dari sekali setiap 9 menit, per aplikasi.
Pembatasan mode Istirahatkan pada akses jaringan juga cenderung memengaruhi aplikasi Anda, khususnya jika aplikasi bergantung pada pesan real-time seperti tickle (pesan tanpa payload) atau notifikasi. Jika aplikasi Anda memerlukan koneksi persisten ke jaringan untuk menerima pesan, Anda harus menggunakan Firebase Cloud Messaging (FCM) jika memungkinkan.
Untuk mengonfirmasi bahwa aplikasi Anda berperilaku seperti yang diharapkan dengan mode Istirahatkan, Anda dapat menggunakan perintah adb untuk memaksa sistem agar masuk dan keluar dari mode Istirahatkan serta mengamati perilaku aplikasi. Untuk detailnya, lihat Menguji dengan mode Istirahatkan dan Aplikasi Standby.
Memahami Mode Aplikasi Standby
Mode Aplikasi Standby memungkinkan sistem menentukan apakah aplikasi dalam status nonaktif ketika pengguna tidak menggunakannya secara aktif. Sistem membuat penentuan ini jika pengguna tidak menyentuh aplikasi selama waktu tertentu dan tidak ada satu pun syarat berikut yang berlaku:
- Pengguna secara eksplisit meluncurkan aplikasi.
- Aplikasi memiliki proses yang sedang berlangsung di latar depan (baik sebagai aktivitas atau layanan latar depan, atau sedang digunakan oleh aktivitas atau layanan latar depan lain).
Catatan: Sebaiknya Anda hanya menggunakan satu layanan latar depan untuk tugas-tugas yang pengguna harapkan akan dijalankan langsung atau tanpa gangguan oleh sistem. Yang termasuk dalam kasus ini adalah mengupload foto ke media sosial, atau memutar musik, meskipun aplikasi pemutar musik tidak berada di latar depan. Anda tidak boleh memulai layanan latar depan hanya untuk mencegah sistem menentukan bahwa aplikasi Anda nonaktif.
- Aplikasi menghasilkan notifikasi yang dilihat pengguna di layar kunci atau di tray notifikasi.
- Aplikasi ini adalah aplikasi admin perangkat aktif (misalnya pengontrol kebijakan perangkat). Meskipun umumnya berjalan di latar belakang, aplikasi admin perangkat tidak pernah masuk ke mode Aplikasi Standby karena harus tetap tersedia untuk menerima kebijakan dari server kapan pun.
Jika pengguna menghubungkan perangkat ke suplai daya, sistem akan mengeluarkan aplikasi dari status standby sehingga memungkinkannya untuk bebas mengakses jaringan serta menjalankan tugas dan sinkronisasi yang tertunda. Jika perangkat nonaktif dalam jangka waktu lama, sistem akan memungkinkan akses jaringan aplikasi nonaktif sekitar satu kali dalam sehari.
Menggunakan FCM untuk berinteraksi dengan aplikasi Anda saat perangkat tidak digunakan
Firebase Cloud Messaging (FCM) merupakan layanan cloud-ke-perangkat yang memungkinkan Anda mendukung messaging downstream real-time antara layanan backend dan aplikasi di perangkat Android. FCM menyediakan satu koneksi persisten ke cloud; semua aplikasi yang memerlukan messaging real-time dapat membagikan koneksi ini. Koneksi bersama ini mengoptimalkan penggunaan baterai secara signifikan dengan menjadikannya tidak diperlukan untuk beberapa aplikasi dalam mempertahankan koneksi persisten terpisah mereka sendiri, yang dapat mengurangi daya baterai secara cepat. Untuk alasan ini, jika aplikasi Anda memerlukan integrasi messaging dengan layanan backend, kami sangat merekomendasikan agar Anda menggunakan FCM jika memungkinkan, daripada mempertahankan koneksi jaringan persisten Anda.
FCM dioptimalkan untuk berfungsi dengan mode nonaktif Istirahatkan dan Aplikasi Standby melalui pesan FCM prioritas tinggi. Pesan prioritas tinggi FCM memungkinkan Anda mengaktifkan aplikasi secara andal untuk mengakses jaringan, meskipun perangkat pengguna berada dalam mode Istirahatkan atau aplikasinya dalam mode Aplikasi Standby. Dalam mode Istirahatkan dan Aplikasi Standby, sistem mengirim pesan dan memberi aplikasi akses sementara ke layanan jaringan dan penguncian layar saat aktif sebagian, lalu mengembalikan perangkat atau aplikasi ke status nonaktif.
Pesan FCM prioritas tinggi tidak memengaruhi mode Istirahatkan, dan pesan tersebut tidak memengaruhi status aplikasi lainnya. Ini berarti bahwa aplikasi Anda dapat menggunakannya untuk berkomunikasi secara efisien sembari meminimalkan dampak baterai di seluruh sistem dan perangkat.
Sebagai praktik terbaik umum, jika aplikasi Anda membutuhkan messaging downstream, aplikasi harus menggunakan FCM. Jika server dan klien Anda telah menggunakan FCM, pastikan layanan menggunakan pesan prioritas tinggi untuk pesan penting, karena tindakan ini sudah pasti mengaktifkan aplikasi meskipun perangkat berada dalam mode Istirahatkan.
Dukungan untuk kasus penggunaan lainnya
Hampir semua aplikasi bisa mendukung mode Istirahatkan dengan mengelola konektivitas jaringan, alarm, tugas, dan sinkronisasi dengan benar, serta dengan menggunakan pesan prioritas tinggi FCM. Untuk sejumlah kecil kasus penggunaan, hal tersebut mungkin tidak mencukupi. Untuk kasus semacam itu, sistem menyediakan pemberian akses aplikasi dapat dikonfigurasi yang sebagian dikecualikan dari pengoptimalan mode Istirahatkan dan Aplikasi Standby.
Aplikasi yang diberi akses dapat menggunakan jaringan dan menahan penguncian layar saat aktif parsial selama mode Istirahatkan dan Aplikasi Standby. Namun, pembatasan lainnya masih berlaku untuk aplikasi yang diberi akses, seperti halnya berlaku untuk aplikasi lain. Misalnya, tugas dan sinkronisasi aplikasi yang diberi akses akan ditangguhkan (di API level 23 ke bawah), dan alarm AlarmManager
regulernya tidak berbunyi. Aplikasi dapat memeriksa apakah saat ini berada dalam pengecualian pemberian akses dengan memanggil isIgnoringBatteryOptimizations()
.
Pengguna dapat mengonfigurasi pemberian akses secara manual diSettings > Battery > Battery Optimization. Selain itu, sistem juga menyediakan cara bagi aplikasi untuk meminta pengguna memberi akses.
- Aplikasi dapat mengaktifkan intent
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
untuk membawa pengguna langsung ke Battery Optimization agar mereka dapat menambahkan aplikasi. - Aplikasi yang memiliki izin
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
dapat memicu dialog sistem yang memungkinkan pengguna menambahkan aplikasi ke pemberian akses secara langsung, tanpa membuka setelan. Aplikasi tersebut mengaktifkan IntentACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
untuk memicu dialog. - Pengguna dapat menghapus aplikasi secara manual dari pemberian akses sesuai kebutuhan.
Sebelum meminta pengguna untuk menambahkan aplikasi ke daftar pemberian akses, pastikan aplikasi sesuai dengan kasus penggunaan yang dapat diterima untuk pemberian akses.
Catatan: Kebijakan Google Play melarang aplikasi meminta pengecualian langsung dari fitur Pengelolaan Daya di Android 6.0+ (Istirahatkan dan Aplikasi Standby) kecuali berpengaruh negatif terhadap fungsi inti aplikasi.
Menguji dengan mode Istirahatkan dan Aplikasi Standby
Untuk memastikan pengalaman yang baik bagi pengguna, Anda harus menguji aplikasi sepenuhnya dalam mode Istirahatkan dan Aplikasi Standby.
Menguji aplikasi dengan mode Istirahatkan
Anda bisa menguji mode Istirahatkan dengan langkah-langkah 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 instal aplikasi Anda.
- Jalankan aplikasi dan biarkan aktif.
- Paksa sistem masuk ke mode nonaktif dengan menjalankan perintah berikut:
$ adb shell dumpsys deviceidle force-idle
- Jika sudah siap, keluar dari mode nonaktif 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 dipulihkan dengan baik saat perangkat keluar dari mode Istirahatkan.
Menguji aplikasi dengan mode Aplikasi Standby
Untuk menguji mode Aplikasi Standby dengan aplikasi Anda:
- Konfigurasikan hardware atau perangkat virtual dengan Android 6.0 (API level 23) atau image sistem yang lebih tinggi.
- Hubungkan perangkat ke mesin development, lalu instal aplikasi Anda.
- Jalankan aplikasi 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 dipulihkan dengan baik dari mode standby. Secara khusus, Anda harus memeriksa apakah Notifikasi dan tugas latar belakang aplikasi tetap berjalan sebagaimana yang diharapkan.
Kasus penggunaan yang dapat diterima untuk pemberian akses
Tabel berikut memperjelas kasus penggunaan yang dapat diterima untuk meminta atau berada dalam pengecualian pemberian akses demi Pengoptimalan Baterai. Secara umum, aplikasi Anda tidak boleh berada dalam daftar pemberian akses kecuali jika mode Istirahatkan atau Aplikasi Standby memutus fungsi inti aplikasi atau ada alasan teknis mengapa aplikasi Anda tidak dapat menggunakan pesan prioritas tinggi FCM.
Untuk informasi selengkapnya, lihat Dukungan untuk kasus penggunaan lainnya.
Jenis | Kasus penggunaan | Bisa menggunakan FCM? | Bisa diberi akses? | Catatan |
---|---|---|---|---|
Instant messaging, chat, atau aplikasi telepon. | Memerlukan pengiriman pesan real-time ke pengguna saat perangkat berada dalam mode Istirahatkan atau Aplikasi Standby. | Ya, menggunakan FCM | Tidak bisa | Harus menggunakan pesan prioritas tinggi FCM untuk mengaktifkan aplikasi dan mengakses jaringan. |
Ya, tetapi tidak menggunakan pesan prioritas tinggi FCM. | ||||
Instant messaging, chat, atau aplikasi telepon; aplikasi VOIP perusahaan. | Tidak, tidak bisa menggunakan FCM karena ketergantungan teknis pada layanan messaging lainnya atau mode Istirahatkan dan Aplikasi Standby memutus fungsi inti aplikasi. | Bisa | ||
Aplikasi automasi tugas | Fungsi inti aplikasi menjadwalkan tindakan otomatis, seperti untuk instant messaging, panggilan suara, atau pengelolaan foto baru. | Jika berlaku. | Bisa | |
Aplikasi pendamping perangkat periferal | Fungsi inti aplikasi adalah mempertahankan koneksi persisten dengan perangkat periferal untuk menyediakan akses internet perangkat periferal. | Jika berlaku. | Bisa | |
Aplikasi hanya perlu terhubung ke perangkat periferal secara berkala untuk sinkronisasi, atau hanya perlu menghubungkan perangkat, misalnya headphone nirkabel, yang terhubung via profil Bluetooth. | Jika berlaku. | Tidak bisa |