Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РАК и ГАМ / Services.pptx
Скачиваний:
4
Добавлен:
10.02.2015
Размер:
622.32 Кб
Скачать

КАЛУЖСКИЙ ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО

ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э. БАУМАНА»

Факультет "Фундаментальных наук"

Кафедра "Программного обеспечения ЭВМ, информационных технологий и прикладной математики"

Службы

Калуга

Службы (Сервисы)

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

Клиентские приложения устанавливают подключение к службам и используют это подключение для взаимодействия со службой. С одной и той же службой могут связывать множество клиентских приложений.

Жизненный цикл служб

Служба имеет свои методы жизненного цикла:

Void onCreate();

Void onStart( Intent intent );

Void onDestroy()

В полном жизненном цикле службы существует два вложенных цикла:

Полная жизнь службы – промежуток между временем вызова метода onCreate() и временем onDestroy().

Активная жизнь службы – начинается с вызова метода onStart(). Этому методу передается объект Intent, который передавали в StartService().

!!! Начиная с API 5 версии метод onStart обозначен как deprecated, вместо него используется onStartCommand

Жизненный цикл служб

Из клиентского приложения службу можно запустить вызовом метода Context.startService(), остановить через вызов Context.stopService(). Служба может остановить сама себя, вызывая методы Service.stopSelf() или Service.stopSelfResult().

Можно установить подключение к работающей службе и использовать это подключение для взаимодействия со службой. Подключение устанавливают вызовом метода Context.bindService() и закрывают Context.unbindService(). Если служба была остановлена, вызов метода bindService, может ее запустить.

Службы

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

Ibinder onBind(Intent intent);

Boolean onUnbind(Intent intent);

Void onRebind(Intent intent).

В метод обратного вызова onBind передают объект Intent, который был параметром bindService, а в метод обратного вызова onUnbind() – объект Intent, который передавали в метод unBindService

Жизненный цикл служб

Создание службы

Рассмотрим создание, запуск и остановку некоторой простой службы.

Опишем класс MyService, наследующий класс Service

import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log;

public class MyService extends Service {

final String LOG_TAG = "myLogs";

public void onCreate() { super.onCreate(); Log.d(LOG_TAG, "onCreate");

}

public int onStartCommand(Intent intent, int flags, int startId) { Log.d(LOG_TAG, "onStartCommand");

someTask();

return super.onStartCommand(intent, flags, startId);

}

public void onDestroy() { super.onDestroy(); Log.d(LOG_TAG, "onDestroy");

}

//Пока не используется, но требуется реализация

public IBinder onBind(Intent intent) { Log.d(LOG_TAG, "onBind");

return null;

}

//работа самого сервиса

void someTask() {

}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">

<Button android:id="@+id/btnStart"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickStart" android:text="@string/start"> </Button>

<Button android:id="@+id/btnStop"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickStop" android:text="@string/stop"> </Button>

<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true"> </ProgressBar>

</LinearLayout>

Опишем класс MainActivity

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;

public class MainActivity extends Activity { final String LOG_TAG = "myLogs";

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

}

public void onClickStart(View v) { startService(new Intent(this, MyService.class));

}

public void onClickStop(View v) {

stopService(new Intent(this, MyService.class));

}

}

Соседние файлы в папке РАК и ГАМ