Android - Dienstleistungen

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 -
StaatsBezeichnung
SchritteEin 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.
GebundenEin 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ückBezeichnung
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:
SchrittBezeichnung
1Sie 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.
3Erstellen Sie eine neue Java-Datei MyService.java unter dem Paketcom.example.My Anwendung. Diese Datei muss Umsetzung der Android-Dienst verwandte Verfahren.
4Definieren 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.
6Es müssen keine Konstanten ändern res / Werte / strings.xml Datei.Android Studio kümmern String-Werte
7Fü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 Android StudioRun IconAusfü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 -
Android Dienst Demo
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 -
Android starten
Um den Dienst zu beenden, klicken Sie auf die Stopp-Taste Service.
Share on Google Plus

About ptjqatar

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

0 التعليقات:

Kommentar veröffentlichen