일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- LiveData
- Foreign Key
- ConstraintLayout
- MINUS
- class component
- react native
- docker-compose
- docker
- Interface
- map
- union
- enum
- recyclerview
- Swift
- Filter
- elementAt
- function
- AWS
- Generic
- ReactNative
- list
- vuex
- 생명주기
- animation
- mongoose
- Kotlin
- lifecycle
- collection
- CLASS
- Service
- Today
- Total
개발 일기
WorkManager ? 본문
사용이유 :)
WorkManager API를 사용하면 앱이 종료되거나 기기가 다시 시작되어도 실행 예정인 지연 가능한 비동기 작업을 쉽게 예약할 수 있습니다.
WorkManager는 앱 프로세스가 사라지더라도 안전하게 종료되어야 하는 진행 중인 백그라운드 작업 또는 즉시 실행해야 하는 작업을 대상으로 하지 않습니다.
적합한 솔루션을 알아보려면 백그라운드 처리 가이드를 확인해 보세요!
주요 기능
- API 14 이전 버전과 호환성
- 네트워크 가용성 또는 충전 상태와 같은 작업 제약 조건 추가 ( 네트워크가 연결이 됬을 때 혹은 충전 , 미 충전 상태에 따라 결정이 가능합니다. )
- 비동기 일회성 작업 또는 주기적으로 실행되는 작업 예약
- 예약된 작업 모니터링 및 관리
-
작업 체이닝
-
앱 또는 기기가 다시 시작되는 경우에도 작업 실행을 보장
-
잠자기 모드와 같은 절전 기능 지원
부가 설명
API 23 이상을 사용하는 기기에서는 JobScheduler 사용
API 14~22를 사용하는 기기에서는 BroadcastReceiver + AlarmManager 조합을 사용
주기적으로 실행되는 작업을 예약을 할수 있지만 15분 주기가 최소입니다.
WorkManager 기초
- 해당 내용은 기초만 다루고 있습니다. 더 심화적으로 알고싶으시면 WorkManager 링크를 가서 봐주세요 !
제일 먼저 프로젝트에 WorkManager 추가를 해야합니다.
dependencies {
def work_version = "2.3.1"
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"
// optional - RxJava2 support
implementation "androidx.work:work-rxjava2:$work_version"
// optional - GCMNetworkManager support
implementation "androidx.work:work-gcm:$work_version"
// optional - Test helpers
androidTestImplementation "androidx.work:work-testing:$work_version"
}
WorkManager는 작업은 Worker라는 클래스를 사용하여 정의됩니다.
따라서 doWork()라는 메소드를 제공해 주는데 이 메소드는 백그라운드에서 동기적으로 작동을 합니다.
예시 :)
class UploadWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {
override fun doWork(): Result {
// Do the work here--in this case, upload the images.
uploadImages()
// Indicate whether the task finished successfully with the Result
return Result.success()
}
}
리턴 값으로는 총 세가지 있으며 작업에 관해서 WorkManager에게 알립니다.
-
Result.success()를 통해 성공적으로 완료됨
-
Result.failure()를 통해 실패함
-
Result.retry()를 통해 나중에 다시 시도해야 함
다음으로 작업을 실행하는 방법에 대해서 말씀드리겠습니다.
WorkRequest을 통해서 작업이 어떻게 실행되어야 하는지 알려줍니다.
작업은 두가지 방향으로 일회성이거나 주기적으로 계속 실행을 시킬수가 있습니다.
일회성 ( OneTimeWorkRequest ) 을 사용하고 주기적일때는 (PeriodicWorkRequest) 을 사용합니다.
반복작업에 대해서 더 자세한 내용은 링크를 걸어드리겠습니다.
다음으로 코드는 :)
val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.build()
WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)
더 자세항 방법은 여기에 링크로 달아드리겠습니다.
리뷰 :)
WorkManager 나오기전에는 AlarmManager , JobScheduler , Firebase JobDispatcher 을 사용을 했었는데 나오면서 더 편한 방법으로 해결책이 나와 좋았습니다.!
여기에 나오지 않은 여러가지 기능 ( 체인 등 ) 을 통해서 구현하는것도 알아두면 좋을 거 같습니다 !
'Client > 안드로이드' 카테고리의 다른 글
Databinding ? (0) | 2020.03.21 |
---|---|
Android Manifest ? (0) | 2020.03.21 |
LiveData ? (0) | 2020.03.18 |
Picasso , Glide , Fresco (0) | 2020.03.16 |
android 4대 구성요소? (0) | 2020.03.16 |