0Pricing
Android Academy · 강의

Worker 만들기

Worker에서 백그라운드 작업을 정의해 보세요.

Worker 만들기은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

워커 만들기

WorkManager에서 백그라운드 작업의 단위는 워커입니다. 워커 기본 클래스를 상속하고 작업 메서드를 재정의하여 작업을 정의합니다.

CoroutineWorker

Kotlin에서는 CoroutineWorker를 상속합니다. doWork()는 suspend 함수이므로 다른 일시 중단 함수를 호출하고 백그라운드 디스패처에서 자연스럽게 실행할 수 있습니다.

class UploadWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {
    override suspend fun doWork(): Result {
        // background work here
        return Result.success()
    }
}

생성자

모든 워커는 생성자에서 Context와 WorkerParameters를 받고, 이를 상위 클래스에 전달합니다. WorkManager가 워커를 대신 인스턴스화하므로 생성자를 직접 호출하지 않습니다.

doWork는 결과를 반환합니다

doWork()는 작업 결과를 나타내는 Result를 반환해야 합니다. 가능한 결과는 세 가지입니다.

  • Result.success()
  • Result.retry()
  • Result.failure()

Result.success

작업이 완료되면 Result.success()를 반환합니다. 작업은 대기열에서 제거됩니다. 연결된 작업에 전달할 출력 데이터를 추가할 수도 있습니다.

override suspend fun doWork(): Result {
    uploadLogs()
    return Result.success()
}

Result.retry

일시적인 네트워크 오류와 같은 일시적 실패에는 Result.retry()를 반환합니다. WorkManager는 백오프 정책에 따라 나중에 워커를 다시 실행합니다.

override suspend fun doWork(): Result {
    return try {
        syncData()
        Result.success()
    } catch (e: IOException) {
        Result.retry()
    }
}

Result.failure

재시도로 해결되지 않는 잘못된 입력과 같은 영구적 실패에는 Result.failure()를 반환합니다. 작업이 중지되고 종속된 연결 작업은 실행되지 않습니다.

입력 데이터 읽기

작업을 대기열에 추가할 때 Data를 통해 작은 입력을 전달하고, 워커 내부에서 inputData로 읽습니다. 큰 데이터를 전달하는 용도가 아니므로 데이터 크기를 작게 유지해야 합니다.

override suspend fun doWork(): Result {
    val userId = inputData.getString("user_id") ?: return Result.failure()
    sync(userId)
    return Result.success()
}

출력 데이터 반환하기

워커는 결과에 Data를 반환할 수 있으며, 연결된 워커는 이를 입력으로 받습니다. 이렇게 단계 사이에 결과를 전달합니다.

val output = workDataOf("count" to 42)
return Result.success(output)

올바른 디스패처에서 작업하기

CoroutineWorker는 기본적으로 doWork()를 Dispatchers.Default에서 실행합니다. 차단 I/O 작업에서는 withContext(Dispatchers.IO)로 전환하여 기본 스레드 풀의 고갈을 방지합니다.

override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
    readAndUploadFile()
    Result.success()
}

워커를 독립적으로 유지하기

워커는 예약된 후 한참 뒤에 새 프로세스에서 실행될 수 있습니다. 메모리에 있는 앱 상태에 의존하지 말고, 필요한 값은 입력 데이터로 전달하거나 영구 저장소에서 읽으십시오.

빠른 확인

워커 만들기에 대한 이해도를 확인해 보십시오.

복습

다음과 같이 워커를 만들었습니다.

  • CoroutineWorker를 상속하고 일시 중단 함수인 doWork()를 재정의합니다.
  • Result.success(), Result.retry() 또는 Result.failure()를 반환합니다.
  • inputData를 읽고 출력 Data를 반환합니다.
  • 차단 작업에는 Dispatchers.IO를 사용하고 워커를 독립적으로 유지합니다.

다음 주제: 제약 조건과 예약입니다.

자주 묻는 질문

“Worker 만들기” 강의는 무료인가요?

네 — “Worker 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Worker 만들기”에서 뭘 배우나요?

Worker에서 백그라운드 작업을 정의해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Android Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Worker 만들기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. WorkManager를 사용하는 경우
  2. Worker 만들기
  3. 제약 조건과 작업 예약
  4. 주기적 작업과 연결된 작업
← Android Academy(으)로 돌아가기