Latest web development tutorials

Servicio de Android (Servicio)

El servicio es un componente que se ejecuta en segundo plano, la ejecución de una tarea de larga duración y no requiere la intervención del usuario. Incluso si la aplicación se destruye también siguen trabajando. Los servicios comprenden esencialmente dos estados -

estado descripción
iniciado componentes de la aplicación para Android, tales como actividades, a través de StartService () para iniciar el servicio, el servicio se inicia de estado. Una vez iniciado, el servicio puede ejecutarse en segundo plano de forma indefinida, oportuna puesta en marcha de sus componentes han sido destruidos.
encuadernado Cuando los componentes de aplicaciones a través de Android bindService () para vincular el servicio, el servicio es estado ligado. Servicio estado ligado proporciona una interfaz de cliente-servidor para permitir que los componentes interactúan con el servicio, tales como el envío de una solicitud para obtener los resultados, incluso para la comunicación entre procesos a través del IPC.

Servicio tiene un enfoque de ciclo de vida puede ser implementado para controlar los cambios de estado de servicio se pueden realizar en la fase adecuada. A continuación se muestra la izquierda cuando el servicio () es creado por StartService cuando el período de la declaración, la derecha aparece cuando el servicio () es creado por ciclo de vida bindService:

imagenimagen

Para crear el servicio, es necesario crear una clase que hereda de la clase base de servicio o de sus subclases de las clases de Java conocida. clase base de servicio define los diferentes métodos y el método de devolución de llamada más importante. No es necesario para ejecutar la totalidad del método de devolución de llamada. Sin embargo, para entender todos los métodos es muy importante. Estas devoluciones de llamada pueden asegurarse de que su aplicación a la forma deseada del usuario.

devolución de llamada descripción
onStartCommand () Otros componentes (tales como la actividad) llamando StartService () para iniciar la solicitud de servicio, el sistema llama al método. Si implementa este método, usted tiene la responsabilidad de detener el servicio cuando el trabajo se completa con stopSelf () o el método stopService ().
onBind Cuando se desea enlazar los otros componentes y servicios a través de bindService (), el sistema llama al método. Si implementa este método, es necesario devolver objeto IBinder para proporcionar una interfaz para que los clientes se comunican con el servicio. Debe implementar este método, si no permiten la unión, sólo tiene que volver nula.
onUnbind () Cuando una interfaz de cliente para toda la edición especial de servicio de interrupción, el sistema llama al método.
onRebind () Cuando una nueva conexión de cliente con el servicio, y después de que se haya desconectado por onUnbind (Intención) la notificación, el sistema llama al método.
onCreate () Cuando se crea por primera vez servicios a través de onStartCommand () y onBind (), el sistema llama al método. La llamada requiere la implementación de una instalación de una sola vez.
OnDestroy () Cuando el servicio ya no es útil o destruido, el sistema llama al método. Su servicio es necesario para poner en práctica este método para limpiar cualquier recurso, como hilos, oyentes registrados, receptores, y así sucesivamente.

El siguiente servicio principal muestra el 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() {

    }
}

Ejemplos

Este ejemplo le mostrará los pasos sencillos sobre cómo crear su propio servicio de Android. Siga estos pasos para modificar la aplicación Android creado previamente en la sección de Ejemplos Hello World:

paso descripción
1 El uso de Android Studio IDE para crear una aplicación para Android y androidservices nombre al paquete cn.uprogrammer.androidservices. sección Hello World ejemplos similares.
2 Modificar el archivo activo principal MainActivity.java añadir StartService () y el método stopService ().
3 Crear un nuevo archivo Java en MyService.java cn.uprogrammer.androidservices paquete. Este expediente hará Android a métodos relacionados con el servicio.
4 Para definir el uso de los servicios <servicio ... /> en el archivo AndroidManifest.xml. Una aplicación puede tener uno o más servicios sin ninguna restricción.
5 Modificar el archivo res / layout / activity_main.xml en el diseño predeterminado, diseño en pantalla contiene dos botones.
6 No res / valores / strings.xml cualquier archivo de constantes que se desea modificar. Android Studio en cuenta el valor de cadena.
7 Lanzar emulador de Android para ejecutar la aplicación y verificar los resultados de los cambios realizados en la aplicación.

Esta es la principal actividad de los archivos archivo src / cn.uprogrammer.androidservices / MainActivity.java contenido modificado. Este archivo contiene todos los planteamientos básicos del ciclo de vida. Hemos añadido método stopService () StartService () y para iniciar y detener el servicio.

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

El siguiente es el contenido de src / cn.uprogrammer.androidservices / MyService.java de. Este archivo se puede aplicar uno o más servicios asociados con el método basado en la demanda. Para los recién llegados, sólo nos damos cuenta onStartCommand () y 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 a modificar el archivo AndroidManifest.xml. A continuación añadir <servicio ... /> para incluir nuestros servicios:

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

El siguiente es el contenido de la resolución de archivo / diseño / activity_main.xml contiene dos botones:

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

Este es el contenido de res / valores / strings.xml es definir dos nuevas 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 a ejecutar una aplicación My aplicación modificada. Asumo que ha creado AVD en el entorno de instalación. Abra el proyecto en el archivo activo, haga clic en la barra de herramientas imagen Icono para ejecutar la aplicación en Android Studio. Android Estudio instalar la aplicación en la AVD y la inicia. Si todo va bien, se mostrará en la ventana de emulación de la siguiente manera:

imagen

Ahora haga clic en el botón "Iniciar servicio" para iniciar el servicio, el cual ejecutará onStartCommand escribimos método (), un "servicio se ha puesto en marcha" mensaje aparece en la parte inferior del simulador, de la siguiente manera:

imagen

Haga clic en la parte inferior del botón de "fuera de servicio", puede detener el servicio.