[android] WorkManager

WorkManager

img

WorkManager API 의 주요 클래스는 WorkManager, Worker, WorkRequest, WorkState 입니다.

  1. 단순 작업

    import androidx.work.Worker
       
    class SimpleWorker : Worker() {
        override fun doWork(): Result {
            // 이곳에 처리해야할 작업 코드를 추가합니다
       
            return Result.SUCCESS
        }
       
    }
    
    private fun doWorkOneTime() {
            val workRequest = OneTimeWorkRequestBuilder<SimpleWorker>().build()
       
            val workManager = WorkManager.getInstance()
               
            workManager?.enqueue(workRequest)
    }
       
    
    1. Worker 클래스를 상속받은 클래스를 만들고 doWork() 메서드를 오버라이드 합니다. 처리 결과에 따른 Result 값을 리턴해야 합니다.
    2. OneTimeWorkRequestBuilder 를 이용해서 OneTimeWorkRequest 객체를 생성합니다. 이제 SimpleWorker 는 한번 실행 될수 있는 작업이 되었습니다.
    3. WorkManager 클래스의 getInstance() 메서드로 싱글턴 객체를 받아서 WorkManager 의 작업 큐에 OneTimeWorkRequest 객체를 추가 하면 끝입니다.
  2. 제약 조건 걸기

    private fun doWorkWithConstraints() {
            // 네트워크 연결 상태 와 충전 중 인 상태를 제약조건으로 추가 한다
            val constraints = Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .setRequiresCharging(true)
                    .build()
       
            // 제약 조건과 함께 작업 생성
            val requestConstraint  = OneTimeWorkRequestBuilder<SimpleWorker>()
                    .setConstraints(constraints)
                    .build()
       
            val workManager = WorkManager.getInstance()
       
            workManager?.enqueue(requestConstraint)
     }
    
  3. 사용법3. 연결된 작업 (Chaining work)

private fun doWorkChaining() {
        val compressWork = OneTimeWorkRequestBuilder<CompressWorker>().build()
        val uploadWork = OneTimeWorkRequestBuilder<UploadWorker>().build()

        WorkManager.getInstance()?.apply {
            beginWith(compressWork).then(uploadWork).enqueue()
        }
}