
- •КАЛУЖСКИЙ ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО
- •Службы (Сервисы)
- •Жизненный цикл служб
- •Жизненный цикл служб
- •Службы
- •Жизненный цикл служб
- •Создание службы
- •Опишем класс MyService, наследующий класс Service
- •activity_main.xml
- •Опишем класс MainActivity
- •Службу необходимо прописать в манифесте. При нажатии Add, появится список в котором нужно
- •Основная форма приложения:
- •Исходный код службы
- •Лог работы службы :
- •Передача данных в службу. Остановка службы.
- •activity_main.xml
- •Создадим класс MainActivity
- •Создадим класс MyService
- •//продолжение
- ••В onCreate создаем некий объект someRes. Этот объект будет использоваться сервисом в обработках
- •Результаты:
- •Как видно, всего заняло 15 секунд на выполнение данной задачи. А если изменить
- •Результаты:
- •Обратная связь с помощью PendingIntent
- •Шаги 1, 2 и 3
- •Обратная связь с помощью BroadcastReceiver
- •Подключение к службе
- •Опишем файл компоновки приложения
- •Опишем класс приложения MainActivity
- •//продолжение
- •Опишем класс службы MyService
- •//продолжение
- •Описание
- •Метод downInterval получает на вход значение, уменьшает interval на это значение (но так,
- •Скриншоты

КАЛУЖСКИЙ ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО
ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э. БАУМАНА»
Факультет "Фундаментальных наук"
Кафедра "Программного обеспечения ЭВМ, информационных технологий и прикладной математики"
Службы
Калуга
Службы (Сервисы)
Службы в 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));
}
}