본문 바로가기
2023년 이전/Android

Android - WorkManager (3) - Work States and observing work

by JeongUPark 2019. 10. 17.
반응형

이전글 : 2019/10/16 - [프로그래밍/Android] - Android - WorkManager (2) WorkRequest

출처- Android developer 작업상태 관찰

Work States

Android 상에서 사용되는 작업들은 그 작업이 시작 부터 완료 될 때까지 다양한 상태를 가집니다.

 

그 상태들은 다음과 같습니다.

  • 아직 완료되지 않은 선행 작업이 있는 경우 작업은 'BLOCKED' 상태입니다.
  • 제약 조건과 타이밍이 충족되는 즉시 실행할 수있는 작업은 'ENQUEUED'로 간주됩니다.
  • Worker가 현재 실행 중이면 RUNNING 상태입니다.
  • Worker가 Result.success ()를 반환하면 성공한 것으로 간주됩니다. 이것은 작업이 끝이난 상태입니다. OneTimeWorkRequests 만이 이 상태로 들어갈 수 있습니다.
  • 반대로 Result.failure ()를 반환 한 Worker는 실패한 것으로 간주됩니다. 이것은 또한 작업이 끝이난 상태입니다. OneTimeWorkRequests 만이 이 상태로 들어갈 수 있습니다. 모든 종속 작업도 실패로 표시되며 실행되지 않습니다.
  • 아직 종료되지 않은 WorkRequest를 명시 적으로 취소하면 CANCELLED 상태가됩니다. 모든 종속 작업도 CANCELLED 상태로로 표시되며 실행되지 않습니다

각 상태의 더 자세한 사항은 여기서 확인 하실 수 있습니다.

 

Observing your work

작업을 대기열에 넣은 후 WorkManager를 사용하여 작업 상태를 확인할 수 있습니다. 이 정보는 WorkInfo 개체에서 사용할 수 있으며 여기에는 작업 ID, 태그, 현재 상태 및 모든 출력 데이터가 포함됩니다.

그리고 이 WorkInfo를 얻는 방법은 3가지가 있습니다.

  • 특정 WorkRequest의 경우 WorkManager.getWorkInfoById (UUID) 또는 WorkManager.getWorkInfoByIdLiveData (UUID)를 사용하여 WorkRequest ID로 WorkInfo를 검색 할 수 있습니다.
  • 지정된 태그의 경우 WorkManager.getWorkInfosByTag (String) 또는 WorkManager.getWorkInfosByTagLiveData (String)를 사용하여 일치하는 모든 WorkRequest에 대한 WorkInfo 객체를 검색 할 수 있습니다.
  • 고유 한 작업 이름의 경우 WorkManager.getWorkInfosForUniqueWork (String) 또는 WorkManager.getWorkInfosForUniqueWorkLiveData (String)를 사용하여 일치하는 모든 WorkRequests에 대한 WorkInfo 오브젝트를 검색 할 수 있습니다.

이 3가지 방법으로 WorkInfo를 확인 할 수 있고 각 메소드의 LiveData 변형을 사용하면 리스너를 등록하여 WorkInfo의 변경 사항을 관찰 할 수 있습니다.

 

그리고 이미 이전 글에서 이 방법을 사용했습니다.

        WorkManager.getInstance(context!!).getWorkInfoByIdLiveData(myWorkRequest.id)
            .observe(viewLifecycleOwner,
                Observer { t ->
                    t?.let {
                        val outputData = it.outputData.getString("outputData")
                        if (outputData != null) {
                            Log.d("TEST", "outpudata : $outputData")
                        }
                    }
                })

위의 code에서 t가 workInfo 입니다.

반응형