Mengoptimalkan aplikasi untuk mode Istirahatkan dan Aplikasi Standby

Android memiliki dua fitur penghematan daya yang memperpanjang masa pakai baterai untuk pengguna dengan mengelola cara aplikasi berperilaku saat perangkat tidak terhubung ke sumber daya: Istirahatkan dan Aplikasi Standby. Istirahatkan mengurangi konsumsi baterai dengan menunda aktivitas CPU dan jaringan latar belakang untuk aplikasi saat perangkat tidak digunakan dalam jangka waktu yang lama. Mode Aplikasi Standby menangguhkan aktivitas jaringan latar belakang untuk aplikasi yang tidak memiliki aktivitas pengguna terbaru.

Saat perangkat dalam mode Istirahat, 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 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 semua penyesuaian yang diperlukan untuk kode Anda. Bagian berikut memberikan detail.

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 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 agar aplikasi dapat menggunakan jaringan dan menangani aktivitas yang tertunda.

Setelah masa pemeliharaan berakhir, sistem kembali akan memasuki Istirahatkan, menangguhkan akses jaringan dan menunda tugas, sinkronisasi, dan alarm. Seiring waktu, sistem menjadwalkan masa pemeliharaan lebih jarang, sehingga membantu mengurangi konsumsi baterai jika tidak aktif lebih lama saat perangkat tidak mengisi daya.

Saat pengguna membangunkan perangkat dengan memindahkannya, mengaktifkan layar, atau menghubungkan pengisi daya, sistem akan keluar dari mode Istirahatkan dan semua aplikasi melanjutkan aktivitas normal.

Pembatasan Mode Istirahatkan

Sistem menerapkan pembatasan berikut untuk aplikasi Anda saat berada dalam Istirahatkan:

Checklist 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 setiap masa pemeliharaan.

Untuk membantu menjadwalkan alarm, Anda dapat menggunakan dua metode AlarmManager: setAndAllowWhileIdle() dan setExactAndAllowWhileIdle(). Dengan metode ini, Anda bisa 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 fitur 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 sedang tidak ada aktivitas ketika pengguna tidak aktif menggunakannya. Sistem menentukan hal ini jika pengguna tidak menyentuh aplikasi selama jangka waktu tertentu dan tidak satu pun kondisi 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.
  • Aplikasi menghasilkan notifikasi yang dilihat pengguna di layar kunci atau di baki notifikasi.

Saat pengguna mencolokkan perangkat ke catu daya, sistem akan merilis aplikasi dari status standby, sehingga memungkinkannya untuk bebas mengakses jaringan dan menjalankan tugas dan sinkronisasi yang tertunda. Jika perangkat tidak ada aktivitas dalam jangka waktu yang lama, sistem akan mengizinkan akses jaringan aplikasi yang tidak ada aktivitas sekitar sekali sehari.

Menggunakan FCM untuk berinteraksi dengan aplikasi Anda saat perangkat tidak digunakan

Firebase Cloud Messaging (FCM) adalah layanan cloud-ke-perangkat yang memungkinkan Anda mendukung 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 mengoptimalkan penggunaan baterai secara signifikan dengan menjadikannya tidak diperlukan untuk beberapa aplikasi dalam mempertahankan koneksi persisten terpisah mereka sendiri, yang dapat menguras baterai dengan cepat. Oleh karena itu, jika aplikasi Anda memerlukan integrasi pesan dengan layanan backend, sebaiknya gunakan FCM jika memungkinkan, daripada mempertahankan koneksi jaringan persisten Anda sendiri.

FCM dioptimalkan untuk berfungsi dengan mode nonaktif Istirahatkan dan Aplikasi Standby. Pesan FCM prioritas tinggi memungkinkan Anda mengaktifkan aplikasi untuk berinteraksi dengan pengguna. Dalam mode Istirahatkan atau 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. Untuk notifikasi yang terlihat oleh pengguna dan mendesak, pertimbangkan untuk menggunakan pesan prioritas tinggi guna mengaktifkan pengiriman dalam mode Istirahatkan. Pesan prioritas tinggi dapat menghasilkan notifikasi. Lihat panduan FCM tentang pesan berprioritas tinggi untuk mengetahui informasi selengkapnya.

Untuk pesan yang tidak menghasilkan notifikasi, seperti menjaga konten aplikasi selalu terbaru di latar belakang atau memulai sinkronisasi data, gunakan pesan FCM prioritas normal. Pesan berprioritas normal segera dikirim jika perangkat tidak dalam mode Istirahat. Jika perangkat dalam mode Istirahat, notifikasi akan dikirim selama periode pemeliharaan Istirahat berkala atau segera setelah pengguna mengaktifkan 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 mode Istirahatkan dengan mengelola konektivitas jaringan, alarm, tugas, dan sinkronisasi, serta dengan menggunakan pesan FCM. Untuk sejumlah kecil kasus penggunaan, data ini mungkin tidak cukup. Untuk kasus semacam itu, sistem menyediakan daftar aplikasi yang dapat dikonfigurasi yang sebagian dikecualikan dari pengoptimalan Istirahatkan 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 tetap berlaku untuk aplikasi, 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 dalam daftar pengecualian dengan memanggil isIgnoringBatteryOptimizations().

Pengguna dapat mengonfigurasi daftar aplikasi yang dikecualikan secara manual di Settings > Battery > Battery Optimization. Atau, sistem menyediakan cara bagi aplikasi untuk meminta pengguna mengecualikannya:

Aplikasi dapat memeriksa apakah saat ini ada dalam daftar pengecualian dengan memanggil isIgnoringBatteryOptimizations().

Menguji dengan Istirahatkan dan Aplikasi Standby

Untuk membantu memastikan pengalaman yang baik 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:

  1. Konfigurasikan hardware atau perangkat virtual dengan Android 6.0 (API level 23) atau image sistem yang lebih tinggi.
  2. Hubungkan perangkat ke mesin development lalu pasang aplikasi Anda.
  3. Jalankan aplikasi Anda dan biarkan aktif.
  4. Paksa sistem masuk ke mode nonaktif dengan menjalankan perintah berikut:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Jika sudah siap, keluar dari mode nonaktif dengan menjalankan perintah berikut:
        $ adb shell dumpsys deviceidle unforce
        
  6. Aktifkan kembali perangkat dengan menjalankan perintah berikut:
        $ adb shell dumpsys battery reset
        
  7. 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:

  1. Konfigurasikan perangkat keras atau perangkat virtual dengan Android 6.0 (API level 23) atau image sistem yang lebih tinggi.
  2. Hubungkan perangkat ke mesin development lalu pasang aplikasi Anda.
  3. Jalankan aplikasi Anda dan biarkan aktif.
  4. Paksa aplikasi ke mode Aplikasi Standby dengan menjalankan perintah berikut:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Simulasikan pengaktifan aplikasi menggunakan perintah berikut:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Perhatikan perilaku aplikasi Anda setelah mengaktifkannya. Pastikan aplikasi pulih dengan baik dari mode standby. Secara khusus, periksa apakah notifikasi dan tugas latar belakang aplikasi Anda 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 mode Istirahatkan atau Aplikasi Standby memutus fungsi inti aplikasi atau ada alasan teknis mengapa aplikasi Anda tidak dapat menggunakan pesan prioritas 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 kepada 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 telepon; aplikasi VOIP perusahaan. Tidak, FCM tidak dapat digunakan karena adanya dependensi teknis pada layanan pesan lain atau mode 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 fitur pesan instan, 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 sinkronisasi, atau hanya perlu terhubung ke perangkat, seperti headphone nirkabel, yang terhubung melalui profil Bluetooth standar. Jika berlaku. Tidak bisa