Sobes.tech
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 կարող էր աշխատել առանց այդ խիստ սահմանափակումների: