Mengoptimalkan untuk Istirahatkan dan Aplikasi Siaga

Mulai dari Android 6.0 (API level 23), Android memperkenalkan dua fitur penghematan daya yang memperpanjang daya tahan baterai untuk pengguna dengan mengelola cara aplikasi berperilaku saat perangkat tidak terhubung ke sumber daya. Istirahatkan mengurangi konsumsi baterai dengan menangguhkan aktivitas jaringan dan CPU di latar belakang untuk aplikasi saat perangkat tidak digunakan untuk jangka waktu yang lama. Aplikasi Siaga menangguhkan aktivitas jaringan di latar belakang yang pengguna tidak pernah ajak berinteraksi dalam waktu dekat.

Fitur Istirahatkan dan Aplikasi Siaga mengelola perilaku semua aplikasi yang berjalan di Android 6.0 atau lebih tinggi terlepas apakah program tersebut secara spesifik menyasar API level 23 atau tidak. Untuk memastikan pengalaman terbaik bagi pengguna, uji aplikasi Anda di mode Istirahatkan dan Aplikasi Siaga dan lakukan semua penyesuaian yang diperlukan untuk kode Anda. Bagian berikut ini berisi perincian.

Memahami Istirahatkan

Jika pengguna membiarkan perangkat tanpa tersambung untuk periode waktu tertentu, dengan layar mati, perangkat akan memasuki mode Istirahatkan. Dalam mode Istirahatkan, sistem berusaha menghemat baterai dengan membatasi akses aplikasi ke jaringan dan layanan intensif CPU. Mode ini juga mencegah aplikasi mengakses jaringan dan menangguhkan tugas, sinkronisasi, dan alarm standar.

Sistem keluar dari Istirahatkan sesaat secara berkala untuk membiarkan aplikasi menyelesaikan aktivitas yang ditangguhkan. Selama masa pemeliharaan ini, sistem menjalankan semua sinkronisasi, tugas, serta alarm yang tertunda dan membiarkan aplikasi mengakses jaringan.

Gambar 1. Istirahatkan menyediakan masa pemeliharaan berulang agar aplikasi menggunakan jaringan dan menangani aktivitas tertunda.

Pada akhir masing-masing masa pemeliharaan, sistem kembali memasuki Istirahatkan, menangguhkan akses jaringan dan menangguhkan tugas, sinkronisasi, dan alarm. Seiring waktu, sistem menjadwalkan masa pemeliharaan lebih jarang, sehingga membantu mengurangi penggunaan baterai saat tidak aktif untuk waktu yang lebih panjang saat perangkat tidak terhubung ke pengisi daya.

Segera setelah pengguna membangunkan perangkat dengan memindahkannya, menyalakan layar atau menghubungkan pengisi daya, sistem keluar dari Istirahatkan dan semua aplikasi kembali ke aktivitas normal.

Pembatasan Istirahatkan

Pembatasan berikut berlaku pada aplikasi saat berada dalam mode Istirahatkan:

Daftar periksa Istirahatkan

Mengadaptasikan aplikasi Anda dengan Istirahatkan

Mode Istirahatkan dapat memengaruhi aplikasi secara berbeda tergantung kapabilitas yang ditawarkan dan layanan yang digunakan. Banyak aplikasi berfungsi secara normal di sepanjang siklus Istirahatkan tanpa modifikasi. Dalam beberapa kasus, Anda dapat mengoptimalkan cara aplikasi Anda mengelola jaringan, alarm, tugas, dan sinkronisasi. Aplikasi harus dapat mengelola aktivitas secara efisien selama masing-masing masa pemeliharaan.

Fitur Istirahatkan khususnya cenderung memengaruhi aktivitas yang AlarmManager dikelola alarm dan timer karena alarm di Android 5.1 (API level 22) atau lebih rendah tidak terpicu saat sistem 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 bisa menyetel alarm yang akan menyala bahkan jika perangkat dalam Istirahatkan.

Catatan: Baik setAndAllowWhileIdle() maupun setExactAndAllowWhileIdle() dapat menyalakan alarm lebih dari sekali per 9 menit, per aplikasi.

Pembatasan Istirahatkan terhadap akses jaringan juga cenderung memengaruhi aplikasi Anda, khususnya jika aplikasi bergantung pada pesan real-time seperti notifikasi tickle. Jika aplikasi Anda memerlukan koneksi bertahan ke jaringan untuk menerima pesan, Anda sebaiknya menggunakan Google Cloud Messaging (GCM) jika memungkinkan.

Untuk mengonfirmasi bahwa aplikasi Anda berlaku sesuai dengan Istirahatkan, Anda dapat menggunakan perintah adb untuk memaksa sistem untuk masuk dan keluar dari Istirahatkan dan memantau perilaku aplikasi. Untuk detailnya, lihat Pengujian dengan Istirahatkan dan Aplikasi Siaga.

Memahami Aplikasi Siaga

Aplikasi Siaga memungkinkan sistem menentukan apakah aplikasi dalam keadaan menganggur bila pengguna tidak menggunakannya secara aktif. Sistem menentukan hal ini bila pengguna tidak menyentuh aplikasi selama jangka waktu tertentu dan tidak satu pun ketentuan berikut yang berlaku:

  • Pengguna secara eksplisit meluncurkan aplikasi.
  • Aplikasi memiliki proses saat ini di latar depan (baik sebagai aktivitas atau layanan latar depan, atau sedang digunakan oleh aktivitas lain atau layanan latar depan).
  • Aplikasi menghasilkan notifikasi yang pengguna lihat di layar kunci atau di baki notifikasi.

Bila pengguna mencolokkan perangkat ke pemasok daya, sistem akan merilis aplikasi dari status siaga sehingga memungkinkannya untuk bebas mengakses jaringan dan mengeksekusi tugas dan sinkronisasi yang tertunda. Jika perangkat menganggur dalam periode waktu yang lama memungkinkan akses jaringan aplikasi menganggur sekitar sehari sekali.

Menggunakan GCM untuk Berinteraksi dengan Aplikasi Anda Sembari Perangkat Menganggur

Google Cloud Messaging (GCM) merupakan layanan awan-ke perangkat yang memungkinkan Anda mendukung perpesanan downstream real-time antara layanan backend dan aplikasi perangkat Android. GCM menyediakan satu koneksi bertahan ke awan; semua aplikasi yang memerlukan perpesanan real-time dapat membagikan koneksi ini. Koneksi bersama ini secara signifikan mengoptimalkan konsumsi baterai dengan membuat tidak diperlukannya beberapa aplikasi untuk menjaga koneksi bertahan terpisah sendiri, yang dapat mengurangi baterai secara cepat. Untuk itu, jika aplikasi Anda memerlukan integrasi perpesanan dengan layanan backend, kami menyarankan sekali Anda untuk menggunakan GCM jika memungkinkan, daripada menjaga koneksi jaringan bertahan Anda.

GCM dioptimalkan untuk bekerja dengan mode menganggur Istirahatkan dan Aplikasi Siaga dengan menggunakan pesan GCM prioritas tinggi. Pesan prioritas tinggi GCM memungkinkan Anda secara andal membangunkan aplikasi untuk mengakses jaringan, bahkan jika perangkat pengguna sedang dalam Istirahatkan atau aplikasi dalam mode Aplikasi Siaga. Dalam mode Istirahatkan dan Aplikasi Siaga, sistem mengirim pesan dan memberikan akses sementara aplikasi ke layanan jaringan dan partial wakelock, lalu mengembalikan perangkat atau aplikasi ke status menganggur.

Pesan GCM prioritas tinggi tidak memengaruhi mode Istirahatkan, dan tidak memengaruhi status aplikasi lain. 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 memerlukan perpesanan downstraem, aplikasi harus menggunakan GCM. Jika server dan klien Anda sudah menggunakan GCM, pastikan bahwa layanan Anda menggunakan pesan prioritas tinggi untuk pesan penting karena ini akan secara andal membangunkan aplikasi bahkan saat perangkat dalam Istirahatkan.

Dukungan untuk Kasus Penggunaan Lainnya

Hampir semua aplikasi harus dapat mendukung Istirahatkan dengan mengelola konektivitas jaringan, alarm, tugas, dan menyinkronkan dengan benar, dan menggunakan pesan prioritas tinggi GCM. Untuk sejumlah kecil kasus penggunaan, ini mungkin tidak cukup. Untuk kasus semacam itu, sistem menyediakan daftar putih aplikasi yang dapat dikonfigurasi yang sebagian dikecualikan dari optimalisasi Istirahatkan dan Aplikasi Siaga.

Aplikasi yang masuk daftar putih dapat menggunakan jaringan dan menahan partial wake locks selama Istirahatkan dan Aplikasi Siaga. Akan tetapi, pembatasan lain tetapi berlaku pada aplikasi yang masuk daftar putih, layaknya aplikasi lainnya. Misalnya, tugas dan sinkronisasi aplikasi yang masuk daftar putih akan ditangguhkan (di API level 23 dan lebih rendah), dan alarm regulernyaAlarmManager tidak menyala. Aplikasi dapat memeriksa bila itu saat ini di daftar putih pengecualian dengan memanggil isIgnoringBatteryOptimizations().

Pengguna secara manual mengonfigurasi daftar putih di Settings > Battery > Battery Optimization. Selain itu, sistem menyediakan cara untuk aplikasi meminta pengguna memasukkannya ke daftar putih.

Sebelum meminta pengguna untuk menambahkan aplikasi ke daftar putih, pastikan aplikasi sesuai dengan kasus penggunaan yang dapat diterima untuk masuk ke daftar putih.

Catatan: Kebijakan Google Play melarang aplikasi meminta pengecualian langsung dari fitur Manajemen Daya di Android 6.0+ (Istirahatkan dan Aplikasi Siaga) kecuali berpengaruh negatif terhadap fungsi inti aplikasi.

Pengujian dengan Istirahatkan dan Aplikasi Siaga

Untuk memastikan pengalaman yang baik bagi pengguna, Anda harus menguji aplikasi sepenuhnya di Istirahatkan dan Aplikasi Siaga.

Menguji aplikasi Anda dengan Istirahatkan

Anda bisa menguji mode Istirahatkan dengan langkah-langkah berikut:

  1. Konfigurasikan perangkat keras atau perangkat virtual dengan Android 6.0 (API level 23) atau citra sistem lebih tinggi.
  2. Hubungkan perangkat ke mesin development lalu pasang aplikasi Anda.
  3. Jalankan aplikasi Anda dan biarkan aktif.
  4. Matikan layar perangkat. (Aplikasi tetap aktif.)
  5. Paksa sistem untuk melewati siklus mode Istirahatkan dengan menjalankan perintah berikut:
    $ adb shell dumpsys battery unplug
    $ adb shell dumpsys deviceidle step

    Anda mungkin perlu menjalankan perintah kedua lebih dari sekali. Ulangi hingga status perangkat berubah menjadi menganggur.

  6. Perhatikan perilaku aplikasi Anda setelah mengaktifkan kembali perangkat. Pastikan aplikasi pulih dengan baik saat perangkat keluar dari Istirahatkan.

Pengujian aplikasi dengan Aplikasi Siaga

Untuk menguji mode Aplikasi Siaga dengan aplikasi Anda:

  1. Mengonfigurasi perangkat keras atau perangkat virtual dengan Android 6.0 (API level 23) atau citra 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 Siaga dengan menjalankan perintah berikut:
    $ adb shell dumpsys battery unplug
    $ adb shell am set-inactive <packageName> true
  5. Simulasikan membangunkan aplikasi Anda menggunakan perintah berikut:
    $ adb shell am set-inactive <packageName> false
    $ adb shell am get-inactive <packageName>
  6. Perhatikan perilaku aplikasi Anda setelah membangunkannya. Pastikan aplikasi pulih dengan baik dari mode siaga. Secara khusus, Anda harus memeriksa apakah Notifikasi aplikasi dan tugas latar belakang tetap berjalan sebagaimana yang diharapkan.

Kasus Penggunaan yang Dapat Diterima untuk Daftar Putih

Tabel berikut menyoroti kasus penggunaan yang dapat diterima untuk meminta atau berada dalam pengecualian daftar putih Optimalisasi Baterai. Secara umum, aplikasi Anda tidak boleh berada dalam daftar putih kecuali Istirahatkan atau Aplikasi Siaga akan memutus fungsi inti aplikasi atau ada alasan teknis mengapa aplikasi Anda tidak dapat menggunakan pesan prioritas tinggi GCM.

Untuk informasi selengkapnya, lihat Dukungan untuk Kasus Penggunaan Lainnya .

Tipe Kasus penggunaan Bisakah menggunakan GCM? Masuk daftar putih dapat diterima? Catatan
Perpesanan instan, chat, atau aplikasi memanggil. Memerlukan pengiriman pesan real-time ke pengguna saat perangkat dalam Istirahatkan atau aplikasi dalam mode Aplikasi Siaga. Ya, menggunakan GCM Tidak Diterima Gunakan pesan prioritas tinggi GCM untuk membangunkan aplikasi dan mengakses jaringan.
Ya, tapi tidak menggunakan pesan prioritas tinggi GCM.
Perpesanan instan, chat, atau aplikasi memanggil; aplikasi VOIP perusahaan. Tidak, tidak dapat menggunakan GCM karena dependensi teknis terhadap layanan perpesanan lain atau Istirahatkan dan Aplikasi Siaga akan memutus fungsi utama aplikasi. Dapat Diterima
Aplikasi otomatisasi tugas Fungsi inti aplikasi adalah penjadwalan tindakan otomatis, seperti perpesanan instan, pemanggilan suara, pengelolaan foto baru, atau tindakan lokasi. Jika berlaku. Dapat Diterima
Aplikasi pendamping perangkat periferal Fungsi inti aplikasi adalah menjaga koneksi bertahan 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 menghubungkan perangkat, misalnya headphone nirkabel, menghubungi melalui profil Bluetooth. Jika berlaku. Tidak Dapat Diterima