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

Manajemen daya

Android 9 (API level 28) memperkenalkan beberapa fitur baru untuk meningkatkan manajemen daya perangkat. Perubahan ini, beserta fitur yang sudah ada di versi sebelumnya, membantu memastikan bahwa sumber daya sistem diberikan pada aplikasi yang paling membutuhkan.

Fitur manajemen daya dikelompokkan dalam dua kategori:

Bucket aplikasi standby
Sistem membatasi akses aplikasi ke sumber daya perangkat seperti CPU atau baterai, berdasarkan pola penggunaan dari pengguna. Ini adalah fitur baru untuk Android 9.
Peningkatan penghemat baterai
Bila penghemat baterai diaktifkan, sistem akan memberlakukan pembatasan pada semua aplikasi. Ini adalah peningkatan atas fitur yang sudah ada pada Android 9.

Catatan: Perubahan ini berlaku pada semua aplikasi, baik yang menargetkan Android 9, maupun tidak.

Bucket Aplikasi Standby

Android 9 memperkenalkan fitur manajemen baterai baru, Bucket Aplikasi Standby. Bucket Aplikasi Standby membantu sistem memprioritaskan permintaan aplikasi akan sumber daya berdasarkan seberapa baru dan seberapa sering aplikasi digunakan. Berdasarkan pola penggunaan aplikasi, setiap aplikasi dimasukkan dalam salah satu dari lima bucket prioritas. Sistem membatasi sumber daya perangkat yang tersedia pada setiap aplikasi berdasarkan bucket tempat aplikasi berada.

Kelima bucket memprioritaskan aplikasi ke dalam kelompok menurut karakteristik berikut:

Aktif

Aplikasi berada dalam bucket aktif jika pengguna saat ini sedang menggunakan aplikasi tersebut, misalnya:

  • Aplikasi telah meluncurkan sebuah aktivitas
  • Aplikasi sedang menjalankan layanan latar depan
  • Aplikasi memiliki adaptor sinkronisasi yang dikaitkan dengan penyedia konten yang digunakan oleh sebuah aplikasi latar depan
  • Pengguna mengklik notifikasi dari aplikasi

Jika aplikasi berada dalam bucket aktif, sistem tidak akan memberlakukan pembatasan pada tugas, alarm, atau pesan FCM aplikasi tersebut.

Siap-aktif

Aplikasi berada dalam bucket siap-aktif jika sering dijalankan namun saat ini sedang tidak aktif. Misalnya, aplikasi media sosial yang biasanya diluncurkan pengguna setiap hari kemungkinan akan dimasukkan ke siap-aktif. Aplikasi juga dipromosikan ke bucket siap-aktif jika digunakan secara tidak langsung.

Jika aplikasi berada dalam siap-aktif, sistem akan mengenakan pembatasan ringan pada kemampuannya untuk menjalankan tugas dan memicu alarm. Untuk detailnya, lihat Pembatasan manajemen daya.

Sering

Aplikasi berada dalam bucket sering jika rutin digunakan, tetapi tidak mesti setiap hari. Misalnya, aplikasi pemantau olahraga yang dijalankan pengguna di sasana olahraga mungkin akan berada dalam bucket sering.

Jika aplikasi berada dalam bucket sering, sistem akan mengenakan pembatasan lebih ketat pada kemampuannya untuk menjalankan tugas dan memicu alarm, juga memberikan kuota pada pesan FCM prioritas tinggi. Untuk detailnya, lihat Pembatasan manajemen daya.

Jarang

Aplikasi berada dalam bucket jarang jika tidak sering digunakan. Misalnya, aplikasi hotel yang hanya dijalankan pengguna saat sedang menginap di hotel itu mungkin akan berada di bucket jarang.

Jika aplikasi berada dalam bucket jarang, sistem akan mengenakan pembatasan ketat pada kemampuannya untuk menjalankan tugas, memicu alarm, dan menerima pesan FCM prioritas tinggi. Sistem juga membatasi kemampuan aplikasi untuk menghubungkan ke internet. Untuk detailnya, lihat Pembatasan manajemen daya.

Tidak pernah

Aplikasi yang telah diinstal tetapi belum pernah dijalankan akan ditetapkan ke bucket tidak pernah. Sistem akan mengenakan pembatasan berat pada aplikasi ini.

Sistem secara dinamis menetapkan setiap aplikasi ke bucket prioritas, dan menetapkannya kembali bila dibutuhkan. Sistem mungkin mengandalkan aplikasi yang telah dimasukkan sebelumnya yang menggunakan machine learning untuk menentukan seberapa mungkin setiap aplikasi digunakan, dan menetapkan aplikasi ke bucket yang sesuai. Jika aplikasi sistem tidak ada di perangkat, secara default sistem akan mengurut aplikasi berdasarkan seberapa baru aplikasi tersebut digunakan. Aplikasi yang lebih aktif ditetapkan ke bucket yang memberikan prioritas lebih tinggi pada aplikasi, sehingga membuat sumber daya sistem lebih banyak tersedia untuk aplikasi tersebut. Secara khusus, bucket menentukan seberapa sering tugas aplikasi dijalankan, seberapa sering aplikasi bisa memicu alarm, dan seberapa sering aplikasi bisa menerima pesan Firebase Cloud Messaging (FCM) prioritas tinggi. Pembatasan ini hanya berlaku saat perangkat menggunakan tenaga baterai; sistem tidak mengenakan pembatasan ini pada aplikasi saat perangkat sedang mengisi daya.

Setiap produsen bisa menetapkan kriterianya sendiri tentang bagaimana aplikasi nonaktif ditetapkan ke bucket. Anda tidak boleh mencoba memengaruhi ke bucket mana aplikasi Anda akan ditetapkan. Sebagai gantinya, fokuskan pada memastikan bahwa aplikasi berperilaku dengan baik di bucket mana pun ia berada. Aplikasi Anda bisa mengetahui di bucket apa saat ini ia berada dengan memanggil metode baru UsageStatsManager.getAppStandbyBucket().

Catatan: Aplikasi yang ada di Daftar putih Istirahatkan dikecualikan dari pembatasan berbasis bucket aplikasi standby.

Praktik terbaik

Jika aplikasi Anda sudah mengikuti praktik terbaik untuk Istirahatkan dan aplikasi standby, maka tidak akan sulit menangani fitur manajemen daya yang baru. Akan tetapi, beberapa perilaku aplikasi yang sebelumnya bekerja dengan baik mungkin kini menyebabkan masalah.

  • Jangan mencoba memanipulasi sistem supaya memasukkan aplikasi Anda ke bucket yang satu atau yang lain. Metode bucketing sistem bisa berubah, dan setiap produsen perangkat bisa memilih untuk menulis aplikasi bucketing mereka sendiri dengan algoritmenya sendiri. Sebagai gantinya, pastikan aplikasi Anda berperilaku dengan semestinya, di bucket apa pun ia berada.
  • Jika aplikasi tidak memiliki aktivitas peluncur, aplikasi mungkin tidak akan pernah dipromosikan ke bucket aktif. Anda mungkin perlu mendesain ulang aplikasi agar memiliki aktivitas demikian.
  • Jika notifikasi aplikasi tidak dapat diambil tindakan, pengguna tidak akan dapat memicu promosi aplikasi ke bucket aktif melalui interaksi dengan notifikasi. Dalam hal ini, Anda mungkin perlu mendesain ulang beberapa notifikasi yang sesuai sehingga memungkinkan respons dari pengguna. Untuk beberapa panduan, lihat Desain Material Pola desain notifikasi.
  • Demikian pula, jika aplikasi tidak menampilkan notifikasi saat menerima pesan FCM prioritas tinggi, ini tidak akan memberi kesempatan kepada pengguna untuk berinteraksi dengan aplikasi dan dengan demikian akan mempromosikannya ke bucket aktif. Sebenarnya, satu-satunya maksud penggunaan pesan FCM prioritas tinggi adalah untuk mendorong notifikasi ke pengguna, sehingga situasi ini tidak akan pernah terjadi. Jika Anda menandai pesan FCM dengan tidak semestinya sebagai prioritas tinggi bila ia tidak memicu interaksi pengguna, maka ini bisa menyebabkan konsekuensi negatif lainnya; misalnya, ini bisa mengakibatkan aplikasi Anda kehabisan kuotanya, sehingga menyebabkan pesan FCM yang benar-benar penting dianggap berprioritas normal.

    Catatan: Jika pengguna berulang kali menolak notifikasi, sistem akan memberi pengguna opsi untuk memblokir notifikasi itu di masa mendatang. Jangan sampai pengiriman notifikasi ke pengguna menjadi spam lantaran mencoba membuat aplikasi Anda tetap berada dalam bucket aktif!

  • Jika aplikasi dipecah menjadi beberapa package, semua package itu mungkin akan berada dalam bucket berbeda dan, karenanya, memiliki tingkat akses yang berbeda. Anda harus yakin untuk menguji aplikasi demikian dengan package yang ditetapkan ke beragam bucket guna memastikan aplikasi tersebut berperilaku dengan benar.

Peningkatan penghemat baterai

Android 9 membuat banyak peningkatan pada mode penghemat baterai. Produsen perangkat menentukan pembatasan yang dikenakan secara presisi. Misalnya, pada build AOSP, sistem menerapkan pembatasan berikut:

  • Sistem memasukkan aplikasi dalam mode aplikasi standby secara lebih agresif, sebagai ganti menunggu aplikasi tidak aktif.
  • Batas eksekusi latar belakang berlaku pada semua aplikasi, apa pun target level API-nya.
  • Layanan lokasi mungkin dinonaktifkan bila layar mati.
  • Aplikasi latar belakang tidak memiliki akses jaringan.

Sebagai tambahan, ada beberapa optimalisasi daya untuk perangkat tertentu. Untuk detail selengkapnya, lihat Apendiks: Pembatasan Manajemen Daya.

Seperti biasa, ada baiknya menguji aplikasi Anda selagi penghemat baterai sedang aktif. Anda bisa mengaktifkan penghemat baterai secara manual melalui layar Settings > Battery Saver di perangkat.

Pengujian dan pemecahan masalah

Fitur manajemen daya yang baru memengaruhi semua aplikasi yang berjalan pada perangkat Android 9, baik aplikasi tersebut menargetkan Android 9, maupun tidak. Penting kiranya memastikan aplikasi Anda berperilaku dengan benar pada semua perangkat ini.

Pastikan menguji kasus penggunaan utama aplikasi Anda pada berbagai kondisi, untuk melihat bagaimana fitur manajemen daya berinteraksi satu sama lain. Anda bisa menggunakan perintah-perintah Android Debug Bridge untuk mengaktifkan dan menonaktifkan sebagian dari fitur ini.

Perintah-perintah Android Debug Bridge

Anda bisa menggunakan perintah shell Android Debug Bridge untuk menguji sejumlah fitur manajemen daya.

Untuk informasi mengenai penggunaan ADB guna memasukkan perangkat Anda dalam Istirahatkan, lihat Pengujian dengan Istirahatkan dan Aplikasi Standby.

Bucket Aplikasi Standby

Anda bisa menggunakan ADB untuk menetapkan secara manual aplikasi Anda ke Bucket Aplikasi Standby. Untuk mengubah bucket aplikasi, gunakan perintah berikut:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

Anda juga bisa menggunakan perintah itu untuk menyetel beberapa package sekaligus:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

Untuk memeriksa di bucket apa aplikasi berada, jalankan

$ adb shell am get-standby-bucket [packagename]

Jika Anda tidak meneruskan parameter packagename, perintah tersebut akan menampilkan daftar bucket untuk semua aplikasi. Aplikasi juga bisa mengetahui bucket-nya pada waktu proses dengan memanggil metode baru UsageStatsManager.getAppStandbyBucket().

Penghemat baterai

Ada sejumlah perintah untuk menguji bagaimana perilaku aplikasi Anda dalam kondisi rendah daya.

Catatan: Anda juga bisa menggunakan layar Settings > Battery saver di perangkat untuk memasukkan perangkat dalam mode penghemat baterai.

Untuk menyimulasikan perangkat yang sedang dicabut dari stekernya, gunakan perintah

$ adb shell dumpsys battery unplug

Untuk menguji bagaimana perilaku perangkat pada kondisi rendah daya, gunakan perintah ini:

$ adb shell settings put global low_power 1

Setelah selesai menguji, Anda bisa mengurungkan setelan perangkat manual dengan perintah ini:

$ adb shell dumpsys battery reset