# Android Job
# 참고
- [https://duzi077.tistory.com/222](https://duzi077.tistory.com/222)
- [https://medium.com/google-developer-experts/services-the-life-with-without-and-worker-6933111d62a6](https://medium.com/google-developer-experts/services-the-life-with-without-and-worker-6933111d62a6)
- [https://developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder](https://developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder)
- [https://medium.com/@joongwon/jetpack-android-background는-workmanager에게-맡기세요-5f6d97331ff3](https://medium.com/@joongwon/jetpack-android-background는-workmanager에게-맡기세요-5f6d97331ff3)
- [https://medium.com/@limgyumin/새로운-안드로이드-백그라운드-작업-처리법-workmanager-f625e07b384c](https://medium.com/@limgyumin/새로운-안드로이드-백그라운드-작업-처리법-workmanager-f625e07b384c)
- [https://medium.com/til-kotlin-ko/android-o에서의-백그라운드-처리를-위한-jobintentservice-250af2f7783c](https://medium.com/til-kotlin-ko/android-o에서의-백그라운드-처리를-위한-jobintentservice-250af2f7783c)
- [http://dktfrmaster.blogspot.com/2018/06/workmanager.html](http://dktfrmaster.blogspot.com/2018/06/workmanager.html)
## 1. 자동갱신
- Jobscheduler는 api 23버전 이상에서 안정적이나 마이스누앱은 기본적으로 19 부터 이용 가능하므로 하위 버전에서 오류 발생시 적용 불가
- jobdispatcher는 다양한 디바이스 지원안함
- 다음 두 가지 처리 방법 중 검토 할 것
- (1순위) JobIntentService -> O버전 , 이하 버전 간의 처리 분기가 가능하므로 적용 방법 검토
- (2순위) Workmanager -> workmanager적용시 O버전의 하위 버전은 어떻게 동작/처리하는지 검토
- 실행주기는 1시간 단위로 설정
## 2. 수동갱신
- Pendingindent적용
- [https://code.i-harness.com/ko-kr/q/3771c5](https://code.i-harness.com/ko-kr/q/3771c5) 참고
- 마시멜로우 버전부터 잠자기모드(Doze mode)가 생김.
- 잠자기모든느 유저가 스크린을 끄고나며 네트워크,Sync, GPS, 알람, 와이파이 스캔등을 비활성화 시켜버림.
- 스크린을 켜거나 충전기에 연결할때 까지 이 상태를 유지함.
- 오레오 버전으로 타겟팅된 앱이 백그라운드에서 startService()를 호출시 Exception 발생
# JobScheduler
최소 api 21 이상에서만 사용할 수 있다는 제약, AlarmManager와 JobScheduler를 각각 사용해서 구현해야 합니다.
# JobDispatcher(GCM Nerwork Manager)
- API 9 이상 지원가능. 내부적으로 AlarmManager와 JobScheduler를 선택해줍니다.
- 구글 플레이 서비스에 의존하게되어 아마존/중국제조사 디바이스에서는 기능을 사용할 수 없습니다.
구글 플레이 서비스가 없는 디바이스에서는 AlarmManager와 JobScheduler를 각각 사용해서 구현해야 합니다.
# JobIntentService 사용
정확한 시간에 작업이 수행되지 않기 때문에 오레오에서 Job을 빨리 수행하는데는 도움이 되지 않습니다.
# Android-Job (Evernote) 라이브러리(Third party library) 사용
1. 매니페스트 명시적브로드캐스트
● 위젯업데이트 : android.appwidget.action.APPWIDGET_UPDATE
- 위젯 등록,수정시
- 부팅완료시 ( BOOT_COMPLETE )
- AlarmManager를 통해 30분마다 "위젯업데이트" 호출시
2. 앱은 런타임 Context.registerReceiver() 브로드캐스트
● 스크린온 : android.intent.action.SCREEN_ON
- 스크린 활성화시
3. Doze모드(유휴모드) 적용
· 브로드캐스트 실행안됨 : 위젯업데이트, 스크린온.
4. 앱 백그라운드(유휴상태)에 상태시 위젯갱신 문제점
1. 자동갱신
AlarmManager를 통한 30분마다 "위젯업데이트" 호출 안됨.
2. 수동갱신
Refresh(버튼)의 호출 안됨.
5. 해결방법
1. 자동갱신
- 백그라운드 서비스가 아닌 Job을 적용.
# Job 종류.
- JobDispatcher
- WorkManager
- JobScheduler
2. 수동갱신 (Refresh)
- 백그라운드 서비스 호출 구조 수정.
-> 알림(Notification)에서 PendingIntent 실행
댓글