Android-teenuste õpetus: kuidas rakendust taustal käivitada?



See Android-teenuste õpetus aitab teil mõista, kuidas taustal toiminguid teha, näiteks muusika mängimine. Sellel pole ühtegi kasutajaliidese

Sageli kasutades nutitelefonis mitut rakendust, võiksite minna ühelt rakenduselt teisele üle, kuid tagada ka, et kõik teie rakendused jäävad taustal aktiivseks. Need pole muud kui pakutavad teenused . Nii et see artikkel Androidi teenuste õpetuse kohta aitab teil mõista, kuidas teenustega töötada.

Käsitlen järgmisi teemasid:





Mis on Android-teenused?

Teenindus on põhimõtteliselt protsess. Androidi teenus on komponent, mis töötab esitamiseks taustalpikaajalised toimingud ilma kasutajaga suhtlemata ja see töötab ka siis, kui rakendus on hävitatud.Teine rakenduse komponent võib teenust käivitada ja see töötab taustal ka siis, kui lülitate teise rakenduse.

Lisaks võib komponent end teenusega siduda, et sellega suhelda ja protsessidevahelist suhtlust teostada.



Märge: Android.app.Service on klassi ContextWrapper alaklass ja Android-teenus ei ole lõim ega eraldi protsess.

Android - teenuste elutsükkel

Android-teenuste elutsüklil võib olla kahte tüüpi teenuseid. Teenuse elutsükkel kulgeb kahel erineval viisil:

  1. Alustatud
  2. Seotud

Alustatud



mida hoiatus javascriptis teeb

Teenus käivitatakse, kui rakenduse komponent helistab startService () meetod. Kui teenus on käivitatud, võib see taustal töötada lõpmatuseni, isegi kui startimise eest vastutav komponent on hävitatud. See peatatakse, kasutades stopService () meetod. Teenus saab ennast peatada ka helistades stopSelf () meetod.

Seotud

Teenus on seotud, kui rakenduse komponent seondub sellega helistades bindService () . Seotud teenus pakub kliendi-serveri liidest, mis võimaldab komponentidel teenusega suhelda, päringuid saata ja tulemusi saada. See töötleb kogu protsessidevahelises suhtluses (IPC). Klient saab teenuse lahti siduda, helistades unindService () meetod.

Androidi teenuse elutsükkel- Androidi teenuste õpetus- Edureka

Android-teenuste artikli järgmisele jaotisele liikudes arutleme selle ületeenindusklassi meetodid.

Androidi teenuste õpetus: meetodid

On mõned meetodid, mille abil saate hõlpsalt toiminguid teha mis tahes rakenduses. Mõned neist on:

MeetodKirjeldus
onStartCommand ()

Seda meetodit nimetatakse siis, kui mõni muu komponent, näiteks tegevus, palub teenuse käivitamist helistades startService () .

Teie kohustus on teenus peatada, kui vastav töö on selle abil tehtud stopSelf () või stopService () meetodid.

lahti siduma ()

Kutsub selle meetodi, kui mõni teine ​​komponent soovib teenusega siduda, helistades bindService () .

Selle rakendamiseks peate pakkuma liidese, mida kliendid kasutavad teenusega suhtlemiseks. See tagastab väärtuse IBinder objekt. Kui te ei soovi sidumist lubada, pöörduge tagasi null .

onUnbind ()

Süsteem kutsub seda meetodit, kui kõik kliendid on teenuse avaldatud konkreetse liidese küljest lahti ühendatud.

onRebind ()

Helistab sellele meetodile, kui teenusega on ühendatud uued kliendid pärast seda, kui sellest on eelnevalt teavitatud, et kõik on lahti ühendatud onUnbind (kavatsus) .

onCreate ()

Kui teenus luuakse esmakordselt, kutsub süsteem seda meetodit onStartCommand () või lahti siduma () . See on vajalik ühekordseks seadistamiseks.

onDestroy ()

Seda meetodit nimetatakse siis, kui teenust enam ei kasutata ja see hävitatakse. Teie teenus peaks selle rakendama, et puhastada kõik ressursid, nagu teemad, registreeritud kuulajad, vastuvõtjad jne.

Skeleti kood

avalik klass MainActivity laiendab tegevust {private textView textView private BroadcastReceiver vastuvõtja = new BroadcastReceiver () {@Orride public void onReceive (konteksti kontekst, kavatsusega kavatsus) {Bundle bundle = intent.getExtras () if (kimp! = null) {String string = bundle.getString (DownloadService.FILEPATH) int resultCode = bundle.getInt (DownloadService.RESULT) if (resultCode == RESULT_OK) {Toast.makeText (MainActivity.this, 'Allalaadimine on täielik. URI allalaadimine:' + string, Toast.LENGTH_LONG) .show () textView.setText ('Allalaadimine on tehtud')} else {Toast.makeText (MainActivity.this, 'Allalaadimine ebaõnnestus, Toast.LENGTH_LONG) .show () textView.setText (' Allalaadimine ebaõnnestus ')}}}} @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) textView = (TextView) findViewById (R.id.status)} @Override protected void onResume () {super.on ) registerReceiver (vastuvõtja, uus IntentFilter (DownloadService.NOTIFICATION))} @Override kaitstud void onPause () {super.onPause () unregisterReceiver (vastuvõtja)} public void onClick (View view) {Intent intent = new Intent (this, DownloadService.class) // lisage teenuse kohta teave, millise faili alla laadida ja kuhu salvestage kavatsus.putExtra (DownloadService.FILENAME, 'index.html') intent.putExtra (DownloadService.URL, 'www.edureka.co') startService (kavatsus) textView.setText ('Teenus käivitatud')}}

Selles näites näete meetodeid nagu onCreate () , onResume () , onPause () . Need meetodid moodustavad Androidi teenuste struktuuri.

Vaatame nüüd selle Android-teenuste õpetuse praktilise osa juurdekuidas teenust luua ja sellega hakkama saada.

Demo

Vaatame, kuidas taustal muusikat mängida. Selleks kasutan Andriodi stuudio .

Samm 1

Looge uus tühi projekt. Pange oma projektile nimi, klõpsake Java kaustal ja klõpsake nuppu MainActivity . Esiteks lisage MediaPlayer nii et saate importida mängija üksikasju, näiteks algust, seada tsüklit ja nii edasi.

pakett com.example.mydemoapplication import androidx.appcompat.app.AppCompatActivity avalik klass MainActivity laiendab AppCompatActivity {@Override kaitstud void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.lay MediaPlayer.player (see, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()}}}

Märkus. Kui kasutate seda esimest korda, ärge unustage BIOS-i lubada. Seda saate teha süsteemi taaskäivitades.

Peate lisama virtuaalse seadme. Klõpsake lihtsalt nuppu Avage AVD haldur.

Valige oma valitud seade ja olete valmis minema!

See töötab ainult siis, kui ekraan on aktiivne, kuid et see rakendus isegi taustal töötaks, peate lisama veel mõned koodiread activity_main.xml faili.

2. samm

Kui olete vastava koodi käivitanud, saate rakendust käivitada ja muusikat taustal esitada, st kui mõni muu rakendus on avatud, siis see heli mängib endiselt.

Vaatame, kuidas seda saab teha.

  • Looge Java-kausta teine ​​klass ja andke sellele nimi. Siin olen ma seda kutsunud Minu teenus '.
  • See klass laiendab teenindusklassi.
  • Kui teil on teenindusklassi meetodid, rakendage meetodid klõpsates alt + sisestusklahv.
  • Pärast seda peate meetodid tühistama. Niisiis, paremklõpsake akende valikute saamiseks.
  • Looge alistamismeetodid, valige onStartCommand () ja OnDestroy ().
  • Redigeerige onStartCommand () meetodite lisamiseks järgmine kood:
MediaPlayer player = MediaPlayer.create (see, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()

Märge: Kustutage see kood MainActivity.

  • See loob vea, paludes teil avalduse eemaldada. Niisiis, eemaldage tagastamislause ja kuulutage MediaPlayer privaatseks meetodiks ja tagastage START_STICKY . See tagastab alguse oleku.
  • Lisama player.stop () aastal onDestroy () meetod.

3. samm

Minema veiseliha ja minge paigutustesse, klõpsake nuppu android_main.xml rakenduse XML-faili saamiseks.

  • Eemaldage TextView ja asendage see LinearLayoutiga ning lisage nupud. Lisage vastav kood.
<Lineaarne paigutus android: orientatsioon= 'vertikaalne' android: paigutuse_laius= 'match_parent' android: paigutuse_kõrgus= 'wrap_content' android: layout_centerVertical= 'tõene' tööriistad: ignoreeri= 'MissingConstraints'><Nupp android: id= '@ + id / buttonStart' android: tekst= 'Käivita teenus' android: paigutuse_laius= 'wrap_content' android: paigutuse_kõrgus= 'match_parent'/><Nupp android: id= '@ + id / buttonStop' android: tekst= 'Teenuse peatamine' android: paigutuse_laius= 'wrap_content' android: paigutuse_kõrgus= 'match_parent'/>Lineaarne paigutus>
  • Kui olete seda teinud, minge tagasi MainActivity klass ja lisage vastav kood, et linkida XML-fail ja Minu teenuse klass.
pakett com.example.newproject import androidx.appcompat.app.AppCompatActivity avalik klass MainActivity laiendab AppCompatActivity rakendab View.OnClickListener {private Button start, stop @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) .activity_main) start = (Button) findViewById (R.id.buttonStart) stop = (Button) findViewById (R.id.buttonStop) start.setOnClickListener (this) stop.setOnClickListener (this)} @Ava avalik void onClick (vaade) ) {if (view == start) {startService (new Intent (this, MyServiceClass.class))} else if (view == stop) {stopService (new Intent (this, MyServiceClass.class))}}}

4. samm

Kui olete klasside linkimise lõpetanud, käivitame koodi.

Märkus. Lisage teenuseklassi nimi faili AndroidManifiest.xml.

Järgmisena käivitame koodi.

Kui teenus on käivitatud, töötab see taustal ka siis, kui mõni teine ​​rakendus on avatud. Teenuse saate käivitada või peatada, klõpsates nuppe.

See on lihtne demo, kus olete õppinud Android-teenustega töötamist.

Nii jõuamegi selle artikli lõpule, mis käsitleb Android-teenuste õpetust.Loodan, et teil on selles blogis käsitletud teemadega selge.

Nüüd, kui olete meie Android-teenuste õpetuse ajaveebi läbinud, saate tutvuda Edureka lehega õppimise kiireks alustamiseks.

Kas teil on küsimusi? Ärge unustage neid mainida selle ajaveebi „Android Services Tutorial” kommentaarides. Me pöördume teie poole.