Mikä on service, ja miten se toimii sovelluskehityksessä?

Service on Androidin komponentti, joka voi suorittaa työtä ilman omaa käyttöliittymää, kuten musiikin toistamista, datan synkronointia tai käynnissä olevaa tiedostonsiirtoa. Yhdessä activityjen, broadcast receivereiden ja content providereiden kanssa servicet ovat yksi Androidin neljästä sovelluksen peruskomponentista, ja muiden tavoin ne on rekisteröitävä sovelluksen AndroidManifest.xml-tiedostoon. Oletusarvoisesti service toimii sovelluksen pääsäikeessä, joten raskas työ on silti siirrettävä taustasäikeeseen.

Android erottaa toisistaan käynnistetyt servicet, jotka suorittavat tehtävän, kunnes ne pysäytetään, ja sidotut servicet, joihin muut komponentit voivat sitoutua ja joiden kanssa ne voivat viestiä. Foreground service suorittaa työtä, josta käyttäjä on tietoinen, ja sen on näytettävä pysyvä ilmoitus. Koska taustatyö vaikuttaa akunkestoon ja suorituskykyyn, Android on vähitellen ottanut käyttöön rajoituksia sille, milloin sovellukset saavat käynnistää servicejä taustalla, ja lykättävään työhön Google suosittelee tyypillisesti sen sijaan WorkManageria.

Service on Androidissa sovelluskomponentti, joka suorittaa työtä ilman omaa käyttöliittymää, kuten musiikin toistoa, synkronointia tai tiedostonsiirtoja. Se voidaan käynnistää suorittamaan tehtävä, tai muut komponentit, jotka haluavat viestiä sen kanssa, voivat sitoutua siihen. Foreground servicet näyttävät pysyvän ilmoituksen, jotta käyttäjä tietää työn olevan käynnissä, ja Androidin taustatyörajoitusten vuoksi lykättäviin tehtäviin käytetään usein WorkManageria.

Lisää Service:stä

Service on yksi Android-sovelluksen neljästä peruskomponentista yhdessä activityjen, broadcast receivereiden ja content providereiden kanssa. Siinä missä activity näyttää näkymän, jonka kanssa käyttäjä on vuorovaikutuksessa, serviceä käytetään työhön, joka ei vaadi käyttöliittymää tai jonka on jatkuttava, vaikka käyttäjä poistuisi näkymästä. Tyypillisiä esimerkkejä ovat musiikin tai podcastien toistaminen, navigointi, tiedostojen lataaminen palvelimelle ja datan synkronointi palvelimen kanssa.

Teknisesti service on luokka, joka periytyy android.app.Service-luokasta ja rekisteröidään service-elementillä AndroidManifest.xml-tiedostoon. Järjestelmä ohjaa servicen elinkaarta metodien, kuten onCreate(), onStartCommand(), onBind() ja onDestroy(), kautta. On tärkeää tietää, että service ei automaattisesti toimi erillisessä säikeessä. Oletusarvoisesti sen koodi suoritetaan sovelluksen pääsäikeessä, joten pitkäkestoinen tai estävä työ on siirrettävä taustasäikeeseen, esimerkiksi Kotlinin korutiineilla, jotta sovellus ei lakkaa reagoimasta.

Serviceja voidaan käyttää eri tavoin, joista kukin sopii eri tarpeisiin:

  1. Foreground service: Suorittaa työtä, josta käyttäjä on tietoinen, kuten musiikin toistoa tai aktiivisen treenin seurantaa. Foreground servicen on näytettävä pysyvä ilmoitus, ja uudemmissa Android-versioissa sovelluksen on ilmoitettava servicen tyyppi ja sillä on oltava siihen liittyvät käyttöoikeudet.

  2. Background service: Suorittaa työtä, jota käyttäjä ei näe suoraan. Android 8.0:sta lähtien on ollut tiukat rajoitukset sille, milloin sovellukset saavat käynnistää tällaisia servicejä ollessaan itse taustalla.

  3. Bound service: Tarjoaa asiakas–palvelin-rajapinnan, jossa muut komponentit, myös muiden sovellusten komponentit, voivat sitoutua serviceen, lähettää pyyntöjä ja vastaanottaa vastauksia. Bound service elää niin kauan kuin vähintään yksi komponentti on sitoutunut siihen.

Yksi servicejen suurimmista vahvuuksista on, että niiden avulla sovellus voi jatkaa tärkeää työtä ilman, että se on sidottu tiettyyn näkymään. Samalla ne vaativat huolellisuutta, koska taustalla tehtävä työ kuluttaa akkua, muistia ja dataa. Siksi Android on vähitellen ottanut käyttöön sääntöjä, jotka rajoittavat taustatyötä, ja käyttäjät voivat nähdä ja pysäyttää sovellukset, jotka käyttävät foreground servicejä.

Moniin tehtäviin Google suosittelee sen sijaan WorkManageria, joka on osa Android Jetpackia. WorkManager on tarkoitettu työhön, joka on suoritettava luotettavasti, vaikka sovellus suljettaisiin tai laite käynnistettäisiin uudelleen, ja jota voidaan lykätä, kuten lokitiedostojen lataamiseen palvelimelle tai säännölliseen synkronointiin. WorkManager ottaa järjestelmän rajoitukset huomioon, ja sille voidaan määrittää ehtoja, kuten verkkoyhteys tai lataus.

Yhteenvetona service on oikea valinta, kun sovelluksen on suoritettava jatkuvaa työtä, jonka käyttäjä odottaa jatkuvan, tai kun muiden komponenttien on viestittävä pitkäkestoisen prosessin kanssa. Valitsemalla oikean service-tyypin tai WorkManagerin, kun työtä voidaan lykätä, kehittäjät voivat rakentaa sovelluksia, jotka ovat sekä toimivia että laitteen resursseja säästäviä.

Usein kysyttyjä kysymyksiä Service:stä

Mikä on service Androidissa?

Service on Androidin komponentti, joka suorittaa työtä taustalla ilman omaa käyttöliittymää. Sitä käytetään tehtäviin, joiden on jatkuttava silloinkin, kun käyttäjä ei katso sovellusta, kuten musiikin toistamiseen, käynnissä olevaan navigointiin tai tiedostojen lataamiseen palvelimelle.

Service on määriteltävä AndroidManifest.xml-tiedostossa. On tärkeää tietää, että oletusarvoisesti service toimii sovelluksen pääsäikeessä. Raskaat tehtävät on siksi silti siirrettävä taustasäikeeseen tai korutiiniin. Uudemmissa Android-versioissa on myös tiukat säännöt sille, milloin sovellukset saavat toimia taustalla, akun säästämiseksi.

Millaisia servicejä Androidissa on?

Android erottaa toisistaan kolme service-tyyppiä. Foreground service suorittaa tehtävää, josta käyttäjä on tietoinen, ja sen on näytettävä ilmoitus niin kauan kuin se on käynnissä. Sitä käytetään esimerkiksi musiikin toistoon tai juoksulenkin seurantaan.

Background service suorittaa työtä, jota käyttäjä ei näe suoraan. Android 8.0:sta lähtien on ollut tiukat rajoitukset sille, milloin sovellukset saavat käynnistää tällaisia servicejä, ja moniin tehtäviin suositellaan sen sijaan WorkManageria. Bound service antaa muiden komponenttien, kuten activityn, sitoutua siihen ja viestiä sen kanssa, ja se on käynnissä vain niin kauan kuin jokin on sitoutunut siihen.

Mikä on käynnistetyn servicen ja sidotun servicen ero?

Käynnistetty service käynnistetään startService– tai startForegroundService-metodilla, ja se on käynnissä, kunnes se pysäyttää itsensä tai se pysäytetään. Se suorittaa tyypillisesti tietyn tehtävän eikä palauta tulosta suoraan sen käynnistäneelle komponentille.

Sidottu service käynnistyy, kun toinen komponentti sitoutuu siihen bindService-metodilla. Se tarjoaa rajapinnan, jotta komponentti voi kutsua metodeja ja vastaanottaa vastauksia, esimerkiksi kun activity ohjaa musiikkisoitinta. Kun yksikään komponentti ei ole enää sitoutunut, se pysäytetään. Service voi olla myös molempia yhtä aikaa, jos se on sekä käynnistetty että sidottu.

Milloin WorkManageria tulisi käyttää servicen sijaan?

WorkManager on Googlen suosittelema ratkaisu taustatyöhön, joka on suoritettava luotettavasti, vaikka sovellus suljettaisiin tai laite käynnistettäisiin uudelleen. Tämä voi olla datan synkronointia, lokitiedostojen lataamista palvelimelle tai säännöllistä siivousta.

WorkManager noudattaa järjestelmän akkua ja taustatoimintaa koskevia sääntöjä, ja se voidaan asettaa toimimaan vain esimerkiksi silloin, kun laite on Wi-Fi-verkossa tai latautumassa. Service, erityisesti foreground service, on tarkoituksenmukaisempi silloin, kun työn on tapahduttava heti ja se näkyy käyttäjälle, kuten musiikin toistossa tai käynnissä olevassa puhelussa. Lyhytkestoiseen työhön sovelluksen ollessa auki korutiinit riittävät usein.

Miksi foreground servicen on näytettävä ilmoitus?

Foreground service voi olla käynnissä pitkään ja käyttää resursseja, kuten prosessoria, akkua ja sijaintitietoja, vaikka käyttäjällä ei ole sovellusta auki. Siksi Android vaatii sitä näyttämään pysyvän ilmoituksen, jotta käyttäjä tietää sovelluksen tekevän työtä taustalla.

Tämä tuo läpinäkyvyyttä ja antaa käyttäjän pysäyttää servicen tai avata sovelluksen. Uudemmissa Android-versioissa kehittäjien on myös ilmoitettava servicelle tyyppi, kuten median toisto, sijainti tai datan synkronointi, ja sovelluksella on oltava siihen liittyvät käyttöoikeudet. Android 13:sta lähtien käyttäjän on myös myönnettävä lupa ilmoituksille, mikä vaikuttaa siihen, miten ilmoitus näytetään.

Mitä rajoituksia Android asettaa taustatyölle?

Akun säästämiseksi ja käyttäjän yksityisyyden suojaamiseksi Android on vähitellen ottanut käyttöön taustatyötä koskevia rajoituksia. Android 8.0:sta lähtien taustalla olevat sovellukset eivät yleensä saa käynnistää tavallisia background servicejä, ja järjestelmä pysäyttää ne lyhyen ajan kuluttua.

Doze-tila ja App Standby lykkäävät verkkoyhteyksiä ja jobeja, kun laitetta ei käytetä tai sovellusta käytetään harvoin. Uudemmat versiot vaativat foreground serviceille tyypit ja käyttöoikeudet ja rajoittavat sitä, milloin ne saa käynnistää taustalta. Sijainnin käyttö taustalla vaatii erillisen käyttöoikeuden. Siksi taustatyö tulisi aina kun mahdollista ajoittaa WorkManagerilla.

Service for dummies

Android-sovelluksen service on eräänlainen näkymätön apuri, joka voi jatkaa työtään silloinkin, kun kukaan ei katso sovellusta. Ajatellaan musiikkisovellusta: kappaleen voi käynnistää, palata aloitusnäytölle ja kirjoittaa viestin, ja musiikki jatkuu. Siitä huolehtii service. Kun sovellus käyttää serviceä johonkin, mistä käyttäjän pitäisi tietää, puhelin näyttää pienen ilmoituksen, jotta on selvää, että sovellus tekee työtä. Samalla Android huolehtii siitä, etteivät sovellukset kuluta liikaa virtaa taustalla, jotta akku kestää pidempään.

Jätä kommentti