Hva er en service, og hvordan fungerer den i apputvikling?

En service er en komponent i Android som kan utføre arbeid uten å ha et eget brukergrensesnitt, som avspilling av musikk, synkronisering av data eller en pågående filoverføring. Sammen med activities, broadcast receivers og content providers er services en av de fire grunnleggende appkomponentene i Android, og i likhet med de andre må de registreres i appens AndroidManifest.xml. Som standard kjører en service på appens hovedtråd, så tungt arbeid må fortsatt flyttes til en bakgrunnstråd.

Android skiller mellom startede services, som utfører en oppgave til de stoppes, og bundne services, som andre komponenter kan binde seg til og kommunisere med. En forgrunnsservice utfører arbeid som brukeren er klar over, og må vise et vedvarende varsel. Fordi bakgrunnsarbeid påvirker batteritid og ytelse, har Android gradvis innført begrensninger for når apper kan starte services i bakgrunnen, og for utsettbart arbeid anbefaler Google som regel WorkManager i stedet.

En service i Android er en appkomponent som utfører arbeid uten eget brukergrensesnitt, som musikkavspilling, synkronisering eller filoverføringer. Den kan startes for å utføre en oppgave eller bindes av andre komponenter som ønsker å kommunisere med den. Forgrunnsservices viser et vedvarende varsel slik at brukeren vet at arbeidet pågår, og på grunn av Androids begrensninger for bakgrunnsarbeid brukes WorkManager ofte til utsettbare oppgaver.

Mer om Service

En service er en av de fire grunnleggende komponentene i en Android-app, sammen med activities, broadcast receivers og content providers. Mens en activity viser en skjerm som brukeren samhandler med, brukes en service til arbeid som ikke krever et brukergrensesnitt, eller som må fortsette selv om brukeren forlater skjermen. Typiske eksempler er avspilling av musikk eller podkaster, navigasjon, opplasting av filer og synkronisering av data med en server.

Teknisk sett er en service en klasse som arver fra android.app.Service og registreres med et service-element i AndroidManifest.xml. Systemet styrer servicens livssyklus gjennom metoder som onCreate(), onStartCommand(), onBind() og onDestroy(). Det er viktig å vite at en service ikke automatisk kjører på en egen tråd. Som standard utføres koden på appens hovedtråd, så langvarig eller blokkerende arbeid må flyttes til en bakgrunnstråd, for eksempel med Kotlin-korutiner, for å hindre at appen slutter å svare.

Services kan brukes på ulike måter, som hver passer til ulike behov:

  1. Forgrunnsservice: Utfører arbeid som brukeren er klar over, som musikkavspilling eller aktiv sporing av en treningsøkt. En forgrunnsservice må vise et vedvarende varsel, og i nyere Android-versjoner må appen deklarere en servicetype og ha de tilhørende tillatelsene.

  2. Bakgrunnsservice: Utfører arbeid som brukeren ikke ser direkte. Siden Android 8.0 har det vært strenge begrensninger for når apper kan starte slike services mens de selv er i bakgrunnen.

  3. Bundet service: Tilbyr et klient-server-grensesnitt der andre komponenter, også i andre apper, kan binde seg til servicen, sende forespørsler og motta svar. En bundet service lever så lenge minst én komponent er bundet til den.

En av de største styrkene ved services er at de lar en app fortsette viktig arbeid uten at det er knyttet til en bestemt skjerm. Samtidig krever de varsomhet, fordi arbeid i bakgrunnen bruker batteri, minne og data. Android har derfor gradvis innført regler som begrenser bakgrunnsarbeid, og brukere kan se og stoppe apper som kjører forgrunnsservices.

For mange oppgaver anbefaler Google i stedet WorkManager, som er en del av Android Jetpack. WorkManager er beregnet på arbeid som må utføres pålitelig, selv om appen lukkes eller enheten startes på nytt, og som kan utsettes, som opplasting av loggfiler eller periodisk synkronisering. WorkManager tar hensyn til systemets begrensninger og kan konfigureres med betingelser som nettverkstilkobling eller lading.

Oppsummert er en service det riktige valget når en app må utføre pågående arbeid som brukeren forventer skal fortsette, eller når andre komponenter må kommunisere med en langvarig prosess. Ved å velge riktig type service, eller WorkManager når arbeidet kan utsettes, kan utviklere bygge apper som er både funksjonelle og skånsomme mot enhetens ressurser.

Ofte stilte spørsmål om Service

Hva er en service i Android?

En service er en komponent i Android som utfører arbeid i bakgrunnen uten å ha et eget brukergrensesnitt. Den brukes til oppgaver som må fortsette selv når brukeren ikke ser på appen, som avspilling av musikk, pågående navigasjon eller opplasting av filer.

En service må deklareres i filen AndroidManifest.xml. Det er viktig å vite at en service som standard kjører på appens hovedtråd. Tunge oppgaver må derfor fortsatt flyttes til en bakgrunnstråd eller en korutine. I nyere Android-versjoner finnes det også strenge regler for når apper kan kjøre i bakgrunnen, for å spare batteri.

Hvilke typer services finnes i Android?

Android skiller mellom tre typer services. En forgrunnsservice utfører en oppgave som brukeren er klar over, og den må vise et varsel så lenge den kjører. Den brukes for eksempel til musikkavspilling eller sporing av en løpetur.

En bakgrunnsservice utfører arbeid som brukeren ikke ser direkte. Siden Android 8.0 har det vært strenge begrensninger for når apper kan starte slike services, og WorkManager anbefales i stedet for mange oppgaver. En bundet service lar andre komponenter, som en activity, binde seg til den og kommunisere med den, og den kjører bare så lenge noe er bundet til den.

Hva er forskjellen mellom en startet service og en bundet service?

En startet service startes med startService eller startForegroundService og kjører til den stopper seg selv eller blir stoppet. Den utfører typisk en bestemt oppgave og returnerer ikke et resultat direkte til komponenten som startet den.

En bundet service startes når en annen komponent binder seg til den med bindService. Den tilbyr et grensesnitt slik at komponenten kan kalle metoder og motta svar, for eksempel en activity som styrer en musikkspiller. Når ingen komponenter lenger er bundet, stoppes den. En service kan også være begge deler samtidig hvis den både er startet og bundet.

Når bør WorkManager brukes i stedet for en service?

WorkManager er Googles anbefalte løsning for bakgrunnsarbeid som må utføres pålitelig, selv om appen lukkes eller enheten startes på nytt. Det kan være synkronisering av data, opplasting av loggfiler eller periodisk opprydding.

WorkManager respekterer systemets regler for batteri og bakgrunnsaktivitet og kan settes til å kjøre bare når enheten for eksempel er på Wi-Fi eller lader. En service, særlig en forgrunnsservice, er mer aktuell når arbeidet må skje umiddelbart og er synlig for brukeren, som musikkavspilling eller en pågående samtale. For kortvarig arbeid mens appen er åpen, er korutiner ofte tilstrekkelig.

Hvorfor må en forgrunnsservice vise et varsel?

En forgrunnsservice kan kjøre lenge og bruke ressurser som prosessor, batteri og posisjonsdata mens brukeren ikke har appen åpen. Android krever derfor at den viser et vedvarende varsel, slik at brukeren vet at appen arbeider i bakgrunnen.

Dette gir åpenhet og lar brukeren stoppe servicen eller åpne appen. I nyere Android-versjoner må utviklere også deklarere en type for servicen, som medieavspilling, posisjon eller datasynkronisering, og ha de tilhørende tillatelsene. Fra Android 13 må brukeren også gi tillatelse til varsler, noe som påvirker hvordan varselet vises.

Hvilke begrensninger legger Android på bakgrunnsarbeid?

For å spare batteri og beskytte brukerens personvern har Android gradvis innført begrensninger for bakgrunnsarbeid. Siden Android 8.0 kan apper i bakgrunnen som hovedregel ikke starte vanlige bakgrunnsservices, og systemet stopper dem etter kort tid.

Doze-modus og App Standby utsetter nettverkstilgang og jobber når enheten ikke er i bruk, eller når appen sjelden brukes. Nyere versjoner krever typer og tillatelser for forgrunnsservices og begrenser når de kan startes fra bakgrunnen. Tilgang til posisjon i bakgrunnen krever en egen tillatelse. Bakgrunnsarbeid bør derfor planlegges med WorkManager når det er mulig.

Service for dummies

En service i en Android-app er en slags usynlig hjelper som kan fortsette å arbeide selv når ingen ser på appen. Tenk på en musikkapp: En sang kan startes, brukeren kan gå tilbake til startskjermen og skrive en melding, og musikken fortsetter å spille. Det er en service som sørger for det. Når en app bruker en service til noe brukeren bør vite om, viser telefonen et lite varsel, slik at det er tydelig at appen arbeider. Samtidig sørger Android for at apper ikke bruker for mye strøm i bakgrunnen, slik at batteriet varer lenger.

Legg igjen en kommentar