Latest web development tutorials

Android-Сервис (Service)

Сервис представляет собой компонент работает в фоновом режиме, реализация долгосрочной выполняемой задачи и не требует взаимодействия с пользователем. Даже если приложение уничтожается также до сих пор работают. Услуги, включающие по существу, два состояния -

состояние описание
Начало работы Android компоненты приложения, такие как деятельность, через StartService () для запуска службы, служба запущена состояние. После запуска, служба может работать в фоновом режиме на неопределенный срок, своевременный запуск его компонентов были уничтожены.
граница Когда Android компоненты приложения через bindService (), чтобы связать услугу, услуга Bound состояние. Связанное состояние службы предоставляет интерфейс клиент-сервер, чтобы позволить компонентам взаимодействовать с сервисом, например, отправка запроса на получение результатов, даже для межпроцессного взаимодействия через IPC.

Сервис имеет цикл подход жизни может быть реализован для мониторинга изменения статуса услуг могут быть выполнены на соответствующем этапе. Ниже на рисунке показан левый, когда служба () создается путем StartService, когда период декларации, право отображается, когда услуга () создается bindService жизненного цикла:

изображениеизображение

Для создания службы, необходимо создать класс, который наследует от базового класса обслуживания или его известных подклассов классов Java. Сервис базовый класс определяет различные методы и самый важный метод обратного вызова. Вам не нужно выполнять все метода обратного вызова. Тем не менее, чтобы понять все методы очень важно. Эти функции обратного вызова может гарантировать, что ваше приложение к желаемым образом пользователя.

Обратный звонок описание
onStartCommand () Другие компоненты (такие как деятельность) путем вызова StartService (), чтобы начать запрос на обслуживание, система вызывает метод. При реализации этого метода, вы обязаны остановить службу, когда работа завершается stopSelf () или StopService () метод.
onBind Если вы хотите, чтобы связать другие компоненты и услуги через bindService (), система вызывает метод. При реализации этого метода необходимо вернуть объект IBinder, чтобы обеспечить интерфейс для клиентов, чтобы общаться с сервисом. Вы должны реализовать этот метод, если вы не позволяют связывания, просто возвращают нуль.
onUnbind () Когда интерфейс клиента для всех специальный выпуск обслуживания прерывания, система вызывает метод.
onRebind () Когда новое подключение клиента к услуге, и после того, как он был отключен от onUnbind (Intent) уведомления, система вызывает метод.
OnCreate () Когда услуги через onStartCommand () и onBind () сначала создается, система вызывает метод. Вызов требует осуществления установки одноразовой.
OnDestroy () Когда служба уже не полезно или уничтожены, система вызывает метод. Ваша служба должны реализовать этот метод, чтобы очистить любые ресурсы, такие как потоки, зарегистрированных слушателей, приемников и так далее.

Следующий основной услугой демонстрирует жизненный цикл каждого метода -

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

    }
}

примеров

Этот пример покажет вам простые шаги, о том, как создать свой собственный Android службы. Выполните следующие действия для изменения приложения для Android, созданный ранее в примерах раздела Hello World:

шаг описание
1 Использование Android Studio IDE для создания Android приложения и имя androidservices в пакете cn.uprogrammer.androidservices. Подобные примеры Hello World раздел.
2 Измените основной активный файл MainActivity.java добавить StartService () и метод StopService ().
3 Создайте новый MyService.java файл Java в пакете cn.uprogrammer.androidservices. Этот файл будет сделать Android услугу связанных с методами.
4 Для того, чтобы определить, использовать услуги <... сервис /> в файле AndroidManifest.xml. Приложение может иметь один или несколько услуг, без каких-либо ограничений.
5 Изменение RES / макет / файл activity_main.xml в макете по умолчанию, он-лайн макет содержит две кнопки.
6 Не Рез / значения / strings.xml файл любые константы, которые будут изменены. Android-студия отметит значение строки.
7 Запуск Android эмулятор для запуска приложения и проверить результаты изменений, внесенных в приложение.

Вот основной файл активности SRC / cn.uprogrammer.androidservices / MainActivity.java файл измененное содержание. Этот файл содержит все основные концепции жизненного цикла. Мы добавили StartService () и метод StopService () для запуска и остановки службы.

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

Ниже приводится содержание SRC / cn.uprogrammer.androidservices / MyService.java из. Этот файл может реализовать один или несколько услуг, связанных с методом, основанным по первому требованию. Для новичков, мы только понимаем onStartCommand () и 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();
    }
}

Мы изменим файл AndroidManifest.xml. Здесь добавьте <... сервис /> тег, чтобы включить наши услуги:

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

Ниже приводится содержание Рез / файла макета / activity_main.xml содержит две кнопки:

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

Вот содержание Рез / значений / strings.xml является определение двух новых констант:

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

Давайте просто запустить приложение My модифицированную Application. Я предполагаю, что вы создали AVD во время установки среды. Откройте свой проект в активном файле, нажмите на панели инструментов изображение Иконка для запуска приложения в Android Studio. Android-студия установить приложение на AVD и запускает его. Если все пойдет хорошо, он будет отображаться в окне эмулятора выглядит следующим образом:

изображение

Теперь нажмите на кнопку "Start Service", чтобы запустить службу, которая будет выполнять onStartCommand мы пишем () метод, «служебные был запущен" появится сообщение в нижней части тренажера, следующим образом:

изображение

Нажмите на нижней части кнопки "вне службы", вы можете остановить службу.