Sistem memprioritaskan permintaan resource oleh aplikasi berdasarkan status perangkat, status aplikasi, dan bucket standby aplikasi.
Sistem Android dapat menerapkan batas resource dengan dua cara yang berbeda. Salah satu cara untuk mengoptimalkan penggunaan resource adalah dengan menunda eksekusi tugas hingga perangkat telah keluar dari status perangkat daya rendah seperti mode istirahatkan. Misalnya, tugas reguler dan alarm yang tidak akurat ditangguhkan sehingga dieksekusi setelah perangkat keluar dari mode mode tidur.
Cara lainnya adalah dengan mengurangi seberapa banyak aplikasi dapat mengaktifkan perangkat dan melakukan pekerjaan, berdasarkan bucket standby aplikasi saat ini. Sistem dapat mengurangi frekuensi (seberapa sering aplikasi mengaktifkan perangkat) dan total durasi (jumlah waktu perangkat tetap aktif). Misalnya, jika aplikasi berada di bucket standby rare, aplikasi dapat menjalankan tugas terjadwal selama total periode 10 menit dalam periode 24 jam bergulir.
Perhatikan bahwa WorkManager menggunakan JobScheduler untuk menjadwalkan tugas saat aplikasi tidak terlihat dan pekerja akan terpengaruh oleh batas resource tugas.
Anda dapat memahami batasan lebih lanjut dengan membaca:
- Batas resource berdasarkan status perangkat
- Batas resource berdasarkan status aplikasi
- Batas resource berdasarkan bucket aplikasi standby
Perhatikan bahwa status perangkat dan status aplikasi dapat menggantikan batas bucket siaga aplikasi. Misalnya, jika perangkat sedang diisi dayanya, sistem akan mengizinkan aplikasi dalam bucket standby rare untuk menjalankan tugas selama lebih dari 10 menit dalam periode 24 jam bergulir.
Ada perubahan perilaku yang juga memengaruhi batas resource. Lihat Perubahan Perilaku Android yang memengaruhi batas resource untuk mempelajari lebih lanjut.
Batas resource berdasarkan status perangkat
Sistem juga dapat mengecualikan atau menerapkan batas resource berdasarkan status perangkat. Misalnya, perangkat dalam status charging diberi akses resource yang tidak dibatasi terlepas dari bucket standby aplikasinya.
Status perangkat |
Lowongan |
Alarm |
Akses jaringan |
Firebase Cloud Messaging |
Mengisi daya |
Tidak ada batas eksekusi kecuali untuk bucket standby restricted |
Tidak ada batas eksekusi untuk semua bucket standby dan status proses, kecuali jika pengguna membatasi baterai aplikasi secara manual |
Tidak ada batasan |
Tidak ada batasan |
Layar aktif |
Batas eksekusi diterapkan berdasarkan bucket standby |
Batas eksekusi diterapkan berdasarkan proses aplikasi dan bucket standby |
Akses bergantung pada bucket standby atau status proses aplikasi |
Tidak ada batasan |
Layar nonaktif dan mode tidur aktif |
Batas eksekusi diterapkan berdasarkan bucket standby, dan eksekusi ditangguhkan ke periode pemeliharaan mode tidur |
Batas eksekusi diterapkan berdasarkan bucket standby. Alarm biasa: Dialihkan ke masa pemeliharaan mode tidur Alarm saat tidak ada aktivitas: Dibatasi hingga 7 per jam |
Dibatasi selama mode tidur |
Prioritas tinggi: Tidak ada batas eksekusi Prioritas normal: Dialihkan ke masa pemeliharaan mode tidur |
Batas resource berdasarkan status aplikasi
Apakah sistem menerapkan batas resource bucket standby aplikasi atau tidak
bergantung pada tingkat kepentingan proses aplikasi. Lihat
ActivityManager.RunningAppProcessInfo.importance
untuk memahami berbagai tingkat kepentingan proses.
Pengguna perangkat juga dapat memilih untuk mengganti secara manual pengoptimalan manajemen daya aplikasi, yang menggantikan batas bucket aplikasi standby.
Status Aplikasi |
Lowongan |
Alarm |
Jaringan |
Proses aplikasi terlihat atau dalam status latar depan |
Tidak ada batas eksekusi |
Tidak ada batas frekuensi |
Tidak ada batasan |
Proses aplikasi sedang menjalankan layanan latar depan |
Batas eksekusi diterapkan berdasarkan bucket standby*** |
Batas frekuensi diterapkan berdasarkan bucket standby |
Tidak ada batasan |
Pengguna membatasi baterai aplikasi secara manual |
Eksekusi dibatasi |
Eksekusi dibatasi |
Akses bergantung pada perilaku bucket standby |
Pengguna membatalkan pembatasan baterai aplikasi secara manual |
Batas eksekusi cukup besar*** |
Tidak ada batas eksekusi |
Tidak dibatasi kecuali jika perangkat dalam mode penghemat data |
*** Perilaku kuota eksekusi untuk tugas berubah di Android 16. Sebelum Android 16, tidak ada batas eksekusi saat aplikasi menjalankan layanan latar depan atau pengguna tidak membatasi baterai aplikasi.
Batas resource berdasarkan bucket aplikasi standby
Catatan: Nilai dalam tabel ini bukan jaminan durasi eksekusi, karena kondisi perangkat atau perubahan bucket lainnya dapat memengaruhi batasan resource. Nilai ini juga dapat berubah dalam rilis Android mendatang.
Tugas reguler, tugas yang diprioritaskan, alarm, dan akses jaringan dapat dibatasi berdasarkan bucket aplikasi standby. Pahami pengaruh bucket standby aplikasi terhadap aplikasi Anda menggunakan perkiraan batasan pengelolaan daya ini sebagai panduan. Untuk performa optimal, ikuti praktik terbaik mode standby aplikasi dan optimalkan penggunaan baterai untuk API penjadwalan tugas.
Perhatikan bahwa mulai Android 13, bucket standby aplikasi tidak lagi menentukan jumlah FCM prioritas tinggi yang dapat digunakan aplikasi.
Bucket aplikasi standby |
Pekerjaan reguler* |
Tugas yang diprioritaskan** |
Alarm |
Jaringan |
Aktif: |
Hingga 20 menit dalam periode 60 menit bergulir*** |
Hingga 30 menit dalam periode 24 jam bergulir*** |
Tidak ada batas eksekusi |
Tidak ada batasan |
Working set: |
Hingga 10 menit dalam periode 4 jam bergulir |
Hingga 15 menit dalam periode 24 jam bergulir |
Dibatasi hingga 10 per jam |
Tidak ada batasan |
Sering: |
Hingga 10 menit dalam periode 12 jam bergulir |
Hingga 10 menit dalam periode 24 jam bergulir |
Dibatasi hingga 2 per jam |
Tidak ada batasan |
Jarang: |
Hingga 10 menit dalam jangka waktu 24 jam bergulir |
Hingga 10 menit dalam periode 24 jam bergulir |
Dibatasi 1 per jam |
Nonaktif |
Dibatasi: |
Sekali per hari hingga 10 menit |
Hingga 5 menit dalam periode 24 jam bergulir |
Satu alarm per hari, baik alarm yang tepat maupun alarm yang tidak tepat |
Nonaktif |
* Tugas reguler menjelaskan tugas yang tidak menggunakan tanda setUserInitiated(true)
atau setExpedited(true)
di JobScheduler atau pekerja yang diprioritaskan
di WorkManager.
** Tugas yang dipercepat memiliki batas eksekusi terpisah dari tugas reguler, dan dapat dikonfigurasi di WorkManager untuk terus berjalan menggunakan batas eksekusi tugas reguler setelah batas dipercepat habis.
*** Perilaku kuota eksekusi untuk tugas berubah di Android 16. Sebelum Android 16, tidak ada batas eksekusi saat aplikasi berada di bucket standby aktif.
Perubahan perilaku Android yang memengaruhi batas resource
Update Android berikut membuat perubahan pada batas resource aplikasi.
Android 16
Perubahan perilaku pengoptimalan kuota JobScheduler
Android telah menyesuaikan kuota runtime eksekusi tugas reguler dan dipercepat berdasarkan faktor berikut:
- Bucket standby aplikasi yang digunakan aplikasi
- Jika tugas memulai eksekusi saat aplikasi berada dalam status teratas
- Jika tugas dieksekusi saat menjalankan Layanan Latar Depan
Android 13
Perubahan perilaku Kuota Firebase Cloud Message (FCM) Prioritas Tinggi
- Bucket Aplikasi Standby tidak lagi menentukan berapa banyak FCM prioritas tinggi yang dapat digunakan aplikasi.
- Sistem kini mendowngrade pesan prioritas tinggi jika mendeteksi aplikasi yang terus-menerus mengirim pesan prioritas tinggi yang tidak menghasilkan notifikasi
- Untuk panduan saat ini terkait pesan berprioritas tinggi, lihat dokumentasi firebase tentang cara menetapkan dan mengelola prioritas pesan.
Android 9
Fitur Bucket Aplikasi Standby diperkenalkan
Android 9 memperkenalkan fitur manajemen baterai baru, Bucket Aplikasi Standby. Bucket Aplikasi Standby membantu sistem memprioritaskan permintaan resource oleh aplikasi berdasarkan frekuensi dan waktu terakhir penggunaan aplikasi. Berdasarkan pola penggunaan aplikasi, setiap aplikasi ditempatkan di salah satu dari lima bucket prioritas. Sistem membatasi resource perangkat yang tersedia untuk setiap aplikasi berdasarkan bucket tempat aplikasi berada.