Zelfstudie voor Android-services: hoe een applicatie op de achtergrond uitvoeren?



Deze Android Services-zelfstudie helpt u te begrijpen hoe u bewerkingen op de achtergrond uitvoert, zoals het afspelen van muziek.Er is geen gebruikersinterface aan toegevoegd

Als u vaak meerdere applicaties op uw smartphone gebruikt, wilt u misschien van de ene applicatie naar de andere overschakelen, maar zorgt u er ook voor dat al uw applicaties op de achtergrond actief blijven. Dit zijn niets anders dan de diensten die worden aangeboden door . Dit artikel over de zelfstudie voor Android-services helpt u dus te begrijpen hoe u met de services kunt werken.

Ik zal de volgende onderwerpen behandelen:





Wat zijn Android-services?

Service is in feite een proces. Android-dienst is een component die op de achtergrond draait om te presterenlanglopende bewerkingen zonder interactie met de gebruiker en het werkt zelfs als de applicatie wordt vernietigd.Een andere applicatiecomponent kan een service starten en deze blijft op de achtergrond draaien, zelfs als u naar een andere applicatie overschakelt.

Bovendien kan een component zichzelf aan een service binden om ermee te communiceren en ook interprocescommunicatie uitvoeren.



Opmerking: De android.app.Service is een subklasse van de ContextWrapper-klasse en Android-service is geen thread of afzonderlijk proces.

Levenscyclus van Android-services

De levenscyclus van Android-services kan twee vormen van services hebben. De levenscyclus van een dienst volgt twee verschillende paden, namelijk:

  1. Begonnen
  2. Gebonden

Begonnen



Een service wordt gestart wanneer een applicatiecomponent aanroept start dienst () methode. Eenmaal gestart, kan een service voor onbepaalde tijd op de achtergrond draaien, zelfs als het onderdeel dat verantwoordelijk is voor de start is vernietigd. Het wordt gestopt door de stop service () methode. De service kan zichzelf ook stoppen door het stopSelf () methode.

Gebonden

Een service is gebonden wanneer een applicatiecomponent eraan bindt door te bellen bindService () . Gebonden service biedt een client-serverinterface waarmee componenten kunnen communiceren met de service, verzoeken kunnen verzenden en resultaten kunnen krijgen. Het verwerkt via inter-process communicatie (IPC). De klant kan de service ongedaan maken door het unbindService () methode.

Levenscyclus van Android-services - Zelfstudie voor Android-services - Edureka

Laten we verdergaan naar het volgende gedeelte van dit artikel over Android-services, laten we de verschillende besprekenmethoden onder de serviceklasse.

Zelfstudie voor Android-services: methoden

Er zijn een paar methoden waarmee u eenvoudig bewerkingen op elke toepassing kunt uitvoeren. Sommige ervan zijn:

MethodeOmschrijving
onStartCommand ()

Deze methode wordt aangeroepen wanneer een andere component, zoals bijvoorbeeld een activiteit, vraagt ​​dat de service wordt gestart door te bellen start dienst () .

Het is uw verantwoordelijkheid om de service stop te zetten wanneer het overeenkomstige werk is gedaan door gebruik te maken van stopSelf () of stop service () methoden.

onBind()

Roept deze methode aan wanneer een andere component een verbinding met de service wil maken door te bellen bindService () .

Om dit te implementeren, moet u een interface bieden die clients gebruiken om met de service te communiceren. Het retourneert een IBinder voorwerp. Als u binding niet wilt toestaan, keer dan terug nul .

onUnbind ()

Het systeem roept deze methode aan wanneer alle clients zijn losgekoppeld van een bepaalde interface die door de service is gepubliceerd.

onRebind ()

Roept deze methode aan wanneer nieuwe clients zijn verbonden met de service nadat eerder was gemeld dat ze allemaal zijn losgekoppeld onUnbind (intentie) .

onCreate ()

Het systeem roept deze methode aan wanneer de service voor het eerst wordt gemaakt met onStartCommand () of onBind() . Het is vereist om een ​​eenmalige configuratie uit te voeren.

onDestroy ()

Deze methode wordt aangeroepen wanneer de service niet langer wordt gebruikt en wordt vernietigd. Uw service moet dit implementeren om alle bronnen zoals threads, geregistreerde luisteraars, ontvangers, enz.

Skelet code

public class MainActivity breidt activiteit uit {private TextView textView private BroadcastReceiver receiver = new BroadcastReceiver () {@Override public void onReceive (Context context, Intent intent) {Bundle bundle = intent.getExtras () if (bundle! = null) {String string = bundle.getString (DownloadService.FILEPATH) int resultCode = bundle.getInt (DownloadService.RESULT) if (resultCode == RESULT_OK) {Toast.makeText (MainActivity.this, 'Download voltooid. Download URI:' + string, Toast.LENGTH_LONG) .show () textView.setText ('Download voltooid')} else {Toast.makeText (MainActivity.this, 'Download mislukt', Toast.LENGTH_LONG) .show () textView.setText ('Downloaden mislukt')}}}} @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) textView = (TextView) findViewById (R.id.status)} @Override beschermde leegte onResume () {super.onResume ( ) registerReceiver (ontvanger, nieuwe IntentFilter (DownloadService.NOTIFICATION))} @Override protected void onPause () {super.onPause () unregisterReceiver (receiver)} public void onClick (View view) {Intent intent = new Intent (this, DownloadService.class) // voeg informatie toe voor de service welk bestand gedownload moet worden en waar naartoe store intent.putExtra (DownloadService.FILENAME, 'index.html') intent.putExtra (DownloadService.URL, 'www.edureka.co') startService (intent) textView.setText ('Service gestart')}}

In dit voorbeeld ziet u de methoden zoals onCreate () , onResume () , onPause () . Deze methoden vormen de structuur van de Services in Android.

Laten we nu eens kijken naar het praktische gedeelte van deze Android Services-zelfstudiehoe u een dienst maakt en afhandelt.

Demo

Laten we eens kijken hoe we muziek op de achtergrond kunnen afspelen. Om dat te doen, ga ik gebruiken Andriod Studio .

Stap 1

Maak een nieuw leeg project. Geef uw project een naam en klik op de Java-map en klik op het Hoofdactiviteit . Voeg eerst toe Mediaspeler zodat u de spelersdetails zoals start, de lus enzovoort kunt importeren.

pakket com.example.mydemoapplication import androidx.appcompat.app.AppCompatActivity openbare klasse MainActivity breidt AppCompatActivity uit {@Override protected void onCreate (bundel opgeslagenInstanceState) {super.onCreate (opgeslagenInstanceState) setContentView (R.layout.actlayer.create) MediaPactivity_main) (dit, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()}}

Opmerking: als u het voor de eerste keer gebruikt, vergeet dan niet het BIOS in te schakelen. U kunt dit doen door uw systeem opnieuw op te starten.

U moet een virtueel apparaat toevoegen. Klik gewoon op Open AVD-manager.

Selecteer een apparaat naar keuze en u bent klaar om te gaan!

Dit werkt alleen als het scherm actief is, maar om deze applicatie zelfs op de achtergrond te laten werken, moet u nog een paar regels code toevoegen in de activity_main.xml het dossier.

Stap 2

Zodra je de bijbehorende code hebt uitgevoerd, kun je de applicatie starten en de muziek op de achtergrond afspelen, dat wil zeggen dat als een andere applicatie wordt geopend, deze audio nog steeds wordt afgespeeld.

Laten we eens kijken hoe dit kan worden gedaan.

  • Maak een andere klasse in de Java-map en geef deze een naam. Hier heb ik het genoemd ' MyService '.
  • Deze klasse is een uitbreiding van de serviceklasse.
  • Zodra u de serviceklasse-methoden hebt, implementeert u de methoden door op te klikken alt + Enter.
  • Hierna moet u de methoden overschrijven. Dus klik met de rechtermuisknop op het venster om de opties te krijgen.
  • Genereer de overschrijfmethoden, selecteer onStartCommand () , en OnDestroy ().
  • Bewerk het onStartCommand () methoden door de volgende code toe te voegen .:
MediaPlayer player = MediaPlayer.create (dit, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()

Opmerking: Verwijder deze code in het Hoofdactiviteit.

  • Dit genereert een foutmelding waarin u wordt gevraagd de instructie te verwijderen. Dus verwijder de retourinstructie en verklaar MediaPlayer als een privémethode en keer terug START_STICKY . Dit geeft de startstatus terug.
  • Toevoegen speler.stop () in de onDestroy () methode.

Stap 3

Ga naar rundvlees en ga naar layouts, klik op android_main.xml om het XML-bestand van de applicatie op te halen.

  • Verwijder de TextView en vervang deze door de LinearLayout en voeg knoppen toe. Voeg de bijbehorende code toe.
<Lineaire indeling android: oriëntatie= 'verticaal' android: layout_width= 'match_parent' android: layout_height= 'wrap_content' android: layout_centerVertical= 'waar' hulpmiddelen:negeren= 'MissingConstraints'><Knop android:ID kaart= '@ + id / buttonStart' android:tekst= 'Start service' android: layout_width= 'wrap_content' android: layout_height= 'match_parent'/><Knop android:ID kaart= '@ + id / buttonStop' android:tekst= 'Stop service' android: layout_width= 'wrap_content' android: layout_height= 'match_parent'/>Lineaire indeling>
  • Zodra u dit heeft gedaan, gaat u terug naar het Hoofdactiviteit class en voeg de bijbehorende code toe om het XML-bestand en het MyServiceClass.
pakket com.example.newproject import androidx.appcompat.app.AppCompatActivity publieke klasse MainActivity breidt AppCompatActivity implementeert View.OnClickListener {private Button start, stop @Override protected void onCreate (Bundel opgeslagenInstanceState) {super.onCreate (savedInstanceViewState) setContent .activity_main) start = (Button) findViewById (R.id.buttonStart) stop = (Button) findViewById (R.id.buttonStop) start.setOnClickListener (dit) stop.setOnClickListener (dit)} @Override public void onClick (View view ) {if (view == start) {startService (new Intent (this, MyServiceClass.class))} else if (view == stop) {stopService (new Intent (this, MyServiceClass.class))}}}

Stap 4

Als u klaar bent met het koppelen van de klassen, gaan we de code uitvoeren.

Opmerking: voeg de naam van de serviceklasse toe aan het bestand AndroidManifiest.xml.

Laten we vervolgens de code uitvoeren.

Zodra u de service start, wordt deze op de achtergrond uitgevoerd, zelfs als een andere toepassing wordt geopend. U kunt de service starten of stoppen door op de knoppen te klikken.

Dit is een eenvoudige demo waarin u heeft geleerd hoe u met Android-services moet werken.

Hiermee komen we aan het einde van dit artikel over 'Android Services Tutorial'.Ik hoop dat je duidelijk bent met de onderwerpen die in deze blog aan bod komen.

hoe je een willekeurige string in java genereert

Nu je onze Android Services Tutorial-blog hebt doorlopen, kun je Edureka's om snel met leren te beginnen.

Heeft u vragen? Vergeet ze niet te vermelden in de commentaren van deze 'Android Services Tutorial' -blog. Wij zullen er op terugkomen.