Latest web development tutorials

Android Service (Service)

Der Service ist eine Komponente, die im Hintergrund laufen, die Umsetzung einer lang laufenden Aufgabe und keine Benutzerinteraktion erfordern. Selbst wenn die Anwendung auch funktionieren noch zerstört wird. Dienstleistungen, die im wesentlichen zwei Staaten -

Zustand Beschreibung
gestartet Android-Anwendungskomponenten, wie Aktivitäten, durch den Start (), um den Dienst zu starten, wird der Dienst Zustand gestartet. Einmal gestartet, kann der Dienst im Hintergrund laufen auf unbestimmte Zeit, rechtzeitige Einführung seiner Komponenten wurden zerstört.
gebunden Wenn Android Anwendungskomponenten durch bindService (), um den Dienst zu binden, ist der Service Bound Zustand. Gebundenen Zustand Dienst bietet eine Client-Server-Schnittstelle die Komponenten zu ermöglichen, mit dem Dienst zu interagieren, wie eine Anfrage zu senden, die Ergebnisse zu erhalten, auch für die Kommunikation zwischen Prozessen durch IPC.

Service hat einen Lebenszyklus-Ansatz implementiert werden können Service-Statusänderungen überwachen können auf der entsprechenden Stufe durchgeführt werden. Im Folgenden wird die linke, wenn der Dienst () von den Start erstellt wird, wenn die Anmeldefrist der rechten Seite angezeigt wird, wenn der Dienst () durch bindService Lebenszyklus erstellt wird:

BildBild

Um den Dienst zu erstellen, müssen Sie eine Klasse erstellen, die von der Basisklasse-Service oder seiner bekannten Unterklasse von Java-Klassen erbt. Service-Basisklasse definiert die verschiedenen Methoden und die wichtigsten Callback-Methode. Sie brauchen nicht alle der Callback-Methode zu implementieren. Dennoch sind alle Verfahren zu verstehen, ist sehr wichtig. Diese Rückrufe können sicherstellen, dass Ihre Anwendung auf die gewünschte Art und Weise des Benutzers.

Rückruf Beschreibung
onStartCommand () Andere Komponenten (wie zB Aktivität) von den Start () aufrufen, die Dienstanfrage zu starten, ruft das System das Verfahren. Wenn Sie diese Methode implementieren, haben Sie die Verantwortung, den Dienst zu beenden, wenn die Arbeit von stopSelf abgeschlossen ist () oder Stopservice () -Methode.
onBind Wenn Sie die anderen Komponenten und Dienstleistungen durch bindService () binden möchten, ruft das System die Methode. Wenn Sie diese Methode implementieren, müssen Sie IBinder Objekt zurückzugeben, eine Schnittstelle zu schaffen für die Kunden mit dem Service zu kommunizieren. Sie müssen diese Methode implementieren, wenn Sie nicht verbindlich erlauben, einfach null zurück.
onUnbind () Wenn eine Kundenschnittstelle für alle speziellen Interrupt-Service-Release, ruft das System die Methode.
onRebind () Wenn ein neuer Client-Verbindung zu dem Dienst, und nachdem er durch onUnbind (Intent) Benachrichtigung getrennt worden ist, ruft das System die Methode.
onCreate () Wenn Dienstleistungen durch onStartCommand () und onBind () erstellt wird, ruft das System die Methode. Der Aufruf erfordert die Durchführung einer einmaligen Installation.
onDestroy () Wenn der Dienst nicht mehr sinnvoll oder zerstört ist, ruft das System das Verfahren. Ihr Service benötigen zur Durchführung dieses Verfahrens alle Ressourcen zu bereinigen, wie Fäden, registrierte Hörer, Empfänger und so weiter.

Die folgenden Haupt Service zeigt den Lebenszyklus der einzelnen Methoden -

package cn.uprogrammer.androidservices;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

public class HelloService extends Service {

    /** 标识服务如果被杀死之后的行为 */
    int mStartMode;

    /** 绑定的客户端接口 */
    IBinder mBinder;

    /** 标识是否可以使用onRebind */
    boolean mAllowRebind;

    /** 当服务被创建时调用. */
    @Override
    public void onCreate() {

    }

    /** 调用startService()启动服务时回调 */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return mStartMode;
    }

    /** 通过bindService()绑定到服务的客户端 */
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    /** 通过unbindService()解除所有客户端绑定时调用 */
    @Override
    public boolean onUnbind(Intent intent) {
        return mAllowRebind;
    }

    /** 通过bindService()将客户端绑定到服务时调用*/
    @Override
    public void onRebind(Intent intent) {

    }

    /** 服务不再有用且将要被销毁时调用 */
    @Override
    public void onDestroy() {

    }
}

Beispiele

Dieses Beispiel zeigt Ihnen, einfachen Schritten, wie Sie Ihren eigenen Android-Dienst zu erstellen. Befolgen Sie diese Schritte Android-Anwendung zu ändern, die zuvor in der Hallo Welt Abschnitt Beispiele erstellt:

Schritt Beschreibung
1 Android Studio IDE Mit einem Android-Anwendung und den Namen androidservices bei cn.uprogrammer.androidservices Paket zu erstellen. Ähnliche Beispiele Hallo Welt Abschnitt.
2 Ändern Sie die wichtigsten aktiven Datei MainActivity.java hinzufügen Startservice () und Stopservice () -Methode.
3 Erstellen Sie eine neue Java-Datei MyService.java in Paket cn.uprogrammer.androidservices. Diese Datei wird machen Android eine servicebezogene Methoden.
4 So definieren Sie die Dienste nutzen <service ... /> Tag in der AndroidManifest.xml Datei. Eine Anwendung kann ohne Einschränkung einen oder mehrere Dienste haben.
5 Ändern res / Layout / activity_main.xml Datei im Standard-Layout, Online-Layout enthält zwei Tasten.
6 Nicht res / Werte / strings.xml alle Konstanten Datei geändert werden. Android Studio wird den String-Wert beachten.
7 Starten Sie Android-Emulator die Anwendung und überprüfen Sie die Ergebnisse von Änderungen an der Anwendung auszuführen.

Hier ist die Haupttätigkeit Datei src / cn.uprogrammer.androidservices / MainActivity.java Datei geändert Inhalt. Diese Datei enthält alle grundlegenden Lebenszyklus-Ansatz. Schließlich haben wir den Start () und Stopservice () -Methode zu starten und beenden Sie den Dienst.

package cn.uprogrammer.androidservices;

import android.app.Activity;
import android.os.Bundle;
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.menu_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 Folgenden ist der Inhalt von src / cn.uprogrammer.androidservices / MyService.java von. Diese Datei kann einen oder mehrere Dienste mit dem Verfahren auf Nachfrage basiert assoziiert implementieren. Für Einsteiger, erkennen wir nur onStartCommand () und onDestroy () -

package cn.uprogrammer.androidservices;

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, "服务已经启动", Toast.LENGTH_LONG).show();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "服务已经停止", Toast.LENGTH_LONG).show();
    }
}

Wir werden AndroidManifest.xml Datei ändern. Hier fügen <service ... /> Tag unsere Dienstleistungen umfassen:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.androidservices"
    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 Folgenden ist der Inhalt der res / Layout / activity_main.xml Datei enthält zwei Schaltflächen:

<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="Android 服务实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="启动服务"
        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="停止服务"
        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>

Hier ist der Inhalt der res / Werte / strings.xml zwei neue Konstanten zu definieren:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Android Services</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="menu_settings">Settings</string>
    <string name="action_settings">Settings</string>

</resources>

Lassen Sie uns einfach eine modifizierte My Application Anwendung ausführen. Ich nehme an, Sie AVD während der Installationsumgebung erstellt haben. Öffnen Sie das Projekt in der aktiven Datei, klicken Sie in der Symbolleiste auf Bild Icon ausführen, um die Anwendung im Android Studio. Android Studio installieren Sie die Anwendung auf dem AVD und gestartet. Wenn alles gut geht, wird es auf dem Emulator-Fenster angezeigt werden, wie folgt:

Bild

Klicken Sie nun auf "Start Service", um den Dienst zu starten, die ausgeführt wird onStartCommand wir schreiben () -Methode, um einen "Dienst gestartet wurde" erscheint am unteren Rand des Simulators, wie folgt:

Bild

Klicken Sie auf den Boden des "out-of-Service" klicken, können Sie den Dienst beenden.