Mengoptimalkan aplikasi untuk mode Istirahatkan dan Aplikasi Standby

Android memiliki dua fitur penghematan daya yang memperpanjang daya tahan baterai bagi pengguna sebesar mengelola cara aplikasi berperilaku saat perangkat tidak terhubung ke sumber daya: Istirahatkan dan Aplikasi Standby. Istirahatkan mengurangi konsumsi baterai dengan menunda aktivitas jaringan dan CPU latar belakang untuk aplikasi saat perangkat tidak digunakan dalam waktu lama periode waktu tertentu. Mode Aplikasi Standby menangguhkan aktivitas jaringan di latar belakang selama aplikasi tanpa aktivitas pengguna terbaru.

Selagi perangkat dalam mode Istirahatkan, akses ke jaringan neural resource ditunda hingga masa pemeliharaan. Batasan spesifik tercantum dalam Pengelolaan daya batasan.

Fitur Istirahatkan dan Aplikasi Standby mengelola perilaku semua aplikasi yang berjalan di Android 6.0 atau lebih tinggi, terlepas dari apakah mereka secara khusus menargetkan API level 23 atau tidak. Untuk membantu memastikan pengalaman terbaik bagi pengguna, uji aplikasi Anda di Istirahatkan dan Aplikasi Mode standby dan lakukan penyesuaian yang diperlukan pada kode Anda. Hal berikut menyediakan detail.

Memahami mode Istirahatkan

Jika pengguna membiarkan perangkat tidak terhubung dan tidak bergerak selama jangka waktu tertentu, dengan layar mati, perangkat memasuki mode Istirahatkan. Dalam mode Istirahatkan, sistem akan mencoba untuk menghemat baterai dengan membatasi aplikasi akses ke jaringan dan penggunaan intensif CPU layanan IT perusahaan mereka. Tindakan ini juga mencegah aplikasi mengakses jaringan dan menundanya tugas, sinkronisasi, dan alarm standar.

Secara berkala, sistem keluar dari Istirahatkan sesaat untuk membiarkan aplikasi selesai aktivitas yang ditangguhkan. Selama masa pemeliharaan ini, sistem menjalankan semua sinkronisasi, tugas, dan alarm yang tertunda, dan memungkinkan aplikasi mengakses jaringan.

Gambar 1. Istirahatkan menyediakan masa pemeliharaan berulang untuk aplikasi dapat menggunakan jaringan dan menangani aktivitas yang tertunda.

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

Ketika pengguna membangunkan perangkat dengan memindahkannya, menyalakan layar, atau menghubungkan pengisi daya, sistem akan keluar dari Istirahatkan dan semua aplikasi kembali normal aktivitas Anda.

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 mereka gunakan. Banyak aplikasi berfungsi secara normal di sepanjang siklus Istirahatkan tanpa modifikasi. Dalam beberapa kasus, Anda harus mengoptimalkan cara aplikasi Anda mengelola jaringan, alarm, tugas, dan sinkronisasi. Aplikasi harus dapat secara efisien mengelola aktivitas selama setiap masa pemeliharaan.

Untuk membantu menjadwalkan alarm, Anda dapat menggunakan dua AlarmManager metode: setAndAllowWhileIdle() dan setExactAndAllowWhileIdle(). Dengan metode ini, Anda bisa menyetel alarm tetap menyala meskipun perangkat dalam mode Istirahatkan.

Pembatasan Istirahatkan pada akses jaringan juga cenderung mempengaruhi aplikasi Anda, terutama jika aplikasi bergantung pada pesan {i>real-time<i} seperti {i>tickle<i} atau notifikasi. Jika aplikasi Anda memerlukan koneksi persisten ke jaringan untuk menerima pesan, gunakan Firebase Cloud Messaging (FCM) jika sebaik mungkin.

Untuk mengonfirmasi bahwa aplikasi Anda berperilaku seperti yang diharapkan dengan Istirahatkan, Anda bisa menggunakan Perintah adb untuk memaksa sistem masuk dan keluar dari mode Istirahatkan dan mengamati perilaku aplikasi. Untuk mengetahui detailnya, lihat Uji dengan fitur Istirahatkan dan Aplikasi Standby.

Memahami Aplikasi Standby

Aplikasi Standby memungkinkan sistem menentukan bahwa aplikasi dalam keadaan tidak ada aktivitas ketika pengguna tidak menggunakannya secara aktif. Sistem menentukan hal ini ketika pengguna tidak sentuh aplikasi untuk jangka waktu tertentu dan tidak satu pun dari kondisi berikut 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 membuat notifikasi yang dilihat pengguna di layar kunci atau di baki notifikasi.

Jika pengguna mencolokkan perangkat ke catu daya, sistem akan merilis aplikasi dari status standby, memungkinkannya dengan bebas mengakses jaringan dan mengeksekusi semua tugas dan sinkronisasi yang tertunda. Jika perangkat tidak ada aktivitas dalam waktu yang lama, memungkinkan akses jaringan aplikasi yang sedang tidak aktif sekitar sekali sehari.

Menggunakan FCM untuk berinteraksi dengan aplikasi Anda saat perangkat tidak ada aktivitas

Firebase Cloud Messaging (FCM) adalah layanan cloud-ke-perangkat yang memungkinkan Anda mendukung real-time pesan downstream antara layanan backend dan aplikasi di perangkat Android. FCM yang menyediakan satu koneksi persisten ke cloud. Semua aplikasi yang membutuhkan pengiriman pesan {i>real-time<i} dapat membagikan koneksi ini. Koneksi bersama ini mengoptimalkan konsumsi baterai secara signifikan dengan membuatnya tidak perlu beberapa aplikasi untuk mempertahankan koneksi persisten terpisah mereka sendiri, yang dapat cepat menghabiskan baterai. Oleh karena itu, jika aplikasi Anda memerlukan fitur pesan integrasi Anda dengan layanan backend, sebaiknya gunakan FCM jika alih-alih mempertahankan koneksi jaringan Anda sendiri yang persisten.

FCM dioptimalkan untuk berfungsi dengan mode tidak ada aktivitas dari Istirahatkan dan Aplikasi Standby. FCM pesan prioritas tinggi memungkinkan Anda membangunkan aplikasi untuk melibatkan pengguna. Dalam Istirahatkan atau Aplikasi Mode standby, sistem mengirimkan pesan dan memberi aplikasi akses sementara ke layanan jaringan dan wakelock parsial, lalu mengembalikan perangkat atau aplikasi ke status tidak ada aktivitas. Untuk notifikasi yang terlihat oleh pengguna dan mendesak, pertimbangkan untuk menggunakan untuk mengaktifkan penyampaian dalam mode Istirahatkan. Pesan berprioritas tinggi dapat menghasilkan notifikasi. Lihat FCM panduan tentang pesan berprioritas tinggi untuk mendapatkan informasi selengkapnya.

Untuk pesan yang tidak menghasilkan notifikasi, seperti menyimpan konten aplikasi update di latar belakang atau memulai sinkronisasi data, gunakan FCM prioritas normal membuat pesan teks. Pesan berprioritas normal akan segera dikirim jika perangkat tidak dalam Istirahatkan. Jika perangkat dalam mode Istirahatkan, perangkat akan dikirim selama periode Menonaktifkan masa pemeliharaan atau segera setelah pengguna membangunkan perangkat.

Sebagai praktik terbaik umum, jika aplikasi Anda memerlukan pesan downstream, gunakan oleh 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 Istirahatkan dengan mengelola konektivitas jaringan, alarm, tugas, dan sinkronisasi, serta menggunakan pesan FCM. Untuk penggunaan terbatas kasus, data tersebut mungkin tidak cukup. Untuk kasus tersebut, sistem menyediakan Daftar aplikasi yang dapat dikonfigurasi yang sebagian dikecualikan dari fitur Istirahatkan dan Aplikasi Standby pengoptimalan.

Aplikasi yang dikecualikan sebagian dapat menggunakan jaringan dan menahan aktif sebagian terkunci selama mode Istirahatkan dan Aplikasi Standby. Namun, batasan lain masih berlaku untuk aplikasi, seperti yang mereka lakukan untuk aplikasi lainnya. Misalnya, tugas dan sinkronisasi aplikasi ditangguhkan pada API level 23 dan yang lebih lama, dan AlarmManager alarm tidak berbunyi. Aplikasi dapat memeriksa apakah yang saat ini ada dalam daftar pengecualian dengan memanggil isIgnoringBatteryOptimizations().

Pengguna dapat mengonfigurasi daftar aplikasi yang dikecualikan secara manual di Setelan &gt; Baterai > Pengoptimalan Baterai. Atau, sistem memberikan 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 memuaskan bagi pengguna, uji aplikasi Anda sepenuhnya dalam Istirahatkan dan Aplikasi Standby.

Menguji aplikasi dengan Istirahatkan

Anda dapat menguji mode Istirahatkan dengan melakukan hal berikut:

  1. Mengonfigurasi 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 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. Merek memastikan aplikasi pulih dengan baik ketika perangkat keluar dari Istirahatkan.

Menguji aplikasi dengan Aplikasi Standby

Untuk menguji mode Aplikasi Standby dengan aplikasi Anda, lakukan hal berikut:

  1. Mengonfigurasi 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 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 memulihkan dengan baik dari mode standby. Secara khusus, periksa apakah notifikasi dan pekerjaan latar belakang berfungsi seperti yang diharapkan.

Kasus penggunaan yang dapat diterima untuk pengecualian

Tabel berikut menyoroti beberapa kasus penggunaan dan apakah tabel tersebut dapat diterima agar aplikasi dapat menggunakan ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS tindakan niat dalam situasi ini. Secara umum, aplikasi Anda tidak memenuhi persyaratan ini kecuali aplikasi Istirahatkan atau Aplikasi Standby merusak fungsi inti aplikasi ada alasan teknis mengapa aplikasi Anda tidak dapat menggunakan FCM prioritas tinggi membuat pesan teks.

Untuk 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 {i>real-time<i} kepada pengguna saat perangkat dalam mode Istirahatkan atau aplikasi dalam mode Aplikasi Standby. Ya, menggunakan FCM Tidak bisa Menggunakan pesan berprioritas tinggi FCM untuk mengaktifkan aplikasi dan mengakses jaringan.
Ya, tetapi tidak menggunakan pesan prioritas tinggi FCM.
Aplikasi pesan instan, chat, atau telepon; aplikasi VOIP perusahaan. Tidak, tidak dapat menggunakan FCM karena dependensi teknis pada pesan lain atau Istirahatkan dan Aplikasi Standby akan 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 pesan, panggilan suara, atau pengelolaan foto baru. Jika berlaku. Dapat diterima
Aplikasi pendamping perangkat periferal. Fungsi inti aplikasi adalah mempertahankan koneksi yang persisten dengan perangkat periferal tersebut untuk tujuan menyediakan perangkat periferal tersebut akses internet. Jika berlaku. Dapat diterima
Aplikasi hanya perlu terhubung ke perangkat periferal secara berkala untuk melakukan sinkronisasi, atau hanya perlu terhubung ke perangkat, seperti headphone nirkabel, melalui profil Bluetooth standar. Jika berlaku. Tidak bisa