Service er hluti í Android sem getur unnið verk án þess að hafa eigið notendaviðmót, svo sem að spila tónlist, samstilla gögn eða sinna yfirstandandi skráaflutningi. Ásamt activities, broadcast receivers og content providers eru services einn af fjórum grunnhlutum appa í Android, og líkt og hina verður að skrá þau í AndroidManifest.xml appsins. Sjálfgefið keyrir service á aðalþræði appsins, svo þunga vinnu þarf samt að færa yfir á bakgrunnsþráð.
Android greinir á milli ræstra services, sem sinna verkefni þar til þau eru stöðvuð, og bundinna services, sem aðrir hlutar geta bundist og átt samskipti við. Foreground service sinnir vinnu sem notandinn er meðvitaður um og verður að sýna viðvarandi tilkynningu. Þar sem bakgrunnsvinna hefur áhrif á endingu rafhlöðu og afköst hefur Android smám saman innleitt takmarkanir á því hvenær öpp mega ræsa services í bakgrunni, og fyrir frestanlega vinnu mælir Google yfirleitt með WorkManager í staðinn.
Service í Android er apphluti sem vinnur verk án eigin notendaviðmóts, svo sem tónlistarspilun, samstillingu eða skráaflutninga. Hægt er að ræsa það til að sinna verkefni eða aðrir hlutar sem vilja eiga samskipti við það geta bundist því. Foreground services sýna viðvarandi tilkynningu svo notandinn viti að vinnan fari fram, og vegna takmarkana Android á bakgrunnsvinnu er WorkManager oft notað fyrir frestanleg verkefni.
Meira um Service
Service er einn af fjórum grunnhlutum Android-apps, ásamt activities, broadcast receivers og content providers. Á meðan activity sýnir skjá sem notandinn á samskipti við er service notað fyrir vinnu sem krefst ekki notendaviðmóts eða verður að halda áfram jafnvel þótt notandinn yfirgefi skjáinn. Dæmigerð dæmi eru spilun tónlistar eða hlaðvarpa, leiðsögn, upphleðsla skráa og samstilling gagna við netþjón.
Tæknilega er service klasi sem erfir frá android.app.Service og er skráður með service-einingu í AndroidManifest.xml. Kerfið stýrir lífsferli service-isins með aðferðum á borð við onCreate(), onStartCommand(), onBind() og onDestroy(). Mikilvægt er að vita að service keyrir ekki sjálfkrafa á sérstökum þræði. Sjálfgefið er kóði þess keyrður á aðalþræði appsins, svo langvinna eða teppandi vinnu þarf að færa yfir á bakgrunnsþráð, til dæmis með Kotlin coroutines, til að koma í veg fyrir að appið hætti að bregðast við.
Services má nota á ólíka vegu, sem hver hentar ólíkum þörfum:
Foreground service: Sinnir vinnu sem notandinn er meðvitaður um, svo sem tónlistarspilun eða virkri skráningu æfingar. Foreground service verður að sýna viðvarandi tilkynningu, og í nýrri Android-útgáfum verður appið að tilgreina tegund service og hafa tilheyrandi heimildir.
Background service: Sinnir vinnu sem notandinn sér ekki beint. Frá og með Android 8.0 hafa gilt strangar takmarkanir á því hvenær öpp mega ræsa slík services meðan þau eru sjálf í bakgrunni.
Bound service: Býður upp á biðlara-þjóns-viðmót þar sem aðrir hlutar, þar á meðal hlutar í öðrum öppum, geta bundist service-inu, sent beiðnir og fengið svör. Bound service lifir svo lengi sem að minnsta kosti einn hluti er bundinn því.
Einn mesti styrkur services er að þau leyfa appi að halda áfram mikilvægri vinnu án þess að hún sé bundin tilteknum skjá. Á sama tíma krefjast þau varkárni, því vinna í bakgrunni notar rafhlöðu, minni og gögn. Android hefur því smám saman innleitt reglur sem takmarka bakgrunnsvinnu, og notendur geta séð og stöðvað öpp sem keyra foreground services.
Fyrir mörg verkefni mælir Google í staðinn með WorkManager, sem er hluti af Android Jetpack. WorkManager er ætlað fyrir vinnu sem verður að framkvæma á áreiðanlegan hátt, jafnvel þótt appinu sé lokað eða tækið endurræst, og sem má fresta, svo sem upphleðslu annálaskráa eða reglubundinni samstillingu. WorkManager tekur tillit til takmarkana kerfisins og má stilla með skilyrðum á borð við nettengingu eða hleðslu.
Í stuttu máli er service rétta valið þegar app þarf að sinna yfirstandandi vinnu sem notandinn býst við að haldi áfram, eða þegar aðrir hlutar þurfa að eiga samskipti við langvinnt ferli. Með því að velja rétta tegund service, eða WorkManager þegar fresta má vinnunni, geta forritarar smíðað öpp sem eru bæði virk og fara vel með tilföng tækisins.
Algengar spurningar um Service
Hvað er service í Android?
Service er hluti í Android sem vinnur verk í bakgrunni án þess að hafa eigið notendaviðmót. Það er notað fyrir verkefni sem þurfa að halda áfram jafnvel þegar notandinn er ekki að horfa á appið, svo sem tónlistarspilun, yfirstandandi leiðsögn eða upphleðslu skráa.
Service verður að skilgreina í AndroidManifest.xml-skránni. Mikilvægt er að vita að sjálfgefið keyrir service á aðalþræði appsins. Þung verkefni þarf því samt að færa yfir á bakgrunnsþráð eða í coroutine. Í nýrri Android-útgáfum gilda einnig strangar reglur um hvenær öpp mega keyra í bakgrunni, til að spara rafhlöðu.
Hvaða tegundir service eru til í Android?
Android greinir á milli þriggja tegunda service. Foreground service sinnir verkefni sem notandinn er meðvitaður um, og það verður að sýna tilkynningu svo lengi sem það keyrir. Það er til dæmis notað fyrir tónlistarspilun eða skráningu hlaups.
Background service sinnir vinnu sem notandinn sér ekki beint. Frá og með Android 8.0 hafa gilt strangar takmarkanir á því hvenær öpp mega ræsa slík services, og mælt er með WorkManager í staðinn fyrir mörg verkefni. Bound service leyfir öðrum hlutum, svo sem activity, að bindast því og eiga samskipti við það, og það keyrir aðeins svo lengi sem eitthvað er bundið því.
Hver er munurinn á ræstu service og bound service?
Ræst service er ræst með startService eða startForegroundService og keyrir þar til það stöðvar sig sjálft eða er stöðvað. Það sinnir yfirleitt tilteknu verkefni og skilar ekki niðurstöðu beint til þess hluta sem ræsti það.
Bound service er ræst þegar annar hluti binst því með bindService. Það veitir viðmót svo hlutinn geti kallað á aðferðir og fengið svör, til dæmis activity sem stýrir tónlistarspilara. Þegar engir hlutar eru lengur bundnir því er það stöðvað. Service getur einnig verið hvort tveggja í senn ef það er bæði ræst og bundið.
Hvenær ætti að nota WorkManager í stað service?
WorkManager er sú lausn sem Google mælir með fyrir bakgrunnsvinnu sem verður að framkvæma á áreiðanlegan hátt, jafnvel þótt appinu sé lokað eða tækið endurræst. Þetta getur verið samstilling gagna, upphleðsla annálaskráa eða reglubundin hreinsun.
WorkManager virðir reglur kerfisins um rafhlöðu og bakgrunnsvirkni og má stilla þannig að það keyri aðeins þegar tækið er til dæmis á Wi-Fi eða í hleðslu. Service, sérstaklega foreground service, á frekar við þegar vinnan þarf að gerast strax og er sýnileg notandanum, svo sem tónlistarspilun eða yfirstandandi símtal. Fyrir skammvinna vinnu meðan appið er opið duga coroutines oft.
Hvers vegna verður foreground service að sýna tilkynningu?
Foreground service getur keyrt lengi og notað tilföng á borð við örgjörva, rafhlöðu og staðsetningargögn meðan notandinn er ekki með appið opið. Android krefst þess því að það sýni viðvarandi tilkynningu, svo notandinn viti að appið sé að vinna í bakgrunni.
Þetta veitir gagnsæi og gerir notandanum kleift að stöðva service-ið eða opna appið. Í nýrri Android-útgáfum verða forritarar einnig að tilgreina tegund fyrir service-ið, svo sem miðlaspilun, staðsetningu eða gagnasamstillingu, og hafa tilheyrandi heimildir. Frá og með Android 13 þarf notandinn einnig að veita heimild fyrir tilkynningum, sem hefur áhrif á hvernig tilkynningin birtist.
Hvaða takmarkanir setur Android á bakgrunnsvinnu?
Til að spara rafhlöðu og vernda friðhelgi notandans hefur Android smám saman innleitt takmarkanir á bakgrunnsvinnu. Frá og með Android 8.0 mega öpp í bakgrunni almennt ekki ræsa venjuleg background services, og kerfið stöðvar þau eftir skamma stund.
Doze mode og App Standby fresta netaðgangi og jobs þegar tækið er ekki í notkun eða appið er sjaldan notað. Nýrri útgáfur krefjast tegunda og heimilda fyrir foreground services og takmarka hvenær ræsa má þau úr bakgrunni. Aðgangur að staðsetningu í bakgrunni krefst sérstakrar heimildar. Því ætti að tímasetja bakgrunnsvinnu með WorkManager hvenær sem því verður við komið.
Service fyrir byrjendur
Service í Android-appi er eins konar ósýnilegur hjálpari sem getur haldið áfram að vinna jafnvel þegar enginn er að horfa á appið. Hugsaðu um tónlistarapp: hægt er að setja lag af stað, notandinn getur farið aftur á heimaskjáinn og skrifað skilaboð, og tónlistin heldur áfram að spila. Service sér um það. Þegar app notar service fyrir eitthvað sem notandinn ætti að vita af sýnir síminn litla tilkynningu, svo ljóst sé að appið sé að vinna. Á sama tíma sér Android til þess að öpp noti ekki of mikla orku í bakgrunni, svo rafhlaðan endist lengur.