Similar presentations:
Служба - компонент приложения. Services overview
1.
Services overview2.
Services overviewСлужба - это компонент приложения, который может выполнять
длительные операции в фоновом режиме. Он не предоставляет
пользовательского интерфейса. После запуска служба может
продолжать работать в течение некоторого времени, даже после
того, как пользователь переключится на другое приложение
3.
Types of Services• Foreground
• Background
• Bound
4.
Foreground serviceСлужба «переднего плана» выполняет какую-либо
операцию, заметную для пользователя. Например, аудиоприложение будет использовать службу «переднего плана» для
воспроизведения аудиодорожки.
Службы переднего плана должны отображать уведомление.
Службы переднего плана продолжают работать, даже если
пользователь не взаимодействует с приложением.
5.
Background serviceФоновая служба выполняет операцию, которую
пользователь не замечает напрямую. Например,
если приложение использует службу для сжатия
своего хранилища, то это обычно является фоновой
службой.
6.
Bound serviceСлужба привязывается, когда компонент приложения
связывается с ней, вызывая bindService(). Привязанный
сервис предлагает клиент-серверный интерфейс, который
позволяет компонентам взаимодействовать с сервисом,
отправлять запросы, получать результаты и даже делать
это между процессами с помощью межпроцессного
взаимодействия (IPC)
7.
Choosing between a service and a threadСлужба - это просто компонент, который может работать в
фоновом режиме, даже когда пользователь не взаимодействует с
вашим приложением, поэтому создавать службу следует только в
том случае, если вам это необходимо.
Если вам нужно выполнить работу вне основного потока, но только
в то время, когда пользователь взаимодействует с вашим
приложением, вам следует создать новый поток в контексте
другого компонента приложения.
8.
The basicsЧтобы создать сервис, вы должны создать подкласс Service
или использовать один из его существующих подклассов. В вашей
реализации вы должны переопределить некоторые методы
обратного вызова, которые обрабатывают ключевые аспекты
жизненного цикла службы, и предоставить механизм,
позволяющий компонентам привязываться к службе, если это
необходимо. Это наиболее важные методы обратного вызова,
которые вы должны переопределить:
• onStartCommand()
• onBind()
• onCreate()
• onDestroy()
9.
Declaring a service in the manifest<manifest ... >
...
<application ... >
<service android:name=".ExampleService" />
...
</application>
</manifest>
10.
Creating a started serviceЗапущенный сервис - это сервис, который
запускает другой компонент, вызывая startService(),
что приводит к вызову метода onStartCommand()
сервиса.Когда служба запущена, она имеет
жизненный цикл, не зависящий от компонента,
который ее запустил. Сервис может работать в
фоновом режиме неограниченное время, даже если
запустивший его компонент будет уничтожен.
11.
Extending the Service classpublic class HelloService extends Service {
private Looper serviceLooper;
private ServiceHandler serviceHandler;
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// Restore interrupt status.
Thread.currentThread().interrupt();
}
stopSelf(msg.arg1);
}
}
12.
@Overridepublic void onCreate() {
HandlerThread thread = new HandlerThread("ServiceStartArguments",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(serviceLooper);
}
13.
Starting a servicestartService(new Intent(this, HelloService.class));
14.
Stopping a serviceЗапущенная служба должна управлять своим жизненным
циклом. То есть система не останавливает и не уничтожает службу,
если только ей не нужно восстановить системную память, и служба
продолжает работать после возврата onStartCommand(). Служба
должна остановиться сама, вызвав stopSelf(), или другой
компонент может остановить ее, вызвав stopService().После
запроса на остановку с помощью stopSelf() или stopService()
система уничтожает службу как можно скорее.
15.
Creating a bound serviceСвязанный сервис - это сервис, который позволяет компонентам
приложения привязываться к нему, вызывая bindService() для
создания долгосрочного соединения. Обычно он не позволяет
компонентам запускать его вызовом startService().Создайте
связанный сервис, если вы хотите взаимодействовать с ним из
действий и других компонентов вашего приложения или передать
часть функциональности вашего приложения другим приложениям
через межпроцессное взаимодействие (IPC).
16.
Sending notifications to the userКогда служба запущена, она может уведомлять пользователя о
событиях с помощью уведомлений на панели закусок или в строке
состояния.
Уведомление на панели быстрого доступа - это сообщение,
которое появляется на поверхности текущего окна лишь на
мгновение, после чего исчезает. Уведомление в строке состояния
представляет собой значок в строке состояния с сообщением,
которое пользователь может выбрать, чтобы совершить действие
(например, начать работу).
17.
Managing the lifecycle of a serviceЗапущенная служба: Служба создается, когда другой компонент
вызывает startService(). Затем служба запускается на неопределенный
срок и должна сама себя остановить, вызвав stopSelf(). Другой
компонент также может остановить службу, вызвав stopService(). Когда
служба остановлена, система уничтожает ее.
Связанный сервис: Служба создается, когда другой компонент (клиент)
вызывает bindService(). Затем клиент связывается со службой через
интерфейс IBinder. Клиент может закрыть соединение, вызвав
unbindService(). Несколько клиентов могут связываться с одним и тем же
сервисом, и когда все они отвязываются, система уничтожает сервис.
Службе не нужно останавливаться самой.
18.
Implementing the lifecycle callbacksКак и у activity, у службы есть методы обратного
вызова жизненного цикла, которые вы можете
реализовать, чтобы отслеживать изменения в
состоянии службы и выполнять работу в нужное
время. Следующий базовый сервис демонстрирует
каждый из методов жизненного цикла:
19.
public class ExampleService extends Service {int startMode;
// indicates how to behave if the service is killed
IBinder binder; // interface for clients that bind
boolean allowRebind; // indicates whether onRebind should be used
@Override
public void onCreate() {
// The service is being created
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) { return startMode; }
@Override
public IBinder onBind(Intent intent) {}
@Override
public boolean onUnbind(Intent intent) {}
@Override
public void onRebind(Intent intent) {}
@Override
public void onDestroy() {}
}
programming