Latest web development tutorials

Service Android (Service)

Le service est un composant en cours d'exécution en arrière-plan, la mise en œuvre d'une tâche de longue durée et ne nécessite pas d'interaction utilisateur. Même si l'application est détruite aussi travailler encore. Services comprenant essentiellement deux états -

état description
commencé composants d'applications Android, telles que les activités, par startService () pour démarrer le service, le service est Démarré Etat. Une fois démarré, le service peut fonctionner en arrière-plan indéfiniment, lancement en temps opportun de ses composants ont été détruits.
lié Lorsque les composants de l'application Android par bindService () pour lier le service, le service est l'état Bound. Service Bound de l'Etat fournit une interface client-serveur pour permettre aux composants d'interagir avec le service, comme l'envoi d'une requête pour obtenir les résultats, même pour la communication inter-processus par IPC.

Service a une approche du cycle de vie peut être mis en œuvre pour surveiller les changements d'état de service peuvent être effectuées au stade approprié. Ce qui suit montre la gauche lorsque le service () est créé par startService lorsque la période de déclaration, le droit est affiché lorsque le service () est créé par cycle de vie bindService:

imageimage

Pour créer le service, vous devez créer une classe qui hérite de la fonction ou de ses sous-classe connue des classes Java classe de base. classe de base de service définit les différentes méthodes et la méthode de rappel le plus important. Vous n'êtes pas obligé de mettre en œuvre l'ensemble de la méthode de rappel. Néanmoins, pour comprendre toutes les méthodes est très important. Ces rappels peuvent faire en sorte que votre application à la manière souhaitée de l'utilisateur.

Callback description
onStartCommand () D'autres composants (tels que l'activité) en appelant startService () pour commencer la demande de service, le système appelle la méthode. Si vous implémentez cette méthode, vous avez la responsabilité d'arrêter le service lorsque le travail est complété par stopSelf () ou StopService () méthode.
onBind Lorsque vous voulez lier les autres composants et services à travers bindService (), le système appelle la méthode. Si vous implémentez cette méthode, vous devez retourner l'objet IBinder pour fournir une interface pour les clients de communiquer avec le service. Vous devez mettre en œuvre cette méthode, si vous ne permettez pas contraignant, il suffit de retourner null.
onUnbind () Quand une interface client pour toute version de service spécial d'interruption, le système appelle la méthode.
onRebind () Quand une nouvelle connexion client au service, et après qu'il a été déconnecté par onUnbind (intention) notification, le système appelle la méthode.
onCreate () Lorsque les services par le biais de onStartCommand () et onBind () est créé, le système appelle la méthode. L'appel nécessite la mise en œuvre d'une installation unique.
OnDestroy () Lorsque le service est plus utile ou détruit, le système appelle la méthode. Votre service a besoin pour mettre en œuvre cette méthode pour nettoyer toutes les ressources, tels que les fils, les auditeurs enregistrés, récepteurs, et ainsi de suite.

Le principal service suivant illustre le cycle de vie de chaque méthode -

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

    }
}

Exemples

Cet exemple va vous montrer les étapes simples sur la façon de créer votre propre service Android. Suivez ces étapes pour modifier l'application Android précédemment créé dans la section Exemples Bonjour tout le monde:

étape description
1 Utilisation de Studio Android IDE pour créer une application Android et nom androidservices au package cn.uprogrammer.androidservices. Des exemples similaires de section Bonjour tout le monde.
2 Modifier la principale MainActivity.java de fichier actif ajouter startService () et la méthode StopService ().
3 Créer un nouveau MyService.java de fichiers Java dans cn.uprogrammer.androidservices de package. Ce fichier fera Android un Méthodes liées au service.
4 Pour définir les services utilisent <service ... /> dans le fichier AndroidManifest.xml. Une application peut comporter un ou plusieurs services sans aucune restriction.
5 Modifier res / layout / fichier activity_main.xml dans la mise en page par défaut, la mise en page en ligne contient deux boutons.
6 Ne pas res / valeurs / strings.xml fichier des constantes à modifier. Android Studio noter la valeur de chaîne.
7 Lancez l'émulateur Android pour exécuter l'application et de vérifier les résultats des modifications apportées à l'application.

Voici le fichier src / cn.uprogrammer.androidservices / MainActivity.java de contenu principal de fichier d'activité modifié. Ce fichier contient toutes l'approche de base du cycle de vie. Nous avons ajouté startService () et la méthode StopService () pour démarrer et arrêter le service.

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

Ce qui suit est le contenu de src / cn.uprogrammer.androidservices / MyService.java de. Ce fichier peut mettre en œuvre un ou plusieurs services associés à la méthode basée sur la demande. Pour les nouveaux arrivants, nous nous rendons compte que onStartCommand () et 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();
    }
}

Nous allons modifier le fichier AndroidManifest.xml. Ici ajouter <service ... /> pour inclure nos services:

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

Ce qui suit est le contenu de res / layout / fichier activity_main.xml contient deux boutons:

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

Voici le contenu de res / valeurs / strings.xml est de définir deux nouvelles constantes:

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

Disons simplement exécuter une application My Application modifiée. Je suppose que vous avez créé AVD au cours de l'environnement d'installation. Ouvrez votre projet dans le fichier actif, cliquez sur la barre d'outils image Icône pour exécuter l'application Dans Android Studio. Android studio installer l'application sur la DAV et démarre. Si tout va bien, il sera affiché sur la fenêtre de l'émulateur comme suit:

image

Maintenant, cliquez sur le bouton "Démarrer le service" pour démarrer le service, qui exécutera onStartCommand nous écrivons () méthode, un «service a été lancé" un message apparaît au bas du simulateur, comme suit:

image

Cliquez sur le bas du bouton "hors service", vous pouvez arrêter le service.