Latest web development tutorials

Servizio Android (Servizio)

Il servizio è un componente in esecuzione in background, la realizzazione di una missione di lunga corsa e non richiede l'interazione dell'utente. Anche se l'applicazione è distrutto anche ancora lavorare. Servizi che comprende essenzialmente due stati -

stato descrizione
iniziato componenti di applicazioni Android, come ad esempio attività, attraverso StartService () per avviare il servizio, il servizio viene avviato stato. Una volta avviato, il servizio può essere eseguito in background a tempo indeterminato, tempestivo lancio dei suoi componenti sono stati distrutti.
legato Quando i componenti di applicazioni Android attraverso bindService () per associare il servizio, il servizio è stato legato. servizio di stato legato fornisce un'interfaccia client-server per consentire ai componenti di interagire con il servizio, come ad esempio l'invio di una richiesta per ottenere i risultati, anche per la comunicazione tra processi attraverso IPC.

Servizio ha un approccio del ciclo di vita può essere implementato per monitorare i cambiamenti di stato di servizio possono essere effettuate al momento opportuno. Quanto segue mostra la sinistra quando il servizio () è stato creato da StartService quando il periodo di dichiarazione, il diritto viene visualizzato quando il servizio () è stato creato da bindService ciclo di vita:

immagineimmagine

Per creare il servizio, è necessario creare una classe che eredita dalla classe di servizio di base o delle sue classi Java noto sottoclasse. classe base di servizio definisce i diversi metodi e il più importante metodo di callback. Non è necessario implementare tutto il metodo di callback. Tuttavia, per comprendere tutti i metodi è molto importante. Tali eventi possono garantire che l'applicazione al modo desiderato l'utente.

richiamata descrizione
onStartCommand () Altri componenti (come ad esempio l'attività) chiamando StartService () per avviare la richiesta di servizio, il sistema chiama il metodo. Se si implementa questo metodo, si ha la responsabilità di interrompere il servizio quando il lavoro è completato da stopSelf () o StopService () metodo.
onBind Quando si desidera associare gli altri componenti e servizi attraverso bindService (), il sistema chiama il metodo. Se si implementa questo metodo, è necessario tornare all'oggetto IBinder per fornire un'interfaccia per i clienti di comunicare con il servizio. È necessario implementare questo metodo, se non si consente vincolante, semplicemente restituire null.
onUnbind () Quando un interfaccia cliente per tutti speciale versione di servizio di interrupt, il sistema chiama il metodo.
onRebind () Quando una nuova connessione client al servizio, e dopo che è stato scollegato dal onUnbind (Intent) la notifica, il sistema chiama il metodo.
onCreate () Quando i servizi attraverso onStartCommand () e onBind () viene creato, il sistema chiama il metodo. La chiamata richiede l'implementazione di una singola installazione.
OnDestroy () Quando il servizio non è più utile o distrutti è, il sistema chiama il metodo. Il vostro servizio è necessario implementare questo metodo per pulire eventuali risorse, come le discussioni, gli ascoltatori registrati, ricevitori, e così via.

Il seguente servizio principale mostra il ciclo di vita di ogni metodo -

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() {

    }
}

Esempi

Questo esempio mostra semplici passaggi su come creare il proprio servizio di Android. Seguire questa procedura per modificare un'applicazione Android creata in precedenza nella sezione Ciao Mondo Esempi:

passo descrizione
1 Utilizzando Android Studio IDE per creare un'applicazione Android e nome androidservices al pacchetto cn.uprogrammer.androidservices. Esempi simili sezione Ciao Mondo.
2 Modificare il file principale MainActivity.java attiva aggiungere StartService () e il metodo StopService ().
3 Creare un nuovo file di MyService.java Java in cn.uprogrammer.androidservices pacchetto. Questo file verrà rendere Android un servizio relativi metodi.
4 Per definire i servizi utilizzano <service ... /> tag nel file AndroidManifest.xml. Un'applicazione può avere uno o più servizi senza alcuna restrizione.
5 Modificare res / layout di file / activity_main.xml nel layout di default, il layout in linea contiene due pulsanti.
6 Non res / valori / strings.xml qualsiasi file costanti da modificare. Android Studio noterà il valore della stringa.
7 Avviare emulatore di Android per eseguire l'applicazione e verificare i risultati delle modifiche apportate all'applicazione.

Ecco il principale file di attività di file src / cn.uprogrammer.androidservices / MainActivity.java contenuto modificato. Questo file contiene tutte l'approccio di base del ciclo di vita. Abbiamo aggiunto StartService () e il metodo StopService () per avviare e arrestare il servizio.

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));
    }
}

Quello che segue è il contenuto di src / cn.uprogrammer.androidservices / MyService.java di. Questo file può implementare uno o più servizi associati con il metodo in base alla domanda. Per i nuovi arrivati, ci rendiamo conto solo onStartCommand () e 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();
    }
}

Noi modificare il file AndroidManifest.xml. Qui aggiungere <service ... /> tag per includere i nostri servizi:

<?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>

Quello che segue è il contenuto della res / file di layout / activity_main.xml contiene due pulsanti:

<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>

Ecco il contenuto della res / valori / strings.xml è di definire due nuove costanti:

<?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>

Diciamo solo eseguire un modificata mia applicazione Application. Presumo che hai creato AVD durante l'ambiente di installazione. Aprire il progetto nel file attivo, fare clic sulla barra degli strumenti immagine Icona per eseguire l'applicazione in Android Studio. Android Studio installare l'applicazione sul AVD e lo avvia. Se tutto va bene, sarà visualizzata la finestra di emulazione come segue:

immagine

Ora clicchiamo sul pulsante "Start Service" per avviare il servizio, che eseguirà onStartCommand scriviamo il metodo (), un "servizio è stato lanciato" il messaggio appare nella parte inferiore del simulatore, come segue:

immagine

Fare clic sulla parte inferiore del pulsante "fuori servizio", è possibile interrompere il servizio.