Android Services

A tjenesten
er en komponent som kjører i bakgrunnen for å utføre langvarige operasjoner uten å samhandle med brukeren og det fungerer selv om søknaden er ødelagt. En tjeneste kan faktisk ta to stater − State DescriptionStartedA tjenesten er startet
når et program komponent, for eksempel en aktivitet, starter det ved å ringe startService ()
. Gang startet, kan en tjeneste kjøre i bakgrunnen på ubestemt tid, selv om den komponenten som startet det er destroyed.BoundA tjenesten er bundet
når et program komponent binder seg til det ved å ringe bindService () Anmeldelser . En bundet tjenesten tilbyr en klient-server-grensesnitt som lar komponenter for å samhandle med tjenesten, kan du sende forespørsler, få resultater, og selv gjøre det på tvers av prosesser med interprosesskommunikasjon (IPC).

En tjeneste har livsløpstilbakeringing metoder som du kan iverksette for å overvåke endringer i tjenestens tilstand, og du kan utføre arbeid på det aktuelle tidspunkt. Diagrammet nedenfor til venstre viser livssyklusen når tjenesten er opprettet med startService () og diagrammet til høyre viser livssyklusen når tjenesten er opprettet med bindService (): (image courtesy: android.com)

For å opprette en tjeneste, oppretter du en Java-klasse som strekker Tjenesten base klasse eller en av de eksisterende underklasser. Tjeneste
base klasse definerer ulike tilbakeringing metoder og det viktigste er gitt nedenfor. Du trenger ikke å gjennomføre alle callbacks metoder. Men det er viktig at du forstår hver enkelt og implementere de som sikre din app oppfører seg slik brukerne forventer.
CallbackDescriptiononStartCommand () Systemet kaller denne metoden når en annen komponent, for eksempel en aktivitet, ber om at tjenesten startes ved ringer startService ()
. Hvis du implementerer denne metoden, er det ditt ansvar å stoppe tjenesten når arbeidet er gjort, ved å ringe stopSelf ()
eller stopService ()
methods.onBind () Systemet kaller dette metode når en annen komponent ønsker å binde med tjenesten ved å ringe bindService ()
. Hvis du implementerer denne metoden, må du gi et grensesnitt som kundene bruker til å kommunisere med tjenesten, ved å returnere en IBinder
objekt. Du må alltid implementere denne metoden, men hvis du ikke ønsker å tillate binding, så bør du gå tilbake null
.onUnbind () Systemet kaller denne metoden når alle klienter har koblet fra en bestemt grensesnitt publisert av service.onRebind () Systemet kaller denne metoden når nye kunder har koblet til tjenesten, etter at det tidligere hadde fått beskjed om at alt hadde koblet i sin onUnbind (Intent)
.onCreate () Systemet kaller denne metoden når tjenesten er første laget med: onStartCommand ()
eller onBind ()
. Denne samtalen er nødvendig for å utføre engangs satt up.onDestroy () Systemet kaller denne metoden når tjenesten er ikke lenger i bruk og blir ødelagt. Tjenesteleverandøren bør iverksette dette til å rense opp noen ressurser som tråder, registrerte lyttere, mottakere, osv

Følgende skjelettet tjeneste demonstrerer hver av livssyklusen metoder og minus;
pakken com.tutorialspoint, import android.app. Tjenesten; import android.os.IBinder, import android.content.Intent, import android.os.Bundle; public class HelloService strekker tjeneste {/** indikerer hvordan de skal oppføre seg hvis tjenesten blir drept * /int mStartMode; /** Grensesnitt for kunder som binder * /IBinder mBinder; /** Indikerer om onRebind bør brukes * /boolean mAllowRebind; /** Kalles når tjenesten blir opprettet. * /Override Public void onCreate () {} /** Tjenesten er i ferd med, på grunn av et kall til startService () * /Override public int onStartCommand (Intent hensikt, int flagg, int startId) {return mStartMode; } /** En klient er bindende til tjenesten med bindService () * /Override offentlig IBinder onBind (Intent forsett) {return mBinder; } /** Kalles når alle kunder har ubundet med unbindService () * /Override public boolean onUnbind (Intent forsett) {return mAllowRebind; } /** Kalles når en klient er bindende til tjenesten med bindService () * /Override public void onRebind (Intent forsett) {} /** Kalles når Tjenesten er ikke lenger brukes og blir ødelagt * /Override offentlig void onDestroy () {}}
Eksempel

Dette eksempelet vil ta deg gjennom enkle trinn for å vise hvordan du kan lage din egen Android Service. Følg disse trinnene for å endre Android applikasjon vi opprettet i Hello World Eksempel
kapittel:
StepDescription1You vil bruke Android StudioIDE å lage en Android-applikasjon og navn det som Min Application
under en Pakken com.example.My Søknad
som forklart i Hello World Eksempel
chapter.2Modify hovedaktivitet fil MainActivity.java
å legge startService ()
og stopService ()
methods.3Create en ny java-fil MyService.java
under pakken com.example.My Application
. Denne filen vil ha gjennomføring av Android tjeneste knyttet methods.4Define din tjeneste i AndroidManifest.xml
fil ved hjelp av < tjeneste ... /> tag. En applikasjon kan ha en eller flere tjenester uten restrictions.5Modify innholdet i res /layout /activity_main.xml
filen standard til å omfatte to knapper i lineære layout.6No trenger å endre noen konstanter i res /values/strings.xml
fil. Android studio ta vare på strengen values7Run søknaden å lansere Android emulator og kontrollere resultatet av de endringer som er gjort i programmet.

Følgende er innholdet i den modifiserte hovedaktivitet filen src /com.example.My Søknad /MainActivity.java
. Denne filen kan inneholde hver av de grunnleggende livsløps metoder. Vi har lagt til startService () Hotell og stopService ()
metoder for å starte og stoppe tjenesten
pakken com.example.My Application;. Import android.os.Bundle, importere android .app.Activity, import android.view.Menu, import android.content.Intent, import android.view.View; public class MainActivity strekker Aktivitet {Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); }Override Public boolean onCreateOptionsMenu (Meny menyen) {getMenuInflater () blåse (R.menu.activity_main, meny).; return true; } //Metode for å starte tjenesten public void startService (Vis visning) {startService (new Intent (getBaseContext (), MyService.class)); } //Metode for å stoppe tjenesten public void stopService (Vis visning) {stopService (new Intent (getBaseContext (), MyService.class)); }}

Følgende er innholdet av src /com.example.My Søknad /MyService.java
. Denne filen kan ha gjennomføring av en eller flere metoder forbundet med Service basert på krav. For nå har vi tenkt å gjennomføre bare to metoder onStartCommand () Hotell og onDestroy ()

pakken com.example.My Application, import android.app.Service; import android.content.Intent, import android.os.IBinder, import android.widget.Toast; public class MyService strekker bruk {Override offentlig IBinder onBind (Intent arg0) {return null; }Override Public int onStartCommand (Intent hensikt, int flagg, int startId) {//La det fortsette å kjøre til den er stoppet. Toast.makeText (dette, "Tjenesten i gang", Toast.LENGTH_LONG) .vis (); returnere START_STICKY; }Override Public void onDestroy () {super.onDestroy (); Toast.makeText (dette, "Tjenesten Destroyed", Toast.LENGTH_LONG) .vis (); }}

Følgende vil den endrede innholdet i AndroidManifest.xml
fil. Her har vi lagt til < tjeneste ... /> tag å inkludere vår tjeneste:
< manifest xmlns: android = "http://schemas.android.com/apk/res/android" pakken = "com.example.MyApplication" android: version = "1" android : versjon = "1.0" > < bruker-SDK android: minSdkVersion = "13" android: targetSdkVersion = "22" /> < søknad android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: ". MainActivity" name = android: label = "@ streng /title_activity_main" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < tjenesten android: ". MyService" name = /> < /søknad > < /manifest >

Etter vil være innholdet i res /layout /activity_main.xml
fil til å omfatte to knapper:
< RelativeLayout xmlns: android = "http : //schemas.android.com/apk/res/android "xmlns: verktøy =" http://schemas.android.com/tools "android: layout_width =" match_parent "android: layout_height =" match_parent "android: paddingLeft = "@ dimen /activity_horizontal_margin" android: paddingRight = "@ dimen /activity_horizontal_margin" android: paddingTop = "@ dimen /activity_vertical_margin" android: paddingBottom = "@ dimen /activity_vertical_margin" verktøy: kontekst = ". MainActivity" > < TextView android: id = "+ id /textView1" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Eksempel på tjenester" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true "android: Tekststørrelse =" 30dp "/> < TextView android: id = "+ id /textView2" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: textcolor = "# ff87ff09" android: Tekststørrelse = "30dp "android: layout_above =" + id /imageButton "android: layout_centerHorizontal =" true "android: layout_marginBottom =" 40dp "/> < ImageButton android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /imageButton" android: src = "@ teikne /abc" android: layout_centerVertical = "true" android: layout_centerHorizontal = " true "/> < Button android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /knappen2" android: text = "Start-tjenester" android: onclick = "startService" android: layout_below = "+ id /imageButton "android: layout_centerHorizontal =" true "/> < Button android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Stopp Services" android: id = "+ id /knapp" android: onclick = "stopService" android: layout_below = "+ id /knappen2 "android: layout_alignLeft =" + id /knappen2 "android: layout_alignStart =" + id /knappen2 "android: layout_alignRight =" + id /knappen2 "android: layout_alignEnd =" + id /knappen2 "/> < /RelativeLayout >

Etter vil være innholdet i res /verdier /strings.xml
å definere to nye konstanter:
< resources > < string name = "APP_NAME" > My Application < /string > < string name = "menu_settings" > Innstillinger < /string > < string name = "title_activity_main" > MainActivity < /string > < /ressurser >

La oss prøve å kjøre vår modifiserte Hello World
søknaden vi bare endret!. Jeg antar at du hadde laget ditt AVD
mens du gjør oppsett miljø. For å kjøre programmet fra Android studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Android Studio installerer programmet på AVD og starter den, og om alt er bra med set-up og anvendelse, vil det vise følgende Emulator vindu −

Nå for å starte tjenesten, la oss klikke på Start tjeneste
knappen, vil dette starte tjenesten og som per vår programmering i onStartCommand ()
metode, en melding Tjeneste Startet
vil vises på bunnen av simulatoren som følger −

For å stoppe tjenesten, kan du klikke på Stopp tjeneste knappen
.