Ein Dienst ist eine Komponente, die im Hintergrund zu lang andauernden Operationen, ohne Interaktion mit dem Benutzer durchzuführen läuft und es funktioniert sogar, wenn die Anwendung gelöscht wird. Ein Dienst kann im Wesentlichen um zwei Staaten -
Staats | Bezeichnung |
---|---|
Schritte | Ein Dienst wird gestartet, wenn eine Anwendungskomponente, wie zum Beispiel einer Aktivität, beginnt es durch Aufrufen Startservice (). Einmal gestartet, kann ein Dienst im Hintergrund unbestimmte Zeit laufen, auch wenn die Komponente, die es gestartet wird zerstört. |
Gebunden | Ein Dienst wird gebunden, wenn eine Anwendung Komponente bindet, um es durch den Aufruf bindService ().Eine gebundene Service bietet eine Client-Server-Schnittstelle, die Komponenten, die mit dem Service zu interagieren, senden Sie Anfragen, Ergebnisse zu erzielen, und sogar dazu über Prozesse mit Interprozesskommunikation (IPC) ermöglicht. |
Ein Dienst hat Lebenszyklus Callback-Methoden, die Sie implementieren können, um Veränderungen in der Service-Status zu überwachen und Sie arbeiten in der adäquaten Phase durchführen. Das folgende Diagramm links zeigt den Lebenszyklus, wenn der Dienst mit Startservice (erstellt) und die Abbildung rechts zeigt den Lebenszyklus, wenn der Dienst mit bindService () erstellt: (Bild mit freundlicher Genehmigung: android.com)
Um einen Dienst zu erstellen, erstellen Sie eine Java-Klasse, die die Service-Basisklasse oder einer ihrer Unterklassen bestehende erweitert. Die Service-Basisklasse definiert verschiedene Callback-Methoden und die wichtigsten sind unten angegeben. Sie brauchen nicht, um alle Rückrufe Methoden implementieren. Allerdings ist es wichtig, dass Sie verstehen, jeden einzelnen und umzusetzen diejenigen, die sicherstellen, dass Ihre App verhält sich die Art und Weise Benutzer erwartet.
Ruf zurück | Bezeichnung |
---|---|
onStartCommand () | Das System ruft diese Methode auf, wenn eine andere Komponente, wie eine Tätigkeit, fordert, dass der Dienst gestartet werden, indem Sie Startservice (). Wenn Sie diese Methode implementieren, ist es in Ihrer Verantwortung, den Dienst zu beenden, wenn seine Arbeit getan ist, durch den Aufruf stopSelf () oder stopservice () Methoden. |
onBind () | Das System ruft diese Methode auf, wenn eine andere Komponente mit dem Service durch den Aufruf zu binden willbindService (). Wenn Sie diese Methode implementieren, müssen Sie eine Schnittstelle, die Clients verwenden, um mit dem Dienst zu kommunizieren, durch Rücksendung eines bieten IBinder Objekt. Sie müssen immer implementiert diese Methode, aber wenn Sie nicht wollen, eine Bindung zu ermöglichen, sollten Sie zurück null. |
onUnbind () | Das System ruft diese Methode, wenn alle Clients von einem durch den Dienst veröffentlicht bestimmte Schnittstelle getrennt. |
onRebind () | Das System ruft diese Methode auf, wenn neue Kunden haben mit dem Dienst verbunden, nachdem er zuvor mitgeteilt worden, daß alles in seiner getrennt onUnbind (Intent). |
onCreate () | Das System ruft diese Methode auf, wenn der Dienst zunächst mit erstellt onStartCommand () oder onBind (). Dieser Aufruf ist erforderlich, um eine einmalige Set-up durchführen. |
onDestroy () | Das System ruft diese Methode auf, wenn der Dienst nicht mehr verwendet und wird zerstört. Ihr Dienst sollte dies zu implementieren, um aufzuräumen keine Ressourcen wie Threads, registrierten Listener, Empfänger usw. |
Die folgende Skelett-Service zeigt jede der Lebenszyklusmethoden -
package com.tutorialspoint; import android.app.Service; import android.os.IBinder; import android.content.Intent; import android.os.Bundle; public class HelloService extends Service { /** indicates how to behave if the service is killed */ int mStartMode; /** interface for clients that bind */ IBinder mBinder; /** indicates whether onRebind should be used */ boolean mAllowRebind; /** Called when the service is being created. */ @Override public void onCreate() { } /** The service is starting, due to a call to startService() */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; } /** A client is binding to the service with bindService() */ @Override public IBinder onBind(Intent intent) { return mBinder; } /** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { return mAllowRebind; } /** Called when a client is binding to the service with bindService()*/ @Override public void onRebind(Intent intent) { } /** Called when The service is no longer used and is being destroyed */ @Override public void onDestroy() { } }
Beispiel
Dieses Beispiel führt Sie durch einfache Schritte zu unternehmen, um zu zeigen, wie Sie Ihren eigenen Android-Service erstellen. Befolgen Sie die folgenden Schritte aus, um die Android-Anwendung wir erstellt ändern Hallo Welt BeispielKapitel:
Schritt | Bezeichnung |
---|---|
1 | Sie werden Android StudioIDE verwenden, um ein Android-Anwendung erstellen und benennen es als meine Anwendung unter einem Paketcom.example.My Anwendung wie in der erläutert Hallo Welt BeispielKapitel. |
2 | Ändern Haupttätigkeit Datei MainActivity.java hinzufügen Startservice ()und stopservice () Methoden. |
3 | Erstellen Sie eine neue Java-Datei MyService.java unter dem Paketcom.example.My Anwendung. Diese Datei muss Umsetzung der Android-Dienst verwandte Verfahren. |
4 | Definieren Sie Ihren Service in AndroidManifest.xml Datei mit <service ... /> Tag. Eine Anwendung kann einen oder mehrere Dienste ohne Einschränkungen haben. |
5 | Ändern Sie den Standardinhalt der res / layout / activity_main.xml Datei auf zwei Tasten in lineare Layout aufzunehmen. |
6 | Es müssen keine Konstanten ändern res / Werte / strings.xml Datei.Android Studio kümmern String-Werte |
7 | Führen Sie die Anwendung auf Android-Emulator zu starten, und überprüfen Sie das Ergebnis der Änderungen in der Anwendung durchgeführt. |
Im Anschluss ist der Gehalt des modifizierten Haupttätigkeit Datei src / com.example.My Anwendung / MainActivity.java. Diese Datei kann jedes der grundlegenden Lebenszyklus Methoden umfassen. Wir haben gegebenStartservice () und stopservice () Methoden zum Starten und Stoppen des Dienstes.
package com.example.My Application; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.content.Intent; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } // Method to start the service public void startService(View view) { startService(new Intent(getBaseContext(), MyService.class)); } // Method to stop the service public void stopService(View view) { stopService(new Intent(getBaseContext(), MyService.class)); } }
Im Anschluss wird der Inhalt des src / com.example.My Anwendung /MyService.java. Diese Datei darf schon Umsetzung eines oder mehrerer Verfahren mit Service basierend auf den Anforderungen verbunden. Denn jetzt werden wir nur zwei Methoden implementieren onStartCommand () undonDestroy () -
package com.example.My Application; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class MyService extends Service { @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Let it continue running until it is stopped. Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); } }
Im Anschluss wird der modifizierte Inhalt der AndroidManifest.xml Datei. Hier haben wir hinzugefügt <service ... /> Tag, um unseren Service gehören:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.MyApplication" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="22" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name=".MyService" /> </application> </manifest>
Im Anschluss wird der Inhalt sein res / layout / activity_main.xml Datei auf zwei Tasten sind:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="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" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example of services" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point " android:textColor="#ff87ff09" android:textSize="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="@drawable/abc" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="Start Services" 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="Stop Services" android:id="@+id/button" android:onClick="stopService" android:layout_below="@+id/button2" android:layout_alignLeft="@+id/button2" android:layout_alignStart="@+id/button2" android:layout_alignRight="@+id/button2" android:layout_alignEnd="@+id/button2" /> </RelativeLayout>
Im Anschluss wird der Inhalt sein res / Werte / strings.xml zwei neue Konstanten definieren:
<resources> <string name="app_name">My Application</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string> </resources>
Lassen Sie uns versuchen, unsere modifizierten laufen Hallo Welt! Anwendung, die wir gerade geändert. Ich nehme an, Sie geschaffen hatte AVD dabei Umgebungskonfiguration. Um die App vom Android-Studio, öffnen Sie eine der Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf Ausführen-Symbol in der Werkzeugleiste. Android Studio installiert die App auf Ihrem AVD und startet es und wenn alles in Ordnung ist mit der Einrichtung und Anwendung, wird es folgende Emulator-Fenster anzuzeigen -
Nun, um Ihren Dienst zu starten, lassen Sie klicken Sie auf Start Service-Taste,wird dieser den Dienst zu starten und gemäß unserer Programmierung inonStartCommand () Methode eine Meldung Dienst Gestartet wird auf dem Boden der Simulator wie folgt aussehen -
Um den Dienst zu beenden, klicken Sie auf die Stopp-Taste Service.
0 التعليقات:
Kommentar veröffentlichen