Latest web development tutorials

Serviço Android (Service)

O serviço é um componente executado em segundo plano, a execução de uma missão de longa duração e não requer interação do usuário. Mesmo se o pedido for destruída, também continuam a trabalhar. Serviços que compreendem essencialmente dois estados -

estado descrição
começado componentes de aplicativos Android, como atividades, por meio StartService () para iniciar o serviço, o serviço é iniciado Estado. Uma vez iniciado, o serviço pode ser executado em segundo plano por tempo indeterminado, lançamento atempado dos seus componentes foram destruídas.
encadernado Quando os componentes de aplicativos Android através bindService () para ligar o serviço, o serviço é Estado vinculado. serviço de estado ligado fornece uma interface cliente-servidor para permitir que os componentes para interagir com o serviço, como o envio de um pedido para obter os resultados, mesmo para a comunicação inter-processo através do IPC.

Serviço tem uma abordagem ciclo de vida pode ser implementado para monitorar as alterações de estado de serviço pode ser realizado na fase apropriada. O seguinte mostra a esquerda quando o serviço () é criado por StartService quando o período de declaração, à direita é exibida quando o serviço () é criado pelo ciclo de vida bindService:

fotografiafotografia

Para criar o serviço, você precisa criar uma classe que herda a partir do Serviço de classe base ou de suas subclasse conhecida classes Java. classe base serviço define os diferentes métodos e o método de retorno mais importante. Você não precisa para implementar todo o método de retorno. No entanto, para entender todos os métodos é muito importante. Estes retornos de chamada pode garantir que a sua aplicação a forma desejada do usuário.

callback descrição
onStartCommand () Outros componentes (tais como a atividade) chamando StartService () para iniciar a solicitação de serviço, o sistema chama o método. Se você implementar este método, você tem a responsabilidade de parar o serviço quando o trabalho é completado por stopSelf () ou método StopService ().
onBind Quando você deseja ligar os outros componentes e serviços através bindService (), o sistema chama o método. Se você implementar este método, você precisa voltar IBinder objeto para fornecer uma interface para os clientes para se comunicar com o serviço. Você deve implementar este método, se você não permitir a ligação, basta devolver nulo.
onUnbind () Quando uma interface do cliente para todos liberação especial de serviço de interrupção, o sistema chama o método.
onRebind () Quando uma nova conexão do cliente com o serviço, e depois de ter sido desligado por onUnbind (Intenção) notificação, o sistema chama o método.
onCreate () Quando os serviços através onStartCommand () e onBind () é criada pela primeira vez, o sistema chama o método. A chamada requer a implementação de uma instalação única.
onDestroy () Quando o serviço não é mais útil ou destruídos seja, o sistema chama o método. Seu serviço precisa implementar esse método para limpar todos os recursos, tais como fios, ouvintes registrados, receptores, e assim por diante.

O seguinte serviço principal demonstra o ciclo de vida de cada método -

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

    }
}

Exemplos

Este exemplo irá mostrar-lhe passos simples sobre como criar o seu próprio serviço de Android. Siga estes passos para modificar aplicação Android criado anteriormente na seção Exemplos Olá Mundo:

passo descrição
1 Usando Android Studio IDE para criar um aplicativo Android e androidservices nome no pacote cn.uprogrammer.androidservices. Exemplos semelhantes seção Olá Mundo.
2 Modificar o principal MainActivity.java arquivo ativo adicionar StartService () eo método StopService ().
3 Criar um novo MyService.java arquivo Java no cn.uprogrammer.androidservices pacote. Este arquivo vai tornar o Android um métodos relacionados ao serviço.
4 Para definir os serviços usam <service ... /> marca no arquivo AndroidManifest.xml. Um aplicativo pode ter um ou mais serviços, sem qualquer restrição.
5 Modificar res / layout arquivo / activity_main.xml no layout padrão, layout on-line contém dois botões.
6 Não res / valores / strings.xml apresentar quaisquer constantes a ser modificado. Estúdio Android vai notar o valor de cadeia.
7 Lançar emulador Android para executar o aplicativo e verificar os resultados das alterações feitas no aplicativo.

Aqui é o principal arquivo de atividade conteúdo modificado arquivo src / cn.uprogrammer.androidservices / MainActivity.java. Este arquivo contém todos os princípios básicos de ciclo de vida. Nós adicionamos método StopService () StartService () e para iniciar e parar o serviço.

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

O seguinte é o conteúdo do src / cn.uprogrammer.androidservices / MyService.java de. Este arquivo pode implementar um ou mais serviços associados com o método baseado na demanda. Para os recém-chegados, que só percebem 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();
    }
}

Vamos modificar o arquivo AndroidManifest.xml. Aqui adicionar <service ... /> tag para incluir os nossos serviços:

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

O seguinte é o conteúdo de res / layout arquivo / activity_main.xml contém dois botões:

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

Aqui está o conteúdo de res / valores / strings.xml é definir duas novas 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>

Vamos apenas executar um modificado Meu aplicativo Application. Presumo que você criou AVD durante o ambiente de instalação. Abra o projeto no arquivo ativo, clique na barra de ferramentas fotografia Ícone para executar o aplicativo no Android Studio. Estúdio Android instalar o aplicativo no AVD e inicia-lo. Se tudo correr bem, ele será exibido na janela do emulador da seguinte forma:

fotografia

Agora clique no botão "Start Service" para iniciar o serviço, que irá executar onStartCommand escrevemos () método, um "serviço foi lançado" é exibida na parte inferior do simulador, como segue:

fotografia

Clique na parte inferior do botão de "fora de serviço", você pode interromper o serviço.