Intern
Ի՞նչ տարբերություն կա Android-ում ֆոնային ծառայության և ֆոնային ծառայության միջև։
sobes.tech AI
Պատասխան AI-ից
Տարբերությունը սովորական ֆոնային ծառայության և սահմանափակ (restricted) ծառայության միջև հայտնվեց Android 8.0 (API 26)-ից սկսած:
Սովորական ֆոնային ծառայություն:
- Կարող է աշխատել անսահմանափակ ժամանակ ֆոնային ռեժիմում:
- Սիստեմը կարող է այն ավարտել ռեսուրսների պակասի դեպքում, բայց այն կարող է վերագործարկվել, եթե
onStartCommand()-ում վերադարձվել էSTART_STICKY: - Չի պահանջում օգտագործողի տեսանելի ծանուցումներ (համենայն դեպս դա լավագույն պրակտիկան չէ UX տեսանկյունից):
- Կարող է սպառել մեծ քանակությամբ մարտկոցի և CPU ռեսուրսներ:
Սահմանափակ ֆոնային ծառայություն (կիրառվում են սահմանափակումներ):
- Ծառայություն, որը սկսվում է ֆոնային ռեժիմում առանց տեսանելի ակտիվությունների կամ այլ "սպիտակ ցուցակների" (պատիվ պայմաններ), բախվում է ռեսուրսների օգտագործման սահմանափակումների:
- Հիմնական սահմանափակումները ներառում են՝
- Ֆոնային աշխատանքի սահմանափակում: Ծառայությունը կարող է համակարգի կողմից կանգնեցվել կարճ ժամանակ անց (հաճախ մի քանի րոպե)՝ ծրագրի ֆոնային ռեժիմ տեղափոխվելուց հետո:
- Նոր ֆոնային ծառայությունների գործարկման արգելք: Ֆոնային ծրագիրը չի կարող գործարկել նոր ֆոնային ծառայություններ
startService()-ի միջոցով: Փոխարենը, պետք է օգտագործելJobSchedulerկամWorkManager: - Համայն հաղորդագրությունների ստացման սահմանափակում: Անհայտ հաղորդագրությունները (implicit broadcasts) մանIFEST-ում անտեսվում են: Ծառայությունը պետք է հստակ գրանցի հաղորդագրությունների ընդունիչները կամ օգտագործի
JobScheduler/WorkManager:
- Այս սահմանափակումների նպատակը մարտկոցի աշխատանքային ժամանակը և սարքի կատարողականությունը բարելավելն է՝ սահմանափակելով ֆոնային ծրագրերի անարդյունավետ օգտագործումը:
Ինչպես է ծառայությունը դառնում անսահմանափակ (ակտիվ տեսքով համակարգի աչքերում):
- Ծառայությունը գտնվում է առաջատար պլանում (օգտագործողը ակտիվորեն շփվում է դրա հետ):
- Ծառայությունը սկսում է տեսանելի ծառայություն (foreground service), որը ցույց է տալիս մշտական ծանուցում օգտվողին:
- Ծառայությունը կատարում է որոշակի առաջադրանքներ (օրինակ, հաղորդագրությունների մշակումը, JobScheduler առաջադրանքների կատարմամբ), որոնք ժամանակավորապես դուրս են բերում այն լիարժեք ֆոնային աշխատանքի վիճակից:
Հիմնական տարբերությունը: Android 8.0-ից և բարձր տարբերակներից հետո, ֆոնային ռեժիմում աշխատող ծառայությունը առանց տեսանելի ակտիվության կամ տեսանելի ծառայության, սիստեմի կողմից սահմանափակվում է ռեսուրսների և երկարաժամկետ աշխատանքի հնարավորության առումով: Սովորական "ֆոնային ծառայությունը" մինչև Android 8.0 կարող էր աշխատել առանց այդ խիստ սահմանափակումների: