Skip to content

Commit f3cf76d

Browse files
authored
Merge pull request #68 from Lobynya/service
add service page
2 parents 4bdfbed + 0086d5d commit f3cf76d

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

learning/android/service.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Сервисы
2+
3+
## Android Service Component (in progress)
4+
5+
[Services overview](https://developer.android.com/guide/components/services).
6+
7+
### Виды сервисов
8+
9+
Сервисы - один из компонентов андроида. Все сервисы деляться на два вида: [Foreground](https://developer.android.com/guide/components/foreground-services) и Background.
10+
11+
Foreground - сервис выполняет функционал заметный для пользователя, и может продолжать работу даже если пользователь свернул приложение. Например проигрывать музыку, или отображать плавающее окошко с видео. Сервис обязан показать плашку уведомления о том, что он работает, это уведомление нельзя убрать пока сервис запущен.
12+
Для использования Foreground сервиса требуется специальный пермишен
13+
14+
```xml
15+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
16+
```
17+
18+
И foreground и Background сервисы запускается на main потоке
19+
20+
Background - сервис выполняет функционал скрытый от пользователя. Начиная с API-26 фоновые сервисы имеют некоторые ограничения при свернутом приложении, например они не могут получить геолокацию
21+
22+
Хотя [IntentService](https://developer.android.com/reference/android/app/IntentService.html) и запускается на главном потоке, но для обработки onHandleIntent он запускает отдельный поток. Аналогично [JobIntentService](https://developer.android.com/reference/androidx/core/app/JobIntentService.html) обрабатывает enqueueWork на отдельном потоке
23+
24+
Не зависимо от вида сервиса он должен быть объявлен в манифесте приложения
25+
26+
Как и любой андроид компонент сервис является точкой входа в приложение, помимо этого при нехватке памяти в первую очередь система избавится от приложений [не имеющих сервисы](https://medium.com/androiddevelopers/who-lives-and-who-dies-process-priorities-on-android-cb151f39044f)
27+
28+
### Запуск сервиса
29+
30+
Сервис можно запустить двумя способами: через startService() или через bindService()
31+
32+
Разница состоит в том, что при запуске через bindService() сервис будет жить до тех пор пока у него есть хотябы один подписчик, после того как от сервиса отпишутся все подписчики он будет уничтожен. При запуске через startService() сервис будет жить не зависимо от количества подписчиков, пока не будет вызвана команда для его остановки.
33+
Жизненный цикл сервиса не зависит от жизненного цикла компонента который его запустил.
34+
Если сервис был запущен через startService(), на него все равно можно [подписаться](https://developer.android.com/guide/components/bound-services)
35+
36+
### Обращение к сервису из другого процесса
37+
38+
Обращение к сервису из другого процесса возможно, для этого следует использовать [Android Interface Definition Language ](https://developer.android.com/guide/components/aidl)
39+
40+
### Примеры использования сервисов
41+
42+
[Сервис для скачивания файлов](https://gitlab.icerockdev.com/marmalato/marmalato-android/-/blob/develop/app/src/main/java/com/icerockdev/marmalato/feature/loader/LoaderService.kt)
43+
Сервис в своем потоке скачивает файлы, может сообщать процент скачивания для отображения прогресса в активити
44+
45+
[Стартовый сервис helga](https://gitlab.icerockdev.com/helga/helga-client/-/blob/dev/client-service/src/main/java/com/icerockdev/helga/client/service/HelgaService.kt)
46+
Сервис проверяет авторизацию пользователя, запускает остальные сервисы приложения(ожидание звонков, сервис для нотификаций календаря и др.)
47+
48+
[Сервис для приема входящих звонков](https://gitlab.icerockdev.com/helga/helga-client/-/blob/dev/client-contacts/src/main/java/com/icerockdev/helga/client/contacts/feature/invitation/CallInvitationService.kt)
49+
При входящем звонке показывает плавающее окно-уведомление
50+
51+
[Сервис для мониторинга геолокации](https://gitlab.icerockdev.com/crossway/crossway-mobile/-/blob/develop/mpp-library/feature/map/src/androidMain/kotlin/ru/crossway/feature/map/LocationMonitoringService.kt)
52+
Foreground сервис для отслежтвания геолокации

0 commit comments

Comments
 (0)