WorkManager는 백그라운드에서 실행해야 하는 지연 가능하고, 보장되어야 하는 작업을 위한 안드로이드 라이브러리입니다. 즉, 앱이 종료되거나 기기가 재부팅되더라도 실행되어야 하는 작업들을 관리하는 데 쓰이죠.
1. 유연성: 작업 실행에 대한 다양한 조건을 지정할 수 있습니다. 예를 들어, 네트워크가 연결되었을 때만 작업을 실행하거나, 기기가 충전 중일 때만 실행하는 것과 같은 조건들이죠.
2. 보장성: 작업이 예정대로 완료될 것임을 보장합니다. 예를 들어, 기기가 재시작되거나 앱이 종료되어도 작업이 계속됩니다.
3. 호환성: WorkManager는 API 레벨 14 (아이스크림 샌드위치) 이상에서 작동하며, 최신 안드로이드 버전의 기능을 이용할 수 있도록 최적화되어 있습니다.
4. 쉬운 통합: LiveData와 같은 다른 안드로이드 아키텍처 컴포넌트와 쉽게 결합할 수 있어, 작업의 상태를 UI에 반영하기 편리합니다.
WorkManager를 사용하는 기본적인 단계
1. WorkRequest 생성: 수행하고자 하는 작업을 정의합니다. 이것은 OneTimeWorkRequest(한 번만 실행) 또는 PeriodicWorkRequest(주기적 실행)가 될 수 있습니다.
2. 조건 설정: 작업이 실행될 조건을 설정합니다. 예를 들어, Wi-Fi에 연결되어 있어야 한다든지, 기기가 충전 중이어야 한다는 조건을 추가할 수 있습니다.
3. WorkManager에 작업 요청: 설정한 WorkRequest를 WorkManager에 전달합니다. 그러면 WorkManager가 알맞은 시간에 작업을 실행합니다.
4. 작업 상태 감시: WorkManager는 LiveData를 사용하여 작업의 상태를 알려주므로, 이를 통해 작업의 진행 상태나 결과를 UI에 반영할 수 있습니다.
이러한 기능을 통해 개발자는 백그라운드 작업을 더욱 쉽고 효율적으로 관리할 수 있습니다.
간단한 WorkManager 예시 : 네트워크 상태가 연결되었을 때 데이터를 백그라운드에서 동기화하는 간단한 예시 코드
dependencies {
// WorkManager 라이브러리 추가
implementation "androidx.work:work-runtime-ktx:2.7.1"
}
WorkManager에 의해 수행될 작업을 정의해야 합니다. 이를 위해 `Worker` 클래스를 상속받는 클래스를 만들어 `doWork()` 메서드를 오버라이드합니다.
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
class DataSyncWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {
override fun doWork(): Result {
// 여기에서 데이터 동기화 로직을 수행합니다.
// 예를 들어, 서버로부터 데이터를 받아와서 로컬 데이터베이스를 업데이트할 수 있습니다.
// 데이터 동기화가 성공했다고 가정하고 성공 결과를 반환합니다.
// 실패하거나 재시도가 필요한 경우 Result.retry()나 Result.failure()를 반환합니다.
return Result.success(workDataOf("KEY_RESULT" to "Data synchronized successfully"))
}
}
`WorkRequest`를 만들고 `WorkManager`에 작업을 등록합니다. 네트워크가 연결되어 있을 때만 작업이 수행되도록 조건을 설정합니다.
import androidx.work.Constraints
import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
// 네트워크 연결이 필요한 조건을 설정합니다.
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
// 작업 요청을 생성합니다.
val syncDataWorkRequest = OneTimeWorkRequest.Builder(DataSyncWorker::class.java)
.setConstraints(constraints)
.build()
// WorkManager에 작업을 등록합니다.
WorkManager.getInstance(context).enqueue(syncDataWorkRequest)
'Android' 카테고리의 다른 글
The project is using an incompatible version (AGP 8.1.2) of the Android Gradle plugin. Latest supported version is AGP 8.0.2 (0) | 2023.11.25 |
---|---|
Kotlin 최대공약수 최소공배수 구하기 (0) | 2023.11.14 |
Jetpack Media3 알아보기 (0) | 2023.09.29 |
LiveData와 Flow 어떤 걸 써야할까? (0) | 2023.09.29 |
Git & Github 간단한 사용방법 정리 + 브랜치 만드는 이유 (0) | 2023.08.02 |
댓글