Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Mengoptimalkan untuk mode Istirahatkan dan Aplikasi Standby

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 daya. 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.

Ketika 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:

Checklist 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 terpicu 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 bisa menyetel alarm yang akan berbunyi, meskipun perangkat berada dalam mode Istirahatkan.

Catatan: setAndAllowWhileIdle() maupun setExactAndAllowWhileIdle() bisa 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 pesan kosong 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 bisa menggunakan perintah adb untuk memaksa sistem agar masuk dan keluar dari mode Istirahatkan dan 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: Anda seharusnya hanya menggunakan satu layanan latar depan untuk beberapa tugas yang pengguna harapkan untuk 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 baki 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 ketika perangkat nonaktif

Firebase Cloud Messaging (FCM) merupakan layanan cloud-ke-perangkat yang memungkinkan Anda mendukung messaging downstream real-time antara layanan backend dan aplikasi pada 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 itu, jika aplikasi Anda memerlukan integrasi messaging dengan layanan backend, kami sangat merekomendasikan agar Anda menggunakan FCM jika memungkinkan, dibandingkan 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, kemudian mengembalikan perangkat atau aplikasi ke status nonaktif.

Pesan FCM prioritas tinggi tidak memengaruhi mode Istirahatkan, dan 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 yang bisa 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 dan lebih rendah), dan alarm AlarmManager regulernya tidak berbunyi. Aplikasi bisa memeriksa apakah saat ini berada dalam pengecualian pemberian akses dengan memanggil isIgnoringBatteryOptimizations().

Pengguna bisa mengonfigurasi pemberian akses secara manual di Setelan > Baterai > Pengoptimalan Baterai. Selain itu, sistem juga menyediakan cara bagi aplikasi untuk meminta pengguna memberi akses.

Sebelum meminta pengguna untuk menambahkan aplikasi ke daftar pemberian akses, pastikan aplikasi sesuai dengan kasus penggunaan yang dapat diterima untuk diberi 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:

  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 instal aplikasi Anda.
  3. Jalankan aplikasi 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 melakukan perintah berikut:
        $ adb shell dumpsys battery reset
          
  7. 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:

  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 instal aplikasi Anda.
  3. Jalankan aplikasi 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 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 mode Istirahatkan atau Aplikasi Standby memutus fungsi inti aplikasi atau ada alasan teknis mengapa aplikasi Anda tidak bisa 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 adalah menjadwalkan tindakan otomatis seperti messaging, panggilan suara, pengelolaan foto baru, atau tindakan lokasi. 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