App Standby Android mexanizmidir, nadir istifadə olunan tətbiqləri gözləmə rejiminə keçirərək batareya qənaəti üçün onların fon fəaliyyətini məhdudlaşdırır. Doze Mode-dan (cihazın yuxu rejimi) fərqli olaraq, App Standby ayrı-ayrı tətbiqlər səviyyəsində ekran və hərəkət vəziyyətindən asılı olmayaraq işləyir. Spesifikasiyaya əsasən Android Developers, 2025, App Standby nadir istifadə olunan tətbiqlərin enerji istehlakını 70% azalda bilər.
Əsas məlumatlar
App Standby Android enerji idarəetmə sisteminin komponentidir, Android 6.0 (API 23)-da təqdim edilib və Android 9 (API 28)-da əhəmiyyətli dərəcədə yenidən işlənib. Onun vəzifəsi istifadəçinin hansı tətbiqləri nadir istifadə etdiyini müəyyən etmək və onların fon fəaliyyətini məhdudlaşdırmaqdır: şəbəkə sorğuları, sinxronizasiya, JobScheduler və AlarmManager. Doze-dən fərqli olaraq, App Standby ekran vəziyyətindən və ya cihazın hərəkətindən asılı deyil.
Sistem tətbiqləri dörd bucket (səviyyə) üzrə təsnif edir: Active, Working Set, Frequent və Rare. Hər bir səviyyə fon fəaliyyətinin nə dərəcədə məhdudlaşdırıldığını müəyyən edir. Səviyyələr arasında keçid tətbiqin istifadə nümunələri əsasında avtomatik baş verir: istifadəçinin onu nə qədər tez-tez açması, bildirişlər alması, vidjetlərlə qarşılıqlı əlaqədə olması.
App Standby Doze Mode ilə birlikdə işləyir, lakin onu əvəz etmir. Doze cihaz hərəkətsiz olduqda bütün tətbiqlərin fon fəaliyyətini məhdudlaşdırırsa, App Standby cihazın vəziyyətindən asılı olmayaraq konkret tətbiqləri məhdudlaşdırır. Rare səviyyəli tətbiq, istifadəçi onu bir neçə gün açmasa belə, telefondan aktiv istifadə zamanı belə məhdudiyyətlərə malik olacaq.
Android 9 (API 28)-dan başlayaraq Google App Standby Buckets-i tətbiq etdi — rəqəmli dəyərlərlə formal təsnifat. Sistem tətbiqin növbəti işə salınmasını proqnozlaşdırmaq üçün maşın öyrənməsindən istifadə edir. Model proqnozlaşdırırsa ki, tətbiq yaxın saatlarda açılacaq, Active bucket alır. Proqnoz nadir istifadəni göstərirsə — Rare təyin edilir.
App Standby bucket müəyyən etmək üçün bir neçə amili təhlil edir: tətbiqin istifadəçi tərəfindən son açılma vaxtı, qarşılıqlı əlaqə tezliyi (gündə/həftədə işə salma sayı), FCM bildirişlərinin alınması, iş masasında aktiv vidjetlərin olması və AlarmManager abunəliyi. Tətbiq nə qədər uzun müddət istifadə edilməzsə, bucket bir o qədər aşağı olur və məhdudiyyətlər bir o qədər sərt olur.
Sistem servisi UsageStatsManager tətbiqlərin istifadə statistikasını toplayır və onu StandbyController-ə ötürür — framework komponenti, hər bir tətbiq üçün bucket hesablayır. StandbyController həmçinin sistem hadisələrini nəzərə alır: tətbiq yeniləndikdən sonra onun bucket bir neçə gün Active-ə sıfırlanır ki, istifadəçi yeni funksiyaları qiymətləndirə bilsin.
Vacib xüsusiyyət: App Standby tətbiqin prosesini öldürmür, onun fon imkanlarını məhdudlaşdırır. Tətbiq, istifadəçi onunla qarşılıqlı əlaqədə olduqda (bucket Active) işləməyə davam edir. İstifadəçi tətbiqi bağlayıb ona qayıtmadıqda, sistem hərəkətsizlik vaxtını saymağa başlayır və bucket-ni Working Set və ya Frequent-ə endirə bilər.
FCM high-priority mesajının alınması tətbiqin bucket-ni müvəqqəti olaraq Active-ə yüksəldə bilər. Bu, tətbiqə məhdudiyyətsiz tapşırığı yerinə yetirmək imkanı verir (mesajı emal etmək, məlumatları sinxronizasiya etmək). Lakin emal başa çatdıqdan sonra bucket ilkin dəyərinə qayıdır. Google bu mexanizmdən vacib bildirişlərin çatdırılması üçün istifadə etməyi tövsiyə edir, tətbiqi «canlı» saxlamaq üçün yox.
App Standby tətbiqləri təsnif etmək üçün dörd səviyyədən (bucket) istifadə edir. Hər bir səviyyə fon tapşırıqları üçün gecikmə müddətini müəyyən edir: səviyyə nə qədər aşağı olarsa, gecikmə bir o qədər uzun olar. Sistem son 7–14 gün ərzində toplanmış istifadə statistikasına əsasən tətbiqi səviyyələr arasında avtomatik hərəkət etdirir.
| Bucket | Təsvir | JobScheduler gecikməsi | Şəbəkə |
|---|---|---|---|
| Active | Tətbiq aktiv istifadə olunur | Gecikmə yoxdur | Tam giriş |
| Working Set | Müntəzəm istifadə olunur, amma indi yox | 2 saata qədər | Pəncərələrdə |
| Frequent | Tez-tez istifadə olunur, amma hər gün yox | 4 saata qədər | Pəncərələrdə |
| Rare | Nadir istifadə olunan tətbiq | 24 saata qədər | Pəncərələrdə |
Active — istifadəçinin son vaxtlar qarşılıqlı əlaqədə olduğu tətbiq (işə saldı, bildiriş aldı və ya vidjetdən istifadə etdi). Bu bucket-də məhdudiyyət yoxdur: JobScheduler dərhal işə düşür, şəbəkə mövcuddur, AlarmManager dəqiq işləyir. Tətbiq Active olaraq qalır, istifadəçi onunla bir neçə saat qarşılıqlı əlaqəni dayandırana qədər.
Working Set — tətbiq müntəzəm istifadə olunur (həftədə bir neçə dəfə). Fon tapşırıqlarının gecikməsi 2 saata qədər. Frequent — tətbiq ayda bir neçə dəfə istifadə olunur. Gecikmə 4 saata qədər. Hər iki səviyyədə şəbəkə yalnız xidmət pəncərələrində mövcuddur, AlarmManager isə gecikdirilə bilər. JobScheduler tapşırıqları ən yaxın pəncərədə yerinə yetirir.
Rare — ən sərt səviyyə, istifadəçinin 30 gündən çox açmadığı tətbiqlərə təyin edilir. Fon tapşırıqlarının gecikməsi 24 saata çatır. Şəbəkə xidmət pəncərələrindən kənarda tamamilə bloklanır, AlarmManager yalnız setAndAllowWhileIdle() bayraqları ilə 9 dəqiqədə 1 dəfə məhdudiyyəti ilə işləyir. FCM high-priority bildirişləri hələ də çatdırılır, lakin bucket-ni yüksəldə bilməz.
App Standby bir neçə fon əməliyyatı kateqoriyasına məhdudiyyətlər qoyur. Doze-dən fərqli olaraq, App Standby məhdudiyyətləri ekran vəziyyətindən və şarj cihazından asılı olmayaraq fəaliyyət göstərir. Tərtibatçı tətbiqi bu məhdudiyyətləri nəzərə alaraq dizayn etməlidir, xüsusən də hədəf auditoriya tətbiqdən qeyri-müntəzəm istifadə edirsə.
JobScheduler — App Standby-nin təsir etdiyi əsas API. Bucket-dən asılı olaraq tapşırıqların yerinə yetirilmə gecikməsi 2 ilə 24 saat arasında dəyişir. WorkManager, JobScheduler-dən istifadə edən (API 23+-da), bu gecikmələrə məruz qalır. Vaxt baxımından kritik tapşırıqlar üçün Expedited Work istifadə edin, o, Foreground Service-i işə salır və bucket-dən asılı deyil.
Working Set, Frequent və Rare bucket-lərindəki tətbiqlər istənilən vaxt ixtiyari şəbəkə sorğuları edə bilməz. Sistem şəbəkəyə girişə yalnız Doze ilə sinxronlaşdırılmış xidmət pəncərələrində icazə verir. Kritik məlumatların göndərilməsi üçün FCM high-priority və sonra xidmət pəncərəsində sinxronizasiyadan istifadə edin.
AlarmManager App Standby-də Doze-də olduğu kimi eyni qaydalara tabedir: dəqiq alarmlar (setExact()) gecikdirilir, setAndAllowWhileIdle() isə 9 dəqiqədə 1 dəfə məhdudlaşdırılır. Rare bucket üçün gecikmə 24 saata çata bilər ki, bu da AlarmManager-i nadir istifadə olunan tətbiqlərdə tapşırıqların dəqiq planlaşdırılması üçün yararsız edir.
İstisna App Standby-dən iki yolla əldə edilə bilər: istifadəçinin batareya parametrləri vasitəsilə (əl ilə Whitelist) və ya sistem Intent-i ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS vasitəsilə. Lakin Google istisnalara girişi ciddi şəkildə tənzimləyir — istisna üçün əsaslı səbəbi olmayan tətbiqlər Google Play-də rədd edilə bilər.
İstifadəçi müəyyən bir tətbiq üçün məhdudiyyətləri əl ilə söndürə bilər: Parametrlər → Tətbiqlər → [Tətbiq] → Batareya → Optimizasiya → Optimizasiya etmə. Bu, seçilmiş tətbiq üçün App Standby və Doze məhdudiyyətlərini tamamilə aradan qaldırır. Tərtibatçı istifadəçiyə təlimat və ya sistem dialoqu göstərə bilər, lakin tətbiqi istisnalara məcburi əlavə edə bilməz.
Foreground Service bildirişlə avtomatik olaraq App Standby-dən müvəqqəti istisna alır. Xidmət işləyərkən və bildiriş göstərərkən, tətbiq real səviyyəsindən asılı olmayaraq Active bucket-ə keçirilir. Xidmət dayandırıldıqdan sonra bucket ilkin dəyərinə qayıdır. Bu, sistem istisnalarını tələb etmədən fon işini təmin etməyin ən etibarlı üsuludur.
Whitelist tələb etmək yalnız kritik fon funksionallığı olan tətbiqlər üçün məna kəsb edir: real vaxt naviqasiyası, sağlamlıq monitorinqi, VoIP zəngləri, cihazın mühafizəsi. Əksər tətbiqlər üçün Foreground Service və ya WorkManager istifadə etmək kifayətdir. Google Play, tətbiq açıq ehtiyac olmadan istisna tələb edərsə, nəşri rədd edə bilər.
// App Standby-dən istisna tələbi
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
data = Uri.parse("package:\${applicationContext.packageName}")
}
// Cari statusun yoxlanılması
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
val isIgnoring = powerManager.isIgnoringBatteryOptimizations(packageName)
Test etmə App Standby-ni ADB vasitəsilə tətbiqə istənilən bucket təyin etməyə və onun davranışını yoxlamağa imkan verir. Bu, fon sinxronizasiyasına, bildirişlərə və ya dövri yeniləmələrə güvənən tətbiqlər üçün kritik əhəmiyyət daşıyır. Test fiziki cihazda və ya Android 9+ olan emulatorda aparılmalıdır.
Bucket-nin məcburi təyini üçün adb shell am set-standby-bucket [package] [bucket] əmrindən istifadə olunur, burada bucket ola bilər: active, working_set, frequent və ya rare. Cari bucket-ə baxmaq üçün — adb shell am get-standby-bucket [package]. Sistem həmçinin adb shell dumpsys usagestats əmri ilə tətbiqin uzun müddətli hərəkətsizliyini simulyasiya etməyə imkan verir.
# Tətbiq üçün Rare bucket-nin təyin edilməsi
$ adb shell am set-standby-bucket com.example.app rare
# Cari bucket-ə baxış
$ adb shell am get-standby-bucket com.example.app
# Bütün bucket-lərin Active-ə sıfırlanması
$ adb shell dumpsys usagestats clear
# Sistemin bütün bucket-lərinə baxış
$ adb shell dumpsys usagestats
Rare bucket təyin etdikdən sonra yoxlayın: WorkManager tapşırığı 24 saat ərzində yerinə yetirilirmi, AlarmManager işə düşürmü, FCM bildirişləri çatdırılırmı, Foreground Service məhdudiyyətsiz işləyirmi. WorkManager Expedited Work siyasəti ilə hətta Rare bucket-də dərhal yerinə yetirilməlidir, çünki Foreground Service-dən istifadə edir. Adi WorkManager tapşırıqları bucket-ə uyğun olaraq gecikdiriləcək.
App Standby-yə davamlı tətbiqin hazırlanması fon tapşırıqlarına şüurlu yanaşma tələb edir. Əsas prinsip: tətbiqin həmişə Active bucket-də olduğunu güman etməyin. Fon işini elə dizayn edin ki, Frequent və Rare bucket-ləri üçün xarakterik olan gecikmələrlə düzgün işləsin.
Expedited Work (WorkManager 2.7+) Foreground Service-i işə salır ki, bu da tapşırığa bucket-dən asılı olmayaraq dərhal yerinə yetirilmə imkanı verir. Bu, gecikdirilə bilməyən tapşırıqlar üçün optimal seçimdir: mesaj göndərmək, ödənişdən sonra sinxronizasiya, daxil olan zəngin işlənməsi. Adi WorkManager tapşırıqları bucket nəzərə alınmaqla xidmət pəncərələrində yerinə yetirilir.
FCM high-priority mesajlarından tətbiqi App Standby-dən oyatmaq üçün istifadə edin. Tətbiq belə bir mesaj aldıqda, onun bucket müvəqqəti olaraq Active-ə yüksəlir və lazımi tapşırıqları yerinə yetirə bilər (sinxronizasiya, məlumat yeniləmə). Emal başa çatdıqdan sonra bucket ilkin səviyyəyə qayıdır.
App Standby-ni daimi fon xidmətləri, WakeLock və ya dövri FCM mesajları ilə keçməyə çalışmayın. Google bu cür təcrübələrlə fəal mübarizə aparır — tətbiq enerji tələb edən kimi qeyd oluna və daha sərt məhdudlaşdırıla bilər. Dövri tapşırıqlar üçün WorkManager, Foreground Service isə yalnız tapşırıq həqiqətən istifadəçiyə görünəndə istifadə edin.
Tez-tez verilən suallar
App Standby Android mexanizmidir, tətbiqləri istifadə tezliyinə görə təsnif edir və nadir istifadə olunanların fon fəaliyyətini məhdudlaşdırır. Doze-dən fərqli olaraq, App Standby tətbiq səviyyəsində ekran vəziyyətindən və cihazın hərəkətindən asılı olmayaraq işləyir.
4 səviyyə var: Active (məhdudiyyətsiz), Working Set (2 saata qədər gecikmə), Frequent (4 saata qədər gecikmə) və Rare (24 saata qədər gecikmə). Səviyyə tətbiqin istifadə tezliyinə əsasən avtomatik müəyyən edilir.
App Standby cihazın vəziyyətindən asılı olmayaraq konkret nadir istifadə olunan tətbiqləri məhdudlaşdırır. Doze Mode cihaz hərəkətsiz olduqda bütün tətbiqləri məhdudlaşdırır (ekran sönük, hərəkət yoxdur). Onlar paralel işləyir və Android enerji qənaət sistemində bir-birini tamamlayır.
ADB əmrindən istifadə edin: adb shell am get-standby-bucket [package]. Proqram vasitəsilə — UsageStatsManager.getAppStandbyBucket(), Android 9 (API 28)-dan etibarən mövcuddur. Metod bucket-in rəqəmli identifikatorunu qaytarır: 10 (Active), 20 (Working Set), 30 (Frequent), 40 (Rare).
WorkManager Expedited Work və ya Foreground Service bildirişlə istifadə edin. Expedited Work Foreground Service-i işə salır və bucket-dən asılı olmayaraq yerinə yetirilməni təmin edir. Adi WorkManager tapşırıqları tətbiqin cari səviyyəsinə uyğun olaraq gecikdiriləcək.
Nəticə
adb shell am set-standby-bucket hər səviyyədə davranışı yoxlamaq üçünAçar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun