#### 참고
[JobIntentService runs periodically?](https://stackoverflow.com/questions/51668607/jobintentservice-runs-periodically)
[Continually Running Background Service](https://stackoverflow.com/questions/51289236/continually-running-background-service/51360718#51360718)
#### Comparison to other libraries
Library
Minimum API
Requires Google Play
Service API1
Custom retry strategies
Framework JobScheduler
21
No
JobScheduler
Yes
Firebase JobDispatcher
14
Yes
JobScheduler
Yes
evernote/android-job
14
No2
Custom
Yes
Android WorkManager3
14
No2
Custom
Yes
---
### Service와 Schedule
- [Service](https://developer.android.com/guide/components/services?hl=ko) : 동작구현 및 실행.
- **JobIntentService는 Service 다, 정기적 반복으로 실행하는 Scheduler가 아니다.**
- [Scheduler](https://developer.android.com/topic/performance/scheduling) : 주기및 조건설정을 통한 정기적 반복 실행.
### 이슈
- Service의 백그라운드 실행제한 이슈와 더불어,
- 정기적 반복으로 Service실행 필요함.
### 백그라운드 서비스 제한에대한 해결시도, 또다른 문제
- Android 8.0 (API 레벨 26)에서, 백그라운드 서비스 제한됨.
JobScheduler를 통해 동작구현 및 실행 및 반복작업의 구현이 가능하나,
Lollipop+(21)부터 적용 가능함.
- **JobIntentService**
- Oreo+(이상),Oreo-(이하)의 동작구현 및 실행(Service)은 가능함.
- Oreo+ : JobScheduler.enqueue,
JobInfo.setOverrideDeadline(0)로 고정
- Oreo- : Context.startService ( Background service )
- **JobIntentService는 Service 다, 정기적 반복으로 실행하는 Scheduler가 아니다.**
- **Foreground Sevice를 이용하고, Notification을 설정해서 백그라운드 제한을 우회할 수 있다.**
- [Notification을 이용한 Foreground Service](https://stackoverflow.com/questions/15758980/android-service-needs-to-run-always-never-pause-or-stop/15775964#15775964)
- **JobIntentService**,
**Foreground Sevice** 으로 동작구현 및 실행까지 가능함.
- #### 하지만, 주기(반복적)를 갖고, 실행을 적용하는것은 안됨.
### 정기적 반복실행의 적용은
- Alarm Manager : https://developer.android.com/reference/android/app/AlarmManager
- Job Scheduler : https://developer.android.com/reference/android/app/job/JobScheduler
- Evernote-Jobs : https://github.com/evernote/android-job
- **Work Manager** 이용해야함 : https://developer.android.com/topic/libraries/architecture/workmanager/
### 백그라운드 서비스 제한 해결방법
1. 전경 서비스를 이용하도록 처리.
2. 주기적 작업을 예약해야하는 경우 WorkManager(Google) 이용.
3. GCM Push로 Noti를 발생시켜 활성화 가능.
4. Foreground Sevice & Notification으로 처리.
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
} else {
context.startService(intent);
}
```
---
##### ※ Adroid API Version
Android Version
API Level
Name
Released
Android 9.0
28
Pie
2018 . 8
Android 8.1
27
Oreo
2017 . 12
Android 8.0
26
Oreo
2017 . 8
Android 7.1.1
25
Nougat
2016 . 12
Android 7.0
24
Nougat
2016 . 8
Android 6.0
23
Marshmallow
2015 . 8
Android 5.1
22
Lollipop
2015 . 3
Android 5.0
21
Lollipop
2014 . 11
Android 4.4W
20
Kitkat
2014 . 6
Android 4.4
19
Kitkat
2013 . 10
Android 4.3
18
Jelly Bean
2013 . 7
Android 4.2
17
Jelly Bean
2012 . 11
Android 4.1
16
Jelly Bean
2012 . 6
Android 4.0.3
15
Ice Cream Sandwich
2011 . 12
Android 4.0
14
Ice Cream Sandwich
2011 . 10
■ 표 내용 출처 : https://docs.microsoft.com/ko-kr/xamarin/android/app-fundamentals/android-api-levels?tabs=windows
댓글