WorkManager

WorkManager API를 사용하면 안정적으로 실행해야 하는 지연 가능한 비동기 작업을 쉽게 예약할 수 있습니다. 이러한 API를 통해 작업을 생성한 후 작업 제약 조건이 충족되면 실행되도록 WorkManager에 전달할 수 있습니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 1월 24일 2.9.0 - - 2.10.0-alpha01

종속 항목 선언

WorkManager의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    def work_version = "2.9.0"

    // (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"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.0"

    // (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")

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin 확장 프로그램 사용에 관한 정보는 ktx 문서를 참고하세요.

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 2.10

버전 2.10.0-alpha01

2024년 1월 24일

androidx.work:work-*:2.10.0-alpha01가 출시되었습니다. 버전 2.10.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 개발자는 Constraints.setRequiredNetworkRequest 메서드를 통해 작업자의 제약 조건으로 NetworkRequest를 지정할 수 있습니다. 이를 통해 이 작업자가 실행해야 하는 네트워크를 보다 세밀하게 제어할 수 있습니다.

API 변경사항

  • NetworkRequest를 제약조건으로 지정하는 기능을 추가합니다. 추가했습니다. (Id98a1, b/280634452)

버전 2.9

버전 2.9.0

2023년 11월 29일

androidx.work:work-*:2.9.0가 출시되었습니다. 버전 2.9.0에 포함된 커밋을 확인하세요.

2.8.0 이후 중요 변경사항

  • Flow-s를 통한 관측 가능성 이제 LiveData 대신 Flow의 WorkManager.getWorkInfosFlow 및 유사한 메서드를 통해 worker의 진행 상황을 관찰할 수 있습니다.
  • 이제 WorkManager는 worker가 이전에 중지된 이유에 관한 힌트를 제공합니다. getStopReason() 메서드를 통해 작업자 자체에서, getStopReason()를 통해 WorkInfo에서 쿼리할 수 있습니다.
  • setNextScheduleTimeOverride를 통한 주기적 작업자의 정확한 일정 예약 이를 통해 다음 주기적 작업 일정을 동적으로 계산할 수 있으며, 이를 통해 적응형 새로고침 시간, 맞춤 재시도 동작과 같은 고급 기능을 구현하거나 사용자가 매일 아침 잠에서 깨지 않고 잠에서 깨기 전에 뉴스피드 worker를 실행하도록 할 수 있습니다. 다음 작업자를 예약하는 동안 현재 실행 중인 worker가 취소되지 않도록 하려면 ExistingPeriodicWorkPolicy.UPDATE를 이러한 기법과 함께 사용해야 합니다.
  • 스레딩 일치 프로덕션을 사용한 WorkManager 테스트 initializeTestWorkManager에서 ExecutorsMode.PRESERVE_EXECUTORS를 사용하면 Configuration에 설정된 실행자를 보존하고 실제 기본 스레드를 사용할 수 있습니다.
  • CoroutineWorker와 같은 코루틴 API가 추가 아티팩트 work-runtime-ktx에서 기본 아티팩트 work-runtime으로 이동했습니다. 이제 work-runtime-ktx가 비어 있습니다.

API 변경사항

  • stopReason이(가) WorkInfo에 추가되었습니다. 작업자가 실행된 후 stopReason를 사용할 수 있게 됩니다. 이는 작업자가 중지되면 앱 자체가 매우 빠르게 종료될 수 있으므로 유용한 방식으로 stopReason를 보고하는 데 유용할 수 있습니다. 추가했습니다. (I21386)
  • 구성을 통해 Clock가 설정되고 작업자 테스트의 실행 시퀀싱을 구동하는 데 사용되도록 허용합니다. 추가했습니다. (Ic586e)
  • 작업자가 중지된 이유를 알려주는 getStopReason() 메서드를 ListenableWorker에 추가했습니다. 추가했습니다. (I07060)
  • 리소스 유출에 관한 Closeguard의 경고를 방지하기 위해 WorkManagerTestInitHelper#closeWorkDatabase()를 추가했습니다. 추가했습니다. (Ia8d49)
  • 이제 WorkInfo의 생성자가 공개되어 테스트에 유용할 수 있습니다. 추가했습니다. (Ia00b6, b/209145335)
  • 이제 work-runtime-ktx가 비어 있으며 CoroutineWorker 및 기타 Kotlin 전용 유틸리티를 이제 기본 작업 런타임 아티팩트에서 사용할 수 있습니다. 추가했습니다. (I71a9a)
  • 주기적 작업 일정을 정확하게 설정할 수 있는 setNextScheduleTimeOverride 메서드를 추가했습니다. (I3b4da)
  • 예약된 런타임 정보를 가져오는 getNextScheduleTimeMillisWorkInfo에 추가되었습니다. 추가했습니다. (I797e4)
  • 초기 지연 및 주기성 정보가 WorkInfo에 추가됩니다. 추가했습니다. (I52f2f)
  • getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow 메서드를 통한 Flow를 통한 worker 관찰 메서드를 추가했습니다. (If122a)
  • 누락된 @RequiresApi(...) 주석을 Constraints의 생성자 및 속성에 추가했습니다. 이제 이 클래스는 WorkManager의 초기 버전부터 있던 Constraints.Builder의 setter에 상응하는 주석과 정렬됩니다. 추가했습니다. (I6d7d2)
  • 이제 WorkManager에는 콘텐츠 URI 작업자가 JobScheduler에 보장된 슬롯을 제공하여 부하가 높은 상황에서 콘텐츠 업데이트가 누락되지 않도록 별도의 제한이 있습니다. 한도는 Configuration.Builder.setContentUriTriggerWorkersLimit를 통해 구성할 수 있습니다. 추가했습니다. (Ic128f)
  • 제약 조건이 WorkInfo에 추가됩니다. 추가했습니다. (I162c0)

버전 2.9.0-rc01

2023년 10월 18일

androidx.work:work-*:2.9.0-rc01가 출시되었습니다. 버전 2.9.0-rc01에 포함된 커밋을 확인하세요.

  • 마지막 베타 출시 이후 변경사항 없음

버전 2.9.0-beta01

2023년 9월 6일

androidx.work:work-*:2.9.0-beta01가 출시되었습니다. 버전 2.9.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

버전 2.9.0-alpha02

2023년 7월 26일

androidx.work:work-*:2.9.0-alpha02가 출시되었습니다. 버전 2.9.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 WorkManager는 worker가 이전에 중지된 이유에 관한 힌트를 제공합니다. getStopReason() 메서드를 통해 작업자 자체에서, getStopReason()를 통해 WorkInfo에서 쿼리할 수 있습니다.

API 변경사항

  • stopReason이(가) WorkInfo에 추가되었습니다. 작업자가 실행된 후 stopReason를 사용할 수 있게 됩니다. 이는 작업자가 중지되면 앱 자체가 매우 빠르게 종료될 수 있으므로 유용한 방식으로 stopReason를 보고하는 데 유용할 수 있습니다. 추가했습니다. (I21386)
  • 구성을 통해 Clock을 설정하고 작업자 테스트의 실행 시퀀싱을 구동하는 데 사용되도록 허용합니다. 추가했습니다. (Ic586e)
  • 작업자가 중지된 이유를 알려주는 getStopReason() 메서드를 ListenableWorker에 추가했습니다. 추가했습니다. (I07060)
  • 리소스 유출에 관한 Closeguard의 경고를 방지하기 위해 WorkManagerTestInitHelper#closeWorkDatabase()를 추가했습니다. 추가했습니다. (Ia8d49)

버그 수정

  • TestDriver를 사용하여 overrideNextScheduleTime를 우회하는 기능이 추가되었으며 테스트 가능성 문제가 수정되었습니다. 추가했습니다. (Ic2905)

버전 2.9.0-alpha01

2023년 6월 7일

androidx.work:work-*:2.9.0-alpha01가 출시되었습니다. 버전 2.9.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • Flow-s를 통한 관측 가능성 이제 LiveData 대신 Flow의 WorkManager.getWorkInfosFlow 및 유사한 메서드를 통해 worker의 진행 상황을 관찰할 수 있습니다.
  • setNextScheduleTimeOverride를 통한 주기적 작업자의 정확한 일정 예약 이를 통해 다음 주기적 작업 일정을 동적으로 계산할 수 있으며, 이를 통해 적응형 새로고침 시간, 맞춤 재시도 동작과 같은 고급 기능을 구현하거나 사용자가 매일 아침 잠에서 깨지 않고 잠에서 깨기 전에 뉴스피드 worker를 실행하도록 할 수 있습니다. 다음 작업자를 예약하는 동안 현재 실행 중인 worker가 취소되지 않도록 하려면 ExistingPeriodicWorkPolicy.UPDATE를 이러한 기법과 함께 사용해야 합니다.
  • 스레딩 일치 프로덕션으로 WorkManager의 테스트 ExecutorsMode.PRESERVE_EXECUTORSConfiguration에 설정된 실행자를 보존하고 실제 기본 스레드를 사용하는 데 사용할 수 있습니다.
  • CoroutineWorker와 같은 코루틴 API를 추가 아티팩트 work-runtime-ktx에서 기본 아티팩트 work-runtime로 이동했습니다. 이제 work-runtime-ktx가 비어 있습니다.

API 변경사항

  • 이제 WorkInfo의 생성자가 공개되어 테스트에 유용할 수 있습니다. 추가했습니다. (Ia00b6, b/209145335)
  • 이제 work-runtime-ktx가 비어 있으며 이제 기본 work-runtime 아티팩트에서 CoroutineWorker 및 기타 Kotlin 관련 유틸리티를 사용할 수 있습니다. 추가했습니다. (I71a9a)
  • 주기적 작업 일정을 정확하게 설정할 수 있는 setNextScheduleTimeOverride 메서드를 추가했습니다. (I3b4da)
  • getEarliestRunTimeMillis에서 getNextScheduleTimeMillis으로 이름이 변경되었습니다. 추가했습니다. (I2bd7a)
  • 다음으로 예약된 실행 시간 정보가 WorkInfo에 추가됩니다. 추가했습니다. (I797e4)
  • 초기 지연 및 주기성 정보가 WorkInfo에 추가됩니다. 추가했습니다. (I52f2f)
  • getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow 메서드를 통한 Flow를 통한 worker 관찰 메서드를 추가했습니다. (If122a)
  • Constraints의 생성자 및 속성에 누락된 @RequiresApi(...) 주석을 추가했습니다. 이제 이 클래스는 WorkManager의 초기 버전부터 있던 Constraints.Builder의 setter에 상응하는 주석과 정렬됩니다. 추가했습니다. (I6d7d2)
  • 이제 WorkManager에는 콘텐츠 URI 작업자가 JobScheduler에 보장된 슬롯을 제공하여 부하가 높은 상황에서 콘텐츠 업데이트가 누락되지 않도록 별도의 제한이 있습니다. 한도는 Configuration.Builder.setContentUriTriggerWorkersLimit를 통해 구성할 수 있습니다. 추가했습니다. (Ic128f)
  • 제약 조건이 WorkInfo에 추가됩니다. 추가했습니다. (I162c0)

버전 2.8

버전 2.8.1

2023년 3월 22일

androidx.work:work-*:2.8.1가 출시되었습니다. 버전 2.8.1에 포함된 커밋을 확인하세요.

버그 수정

  • 이전에 2개의 동시 브로드캐스트를 올바르게 처리하지 않던 RescheduleReceiver의 ANR이 수정되었습니다. b/236906724를 참조하세요.

버전 2.8.0

2023년 2월 8일

androidx.work:work-*:2.8.0가 출시되었습니다. 버전 2.8.0에 포함된 커밋을 확인하세요.

2.7.0 이후 중요 변경사항

새로운 기능

API 변경사항

  • 원래 대기열 추가 시간 및 체이닝을 보존하는 작업을 업데이트하기 위해 WorkManager.updateWork를 추가했습니다. (I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE가 추가되었습니다. 이 정책을 사용하면 이름으로 주기적인 작업을 업데이트할 수 있습니다. 기존 REPLACE와 비슷하지만 방해가 덜 됩니다. 현재 실행 중인 worker를 취소하지 않으며 대기열 추가 시간을 보존합니다. 초기 지연과 기간은 업데이트 시간이 아닌 원래 대기열 추가 시간으로 계산됩니다. 이름이 매우 유사한 REPLACEUPDATE 간의 혼동을 줄이기 위해 REPLACE를 지원 중단했습니다. 여전히 이전 REPLACE 시맨틱을 유지하려는 경우 새로 추가된 CANCEL_AND_REENQUEUE(REPLACE와 동일함)를 사용하면 됩니다. (I985ed, b/219446409)
  • setSchedulingExceptionHandler를 통해 Consumer<Throwable>을 제공하여 예약 예외를 가로채는 기능을 추가했습니다.
  • WorkManager를 초기화하려고 할 때 문제가 있었는지 확인하기 위해 setInitializationExceptionHandler를 통해 Consumer<Throwable>을 제공하는 기능을 추가했습니다.
  • OneTimeWorkRequestPeriodicWorkRequest의 인라인 도우미를 androidx.work:work-runtime-ktx에서 androidx.work:work-runtime으로 이동했습니다. (I0010f, b/209145335)
  • WorkQuery를 직접 만들 수 있도록 도우미 메서드 WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags를 추가했습니다. b/199919736을 참조하세요. (If48f2, b/199919736)
  • WorkergetForegroundInfo를 추가했습니다. (Ic1ead)
  • 이제 RxJava 2 및 RxJava 3용 RxWorkerCompletable을 반환하는 setForeground가 있습니다. 이 함수는 ListenableFuture를 반환하는 setForegroundInfoAsync 대신 사용할 수 있습니다.
  • RxJava 2 및 RxJava 3용 RxWorkerSingle을 반환하는 getForegroundInfo가 있습니다. 이 함수는 ListenableFuture를 반환하는 getForegroundInfoAsync 대신 사용할 수 있습니다. (b/203851459)
  • 이제 Constraints.Builder를 사용하는 대신 제약 조건을 직접 생성할 수 있으므로 Kotlin을 사용하기가 더 편해집니다. (Idc390, b/137568653)
  • WorkManager가 초기화되었는지 확인하는 기능이 추가되었습니다. 또한 라이브러리 개발자가 WorkManager를 초기화한 구성을 가져올 수 있도록 새로운 getConfiguration() API가 추가되었습니다. (I6eff3, b/212300336)

버그 수정

  • 과도한 스케줄러로 인해 부하 발생 시 worker가 즉시 실행되지 않는 문제를 수정했습니다. (I9686b, b/248111307)
  • SDK 33 이상에서 POST_NOTIFICATIONS 권한을 부여해야 하는 API에 @RequiresPermission이 추가되었습니다. (Ie542e, b/238790278)
  • suspendCancellableCoroutine을 사용할 때 CoroutineScope의 취소를 ListenableFuture에 전파합니다.

버전 2.8.0-rc01

2022년 12월 7일

androidx.work:work-*:2.8.0-rc01가 출시되었습니다. 버전 2.8.0-rc01에 포함된 커밋을 확인하세요.

새로운 기능

  • 이번 출시에는 새로운 기능이 없습니다. 주로 버전 범프입니다.

버전 2.8.0-beta02

2022년 11월 9일

androidx.work:work-*:2.8.0-beta02가 출시되었습니다. 버전 2.8.0-beta02에 포함된 커밋을 확인하세요.

버그 수정

  • 이전에 새로운 세대 정보를 고려하지 않았던 WorkInfoequals 메서드를 수정했습니다. (4977cc)

버전 2.8.0-beta01

2022년 10월 5일

androidx.work:work-*:2.8.0-beta01가 출시되었습니다. 버전 2.8.0-beta01에 포함된 커밋을 확인하세요.

버그 수정

  • 과도한 스케줄러로 인해 부하 발생 시 worker가 즉시 실행되지 않는 문제를 수정했습니다. (I9686b, b/248111307)

버전 2.8.0-alpha04

2022년 9월 7일

androidx.work:work-*:2.8.0-alpha04가 출시되었습니다. 버전 2.8.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • worker 세대를 반환하는 WorkerInfo.getGeneration()WorkerParameters.getGeneration()이 추가되었습니다. worker가 ExistingPeriodicWorkPolicy.UPDATE를 사용하여 WorkManager.updateWork 또는 WorkManager.enqueueUniquePeriodicWork를 통해 업데이트된 경우 worker는 여러 세대를 갖습니다. worker가 현재 실행 중인 경우, worker 실행 중에 업데이트가 발생하면 이 메서드는 현재 실행 중인 worker 세대보다 최신 세대를 반환할 수 있다는 점에 유의하세요. 추가했습니다. (I665c5, b/219446409) (I128a9, b/219446409)
  • WorkManager 초기화를 시도할 때 문제가 있었는지 확인하는 데 사용할 수 있는 예외 핸들러 InitializationExceptionHandler가 추가되었습니다. (I061de)

버전 2.8.0-alpha03

2022년 8월 10일

androidx.work:work-*:2.8.0-alpha03가 출시되었습니다. 버전 2.8.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

  • 방해가 되지 않는 방식으로 WorkRequests를 업데이트하는 기능을 추가하여 원래 대기열 추가 시간, 체이닝 등을 보존했습니다. 자세한 내용은 WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE를 참고하세요.

API 변경사항

  • 원래 대기열 추가 시간 및 체이닝을 보존하는 작업을 업데이트하기 위해 WorkManager.updateWork를 추가했습니다. (I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE가 추가되었습니다. 이 정책을 사용하면 이름으로 주기적인 작업을 업데이트할 수 있습니다. 기존 REPLACE와 비슷하지만 방해가 덜 됩니다. 현재 실행 중인 worker를 취소하지 않으며 대기열 추가 시간을 보존합니다. 초기 지연과 기간은 업데이트 시간이 아닌 원래 대기열 추가 시간으로 계산됩니다. 이름이 매우 유사한 REPLACEUPDATE 간의 혼동을 줄이기 위해 REPLACE를 지원 중단했습니다. 여전히 이전 REPLACE 시맨틱을 유지하려는 경우 새로 추가된 CANCEL_AND_REENQUEUE(REPLACE와 동일함)를 사용하면 됩니다. (I985ed, b/219446409)
  • SchedulingExceptionHandler를 정의하여 예약 예외를 가로채는 기능을 추가합니다. (I033eb)
  • OneTimeWorkRequestPeriodicWorkRequest의 인라인 도우미를 androidx.work:work-runtime-ktx에서 androidx.work:work-runtime으로 이동했습니다. (I0010f, b/209145335)

버그 수정

  • SDK 33 이상에서 POST_NOTIFICATIONS 권한을 부여해야 하는 API에 @RequiresPermission을 추가했습니다. (Ie542e, b/238790278)

버전 2.8.0-alpha02

2022년 4월 6일

androidx.work:work-*:2.8.0-alpha02가 출시되었습니다. 버전 2.8.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 빌더를 사용하는 대신 제약 조건을 직접 생성할 수 있으므로 Kotlin을 사용하기가 더 편해집니다. (Idc390, b/137568653)
  • WorkManager가 초기화되었는지 확인하는 기능이 추가되었습니다. 또한 라이브러리 개발자가 WorkManager를 초기화한 구성을 가져올 수 있도록 새로운 getConfiguration() API가 추가되었습니다. (I6eff3, b/212300336)

버전 2.8.0-alpha01

2022년 1월 12일

androidx.work:work-*:2.8.0-alpha01가 출시되었습니다. 버전 2.8.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • WorkQuery를 직접 만들 수 있도록 도우미 메서드 WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags를 추가했습니다. (If48f2, b/199919736)
  • 향후 SDK를 위한 실험용 BuildCompat 메서드를 추가합니다. (Iafd82, b/207528937)
  • getForegroundInfoWorker에 추가합니다. (Ic1ead)
  • ID에서 직접 WorkQuery를 만들 수 있도록 도우미 메서드 WorkQuery.fromIds를 추가했습니다. (Ie5bdf, b/199919736)
  • 이제 RxWorker에서는 ListenableFuture를 반환하는 setForegroundInfoAsync 대신 Completable을 반환하는 setForeground를 사용할 수 있습니다. (I85156)
  • 이제 RxJava 2용 RxWorker에서는 ListenableFuture를 반환하는 getForegroundInfoAsync 대신 Single을 반환하는 getForegroundInfo를 사용할 수 있습니다. (I21c91, b/203851459)
  • 이제 RxJava 3용 RxWorker에서는 ListenableFuture를 반환하는 getForegroundInfoAsync 대신 Single을 반환하는 getForegroundInfo를 사용할 수 있습니다. (I1ca8a)
  • 이제 RxWorker에서는 ListenableFuture를 반환하는 setForegroundInfoAsync 대신 Completable을 반환하는 setForeground를 사용할 수 있습니다. (I992a3, b/203851459)

버그 수정

  • suspendCancellableCoroutine을 사용할 때 CoroutineScope의 취소를 ListenableFuture에 전파합니다. (I77e63)

버전 2.7

버전 2.7.1

2021년 11월 17일

androidx.work:work-*:2.7.1가 출시되었습니다. 버전 2.7.1에 포함된 커밋을 확인하세요.

버그 수정

  • CoroutineScope의 취소는 suspendCancellableCoroutine을 사용할 때 ListenableFuture로 전파됩니다. (I77e63)
  • 지연된 작업 요청이 신속 처리로 표시되면 즉시 예외가 발생합니다. (bef1762)

버전 2.7.0

2021년 10월 13일

androidx.work:work-*:2.7.0가 출시되었습니다. 버전 2.7.0에 포함된 커밋을 확인하세요.

2.6.0 이후 중요 변경사항

  • WorkManager에는 Android 12의 포그라운드 서비스 제한에 도움이 되는 새로운 WorkRequest.Builder.setExpedited(...) API가 도입되었습니다.

  • setExpedited(...)를 사용할 때 WorkManager는 Android 12부터 JobScheduler의 신속 처리 작업에 위임하며, 이전 Android 버전에서는 포그라운드 서비스를 위임하여 이전 버전과의 호환성을 구현합니다.

버전 2.7.0-rc01

2021년 9월 29일

androidx.work:work-*:2.7.0-rc01가 출시되었습니다. 버전 2.7.0-rc01에 포함된 커밋을 확인하세요.

이 버전은 androidx.work:work-*:2.7.0-beta01과 동일합니다.

버전 2.7.0-beta01

2021년 9월 1일

androidx.work:work-*:2.7.0-beta01가 출시되었습니다. 버전 2.7.0-beta01에 포함된 커밋을 확인하세요.

새로운 기능

  • WorkManager를 초기화할 때 발생하는 다중 프로세스 SQLite 경합을 줄입니다.

API 변경사항

  • Android 12(S)의 기본 플랫폼 API가 안정되었으므로 @ExperimentalExpeditedWork API를 삭제합니다. (aosp/1792806)

버그 수정

  • getForegroundInfoAsync()를 구현하지 않는 신속 처리 worker를 위해 더 나은 오류 메시지를 제공합니다. (aosp/1809376)

버전 2.7.0-alpha05

2021년 7월 21일

androidx.work:work-*:2.7.0-alpha05가 출시되었습니다. 버전 2.7.0-alpha05에 포함된 커밋을 확인하세요.

이 버전에는 WorkManager 2.6.0-beta02 출시의 버그 수정도 포함되어 있습니다.

버전 2.7.0-alpha04

2021년 6월 2일

androidx.work:work-*:2.7.0-alpha04가 출시되었습니다.

이 버전에는 2.6.0-beta01 출시의 변경사항도 포함됩니다.

API 변경사항

  • ListenableWorker.setForegroundAsync()는 더 이상 사용되지 않습니다.
  • 가능하면 WorkRequest.Builder.setExpedited(...) API를 사용하는 것이 좋습니다. 앱에 포그라운드 서비스 제한이 적용되지 않는 상황을 더 효과적으로 지원하기 위해 개발자는 ListenableWorker.setForegroundAsync() API를 사용할 수 있습니다.
  • ListenableWorker.setForegroundAsync()가 호출되면 앱에 포그라운드 서비스 제한이 적용되는 경우 ForegroundServiceStartNotAllowedException이 발생합니다.

버그 수정

  • 신속 처리 작업의 일정이 변경되면 작업이 더 이상 신속 처리되지 않습니다. 이러한 작업은 일반 작업이 됩니다.

버전 2.7.0-alpha03

2021년 4월 21일

androidx.work:work-*:2.7.0-alpha03가 출시되었습니다. 버전 2.7.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

API 변경사항

버전 2.7.0-alpha02

2021년 3월 10일

androidx.work:work-*:2.7.0-alpha02가 출시되었습니다. 버전 2.7.0-alpha02에 포함된 커밋을 확인하세요.

버그 수정

  • Android 12를 타겟팅할 때 발생하는 비정상 종료 문제를 해결하기 위해 PendingIntent를 변경 가능한 명시적 인텐트로 만들었습니다. (b/180884673)

버전 2.7.0-alpha01

2021년 2월 18일

androidx.work:work-*:2.7.0-alpha01가 출시되었습니다. 버전 2.7.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • WorkManager는 Android 12의 포그라운드 서비스 제한을 고려하여 새로운 WorkRequest.Builder.setExpedited(...) API를 도입합니다.

    애플리케이션은 백그라운드에 있을 때 더 이상 포그라운드 서비스를 실행할 수 없습니다. 따라서 이전에는 포그라운드 서비스의 수명 주기에 바인딩되었던 장기 실행 작업을 더 효과적으로 지원하기 위해 애플리케이션이 WorkRequestexpedited로 표시할 수 있습니다.

    이 API는 현재 지원 중단setForegroundAsync(...)/setForeground(...) API를 대체합니다.

    setExpedited(...)를 사용할 때 WorkManager는 Android 12부터 JobScheduler의 신속 처리 작업에 위임하며, 이전 Android 버전에서는 포그라운 서비스를 위임하여 이전 버전과의 호환성을 구현합니다.

API 변경사항

  • 신속 작업 WorkRequest 지원을 추가합니다.

버전 2.6.0

버전 2.6.0

2021년 9월 1일

androidx.work:work-*:2.6.0가 출시되었습니다. 버전 2.6.0에 포함된 커밋을 확인하세요.

2.5.0 이후 중요 변경사항

  • 이제 WorkManager는 androidx.startup을 사용하여 WorkManager를 초기화합니다. 이전에 WorkManager를 초기화할 때 ContentProvider에서 사용한 tools:node="remove"를 사용한 경우 대신 다음을 해야 합니다.

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • 모든 프로세스에서 실행할 수 있는 worker 지원을 추가했습니다. (Iaf200)

  • 원격 프로세스에 바인딩할 수 있는 RemoteListenableWorker의 구현인 RemoteCoroutineWorker를 추가했습니다. (I30578)

버전 2.6.0-rc01

2021년 8월 4일

androidx.work:work-*:2.6.0-rc01가 출시되었습니다. 버전 2.6.0-rc01에 포함된 커밋을 확인하세요.

이 버전은 androidx.work:work-*:2.6.0-beta02와 동일합니다.

버전 2.6.0-beta02

2021년 7월 21일

androidx.work:work-*:2.6.0-beta02가 출시되었습니다. 버전 2.6.0-beta02에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 RemoteWorkManagerRemoteWorkManagerService에서 정확하게 바인딩 해제되어 RemoteWorkManagerService가 정확하게 정리할 수 있습니다. (aosp/1730694)
  • 이제 RemoteListenableWorkerRemoteWorkerService에서 정확하게 바인딩 해제되어 RemoteWorkerService가 정확하게 정리할 수 있습니다. (aosp/1743817)
  • ForceStopRunnable은 이제 기본 앱 프로세스에서만 실행됩니다. 이는 최적화의 일종으로, 여러 프로세스를 사용하는 앱의 리소스 경합을 방지합니다. (aosp/1749180, aosp/1761729)

버전 2.6.0-beta01

2021년 6월 2일

androidx.work:work-*:2.6.0-beta01가 출시되었습니다. 버전 2.6.0-beta01에 포함된 커밋을 확인하세요.

이 버전에는 소규모의 문서 개선사항이 포함되어 있습니다. 이 버전은 2.6.0-alpha02와 거의 동일합니다.

버전 2.6.0-alpha02

2021년 4월 21일

androidx.work:work-*:2.6.0-alpha02가 출시되었습니다. 버전 2.6.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • 모든 프로세스에서 실행할 수 있는 worker 지원이 추가됩니다. (Iaf200)

  • 원격 프로세스에 바인딩할 수 있는 RemoteListenableWorker의 구현인 RemoteCoroutineWorker를 추가했습니다. (I30578)

API 변경사항

  • TEMPORARILY_UNMETERED 네트워크 제약 조건의 지원을 추가했습니다. (I08d5e)
  • setProgressAsync()의 다중 프로세스 worker가 지원됩니다. (Ib6d08)
  • 다른 androidx.startup.Initializer가 종속 항목으로 사용할 수 있도록 WorkManagerInitializer를 공개합니다. (I5ab11)

버전 2.6.0-alpha01

2021년 3월 24일

androidx.work:work-*:2.6.0-alpha01이 출시되었습니다. 버전 2.6.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • WorkManager는 이제 androidx.startup을 사용하여 WorkManager를 초기화합니다. 이전에는 androidx.work.impl.WorkManagerInitializer를 통해 초기화되었습니다. (aosp/1608813)

    이전에 프로세스 수명 주기를 초기화할 때 ContentProvider에서 사용한 tools:node="remove"를 사용한 경우 대신 다음을 해야 합니다.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    또는

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

API 변경사항

  • ListenableWorker의 outputData를 반환하는 Result.getOutputData() API를 추가합니다. (Ie51e3)

버그 수정

  • AlarmManager API를 사용할 때 SecurityException을 일으키는 OEM 버그의 수정 방법을 추가합니다. (aosp/1587518)

버전 2.5.0

.

버전 2.5.0

2021년 1월 27일

androidx.work:work-*:2.5.0가 출시되었습니다. 버전 2.5.0에 포함된 커밋을 확인하세요.

2.4.0 이후 주요 변경사항

  • 여러 프로세스를 사용하는 앱을 위한 새로운 :work:work-multiprocess 아티팩트입니다. 이를 통해 작업 요청 스케줄링을 단일 프로세스로 통합하여 성능을 높일 수 있습니다.
    • work-multiprocess를 사용하려면 implementation "androidx.work:work-multiprocess:2.5.0"의 종속 항목을 정의합니다.
    • Configuration.Builder.setDefaultProcessName(String)을 사용하여 기본 프로세스를 지정합니다.
    • work-multiprocess를 사용할 때는 RemoteWorkManager를 사용하여 WorkRequest를 관리하는 것이 좋습니다. RemoteWorkManager는 항상 지정된 프로세스에 도달합니다. 진행 중인 스케줄러는 지정된 프로세스에서도 실행됩니다.
  • ActivityManagerJobService 인스턴스를 인스턴스화하여 작업을 시작할 수 없을 때도 있습니다. 따라서 기본 작업이 플랫폼 버그로 인해 자동으로 누락됩니다. WorkManager가 이제 작업을 조정하여 Application이 초기화될 때 모든 단일 WorkRequest마다 지원 작업이 있는지 확인합니다. 이렇게 하면 작업 실행 안정성이 크게 향상됩니다. (b/172475041, aosp/1489577)
  • WorkRequest가 완료된 후 WorkRequest가 추적되는 버퍼 기간을 줄여 WorkManager가 데이터베이스 증가를 제한합니다. 이전에 기간은 7일이었습니다. 1일 + keepResultsForAtLeast 기간으로 줄었습니다. (aosp/1419708)
  • 이제 TestListenableWorkerBuilderListenableWorker를 확장하는 구체화된 클래스를 지원하여 더 쉽게 테스트할 수 있습니다. (aosp/1443299, b/169787349)
  • 이제 Android 스튜디오 Arctic Fox를 사용할 때 WorkManager inspector를 사용할 수 있습니다.

버전 2.5.0-rc01

2021년 1월 13일

androidx.work:work-*:2.5.0-rc01이 출시되었습니다. 버전 2.5.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • WorkQuery 기반 API를 사용할 때 항목이 업데이트된 후 getWorkInfosLiveData가 제대로 무효화되지 않는 버그를 수정했습니다. (aosp/1540566, b/173769028)
  • 드문 경우이지만, 데이터베이스 트랜잭션이 성공으로 표시되지 않는 버그를 수정했습니다. 이로 인해 일부 Motorola 기기에서 문제가 발생합니다. (aosp/1535368, b/175944460)
  • 종료된 프로세스에서 바인딩을 해제하려고 할 때 NoSuchElementException이 무시되는 버그를 수정했습니다. (aosp/1530589)
  • ConstraintTrackingWorker를 개선하여 ListenableWorker만 중단하도록 합니다(아직 중단되지 않은 경우). (aosp/1496844, b/172946965)
  • 자바 8을 타겟팅하도록 androidx.work 라이브러리를 업데이트합니다(Ibd2f2).

버전 2.5.0-beta02

2020년 12월 2일

androidx.work:work-*:2.5.0-beta02가 출시되었습니다. 버전 2.5.0-beta02에 포함된 커밋을 확인하세요.

버그 수정

  • 지정된 프로세스에 결합하려고 할 때 WorkManager가 의도치 않게 호출 스레드를 차단하는 androidx.work:work-multiprocess의 버그가 수정되었습니다. (aosp/1475538)
  • PeriodicWorkRequest가 올바르게 조정되지 않는 버그가 수정되었습니다. (b/172475041, aosp/1489577)
  • setForeground* API를 사용할 때 포그라운드 서비스가 중지되는 플랫폼 버그 관련 해결 방법이 추가되었습니다. (b/170924044, aosp/1489901)

버전 2.5.0-beta01

2020년 10월 28일

androidx.work:work-*:2.5.0-beta01가 출시되었습니다. 버전 2.5.0-beta01에 포함된 커밋을 확인하세요.

새로운 기능

  • WorkManager는 진행 중인 스케줄러에서 선택할 수 있는 WorkRequest 개수를 자동으로 제한합니다. 요청은 여전히 FIFO 순서로 실행됩니다. (aosp/1455228)
  • WorkManager는 애플리케이션의 Datastore 상태가 좋지 않으면 복구를 시도합니다. (aosp/1463103)

버그 수정

  • ListenableWorker가 중단되는 경우 나중에 다시 예약할 수 있도록 ENQUEUED를 즉시 표시하세요. (aosp/1455618, b/170273988)

버전 2.5.0-alpha03

2020년 10월 14일

androidx.work:work-*:2.5.0-alpha03가 출시되었습니다. 버전 2.5.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • TestListenableWorkerBuilderTestWorkerBuilder는 원시 유형을 사용하지 않습니다. (I883ad, b/169787349)

버그 수정

  • ApplicationInfo를 사용하여 기본 앱 프로세스의 이름을 결정합니다. (b/168716641, aosp/1429950)
  • RemoteWorkManagerRemoteWorkContinuation의 공개 상태 규칙을 수정합니다. 이러한 API는 더 이상 @Restricted로 표시되지 않습니다. (aosp/1432091)
  • :work:work-multiprocess의 proguard 규칙을 수정합니다. (aosp/1432091)
  • 포그라운드 서비스에 바인딩된 장기 실행 작업의 알림 수명 주기를 개선합니다. (b/168502234, aosp/1431331)

버전 2.5.0-alpha02

2020년 9월 16일

androidx.work:work-*:2.5.0-alpha02가 출시되었습니다. 버전 2.5.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • id를 사용하여 WorkInfo를 쿼리할 수 있도록 WorkQuery에 API를 추가합니다. (aosp/1412372, b/157335295)
  • WorkManager가 새 아티팩트 (androidx.work:work-multiprocess:*)와 함께 여러 프로세스를 사용하는 앱을 더 잘 지원합니다. 이 새로운 아티팩트는 다음을 비롯하여 큰 앱에서 발생하는 몇 가지 문제를 해결하는 데 도움이 됩니다.
    • WorkManager는 일반적으로 모든 앱 프로세스에서 초기화해야 합니다. 이는 SQLite 경합이 증가하여 결과적으로 다른 문제가 발생하므로 바람직하지 않습니다. WorkManager에는 이제 Configuration#setDefaultProcessName(processName)을 사용하여 기본 앱 프로세스를 지정하는 데 사용할 수 있는 새 API가 있습니다. processNamepackageName:processName과 비슷한 정규화된 프로세스 이름입니다(예: com.example:remote).
    • 새 API 세트: 작업 요청을 enqueue, cancel, query하는 RemoteWorkManagerRemoteWorkContinuation. 이러한 API는 여러 프로세스에서 SQLite 경합을 방지하기 위해 LiveData 변형을 포함하지 않습니다. 모든 enqueue, cancel, query 호출은 AIDL을 사용하여 primary 앱 프로세스에 전달되고 유연한 ListenableFuture를 반환합니다. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

API 변경사항

  • 이제 WorkManager가 완료되지 않은 종속 항목이 없는 완료된 WorkRequest를 더 적극적으로 제거합니다. 버퍼 기간이 7일에서 1일로 변경되었습니다. (aosp/1419708)

버그 수정

  • 이제 WorkManager가 작업을 사전에 조정하므로 WorkManager가 초기화될 때 WorkRequestJobScheduler 작업이 동기화됩니다. (aosp/1412794, b/166292069)

버전 2.5.0-alpha01

2020년 8월 19일

androidx.work:work-*:2.5.0-alpha01가 출시되었습니다. 버전 2.5.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 내부 API가 변경되어 향후 WorkManager에 더 나은 도구를 제공할 수 있습니다. 추가 업데이트를 기대해 주세요.

버그 수정

  • 일부 기기에서 네트워크 상태를 추적할 때 SecurityException를 처리합니다. (aosp/1396969)

외부 기여

버전 2.4.0

버전 2.4.0

2020년 7월 22일

androidx.work:work-*:2.4.0가 출시되었습니다. 버전 2.4.0에 포함된 커밋을 확인하세요.

2.3.0 이후 주요 변경사항

  • 진행 중인 WorkManager 스케줄러에서 더 많은 기능이 제공됩니다. 기존에는 지연되지 않고 제약 조건이 충족되는 작업의 실행만 진행 중인 Scheduler 스케줄러에서 고려했습니다. 이제 진행 중인 스케줄러에서는 PeriodicWorkRequest를 포함해 향후 실행될 수 있는 WorkRequest를 추적합니다. 또한 진행 중인 Scheduler에서는 일정 예약 한계를 관찰하지는 않습니다(하지만 여전히 WorkManager에 사용되는 Executor의 크기로 제한됨). 따라서 이제 애플리케이션이 포그라운드에 있을 때 앱에서 훨씬 많은 WorkRequest를 실행할 수 있습니다. 포그라운드에서 지연된 작업의 실행을 관리하기 위해 WorkManager에서는 구성 가능한 새로운 RunnableScheduler도 도입했습니다. (aosp/1185778)
  • 이제 WorkManager에서 RxJava 3을 지원합니다. RxJava 3을 사용하려면 implementation "androidx.work:work-rxjava3:2.4.0" 종속 항목을 포함해야 합니다. (aosp/1277904)
  • WorkQuery를 사용하여 WorkInfo를 쿼리하는 기능이 추가되었습니다. 이 기능은 개발자가 여러 속성의 조합으로 WorkInfo를 쿼리하려고 할 때 유용합니다. 자세한 내용은 WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) 또는 WorkQuery.Builder.fromUniqueWorkNames(...)를 참고하세요. (aosp/1253230b/143847546 참고)
  • 다음 구문을 사용하여 WorkManager에서 진단 정보를 요청하는 기능이 추가되었습니다.

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    이 기능은 다음과 같은 유용한 정보를 많이 제공합니다.

    • 지난 24시간 이내에 완료된 WorkRequest.
    • 현재 실행 중인 WorkRequest.
    • 예약된 WorkRequest. (aosp/1235501)
  • APPEND와 유사하지만 취소 또는 실패한 기본 요건이 있는 체인을 대체하는 ExistingWorkPolicy.APPEND_OR_REPLACE를 추가합니다. (b/134613984aosp/1199640 참고)

  • 맞춤 RunnableScheduler를 추가하여 향후 실행에 필요한 WorkRequest를 추적하는 기능을 제공합니다. 이 기능은 진행 중인 스케줄러에서 사용합니다. (aosp/1203944 참고)

  • DelegatingWorkerFactory를 사용할 때 위임할 팩토리를 동적으로 추가하는 지원이 추가됩니다. (b/156289105, aosp/1309745)

  • BATTERY_NOT_LOW 제약 조건 추적을 플랫폼과 더 긴밀하게 정렬합니다. (aosp/1312583)

  • 이제 프로세스 내 스케줄러에서 더 나은 API를 사용하여 프로세스 이름을 확인합니다. 여러 프로세스를 사용하는 앱 지원을 개선하는 데 유용합니다. (aosp/1324732)

  • 다음을 실행하는 새로운 린트 규칙

    • setForegroundAsync() API를 사용할 경우 올바른 foregroundServiceType 사용 (b/147873061aosp/1215915 참고)
    • JobService API를 직접 사용할 때 WorkManager가 사용해야 하는 JobScheduler ID를 지정합니다. (aosp/1223567)
    • 기본 WorkerFactory를 사용할 때 이제 ListenableWorker 구현이 public이 되도록 하는 새로운 린트 규칙이 추가되었습니다. (aosp/1291262 참고)
  • ListenableWorker 완료 전에 완료되지 않는 setForegroundAsync() 호출은 이제 반환된 ListenableFuture에서 IllegalStateException을 통해 신호를 보냅니다. (aosp/1262743 참고)

  • 포그라운드 Worker가 중단된 후에도 ForegroundService가 중지되지 않는 버그가 수정되었습니다. (b/155579898, aosp/1302153)

  • WorkManager가 포그라운드 서비스에 바인드된 Worker의 여러 인스턴스를 실행하려고 하는 버그가 수정되었습니다. (b/156310133, aosp/1309853)

버전 2.4.0-rc01

2020년 6월 24일

androidx.work:work-*:2.4.0-rc01가 출시되었습니다. 버전 2.4.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 프로세스 내 스케줄러에서 더 나은 API를 사용하여 프로세스 이름을 확인합니다. 여러 프로세스를 사용하는 앱 지원을 개선하는 데 유용합니다. (aosp/1324732)

버전 2.4.0-beta01

2020년 5월 20일

androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01, androidx.work:work-testing:2.4.0-beta01이 출시되었습니다. 버전 2.4.0-beta01에 포함된 커밋을 확인하세요.

버그 수정

  • 포그라운드 Worker가 중단된 후에도 ForegroundService가 중지되지 않는 버그가 수정되었습니다. (b/155579898, aosp/1302153)
  • WorkManager가 포그라운드 서비스에 바인드된 Worker의 여러 인스턴스를 실행하려고 하는 버그가 수정되었습니다. (b/156310133, aosp/1309853)
  • DelegatingWorkerFactory를 사용할 때 위임할 팩토리를 동적으로 추가하는 지원이 추가됩니다. (b/156289105, aosp/1309745)
  • BATTERY_NOT_LOW 제약 조건 추적을 플랫폼과 더 긴밀하게 정렬합니다. (aosp/1312583)

버전 2.4.0-alpha03

2020년 4월 29일

androidx.work:work-*:2.4.0-alpha03가 출시되었습니다. 버전 2.4.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 WorkManager에서 RxJava 3을 지원합니다. RxJava 3을 사용하려면 implementation "androidx.work:work-rxjava3:2.4.0-alpha03" 종속 항목을 포함해야 합니다. (aosp/1277904)
  • 기본 WorkerFactory를 사용할 때 이제 ListenableWorker 구현이 public이 되도록 하는 새로운 린트 규칙이 추가되었습니다. (aosp/1291262 참고)

API 변경사항

  • 이제 ListenableWorker 실행이 완료된 후 setProgressAsync()를 호출하면 ListenableFuture를 통해 Exception 신호를 보냅니다. (aosp/1285494 참고)
  • 이제 WorkQuery.Builderfinal로 표시됩니다. (aosp/1275037 참고)
  • WorkQuery.Builder 팩토리 메서드 withStates, withTags, withUniqueWorkNames의 이름이 각각 fromStates, fromTags, fromUniqueWorkNames로 변경되었습니다. (aosp/1280287 참조)

버그 수정

  • 기기의 네트워크 상태를 추적할 때 SecurityException를 무시합니다. (b/153246136, aosp/1280813 참조)

버전 2.4.0-alpha02

2020년 4월 1일

androidx.work:work-*:2.4.0-alpha02가 출시되었습니다. 버전 2.4.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • WorkRequestConstraints.setRequiresCharging(...)Constraints.setRequiresDeviceIdle(...)이 모두 필요할 경우 경고하는 새로운 린트 규칙이 추가되었습니다. 일부 기기는 충전 중이면서 동시에 유휴 상태일 수 없습니다. 따라서 이러한 요청의 실행 빈도는 예상보다 적습니다. (aosp/1253840 참조)

API 변경사항

  • WorkQuery를 사용하여 WorkInfo를 쿼리하는 기능이 추가되었습니다. 이 기능은 개발자가 여러 속성의 조합으로 WorkInfo를 쿼리하려고 할 때 유용합니다. 자세한 내용은 WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) 또는 WorkQuery.Builder withUniqueWorkNames(...)를 참고하세요. (aosp/1253230b/143847546 참고)

  • ListenableWorker 완료 전에 완료되지 않는 setForegroundAsync() 호출은 이제 반환된 ListenableFuture에서 IllegalStateException을 통해 신호를 보냅니다. (aosp/1262743 참고)

버그 수정

  • PeriodicWorkRequest의 잘못된 간격을 확인하는 린트 규칙이 수정되었습니다. (aosp/1254846b/152606442 참조)

버전 2.4.0-alpha01

2020년 3월 4일

androidx.work:work-*:2.4.0-alpha01가 출시되었습니다. 버전 2.4.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 진행 중인 WorkManager 스케줄러에서 더 많은 기능이 제공됩니다. 기존에는 지연되지 않고 제약 조건이 충족되는 작업의 실행만 진행 중인 스케줄러에서 고려했습니다. 이제 진행 중인 스케줄러에서는 PeriodicWorkRequest를 포함해 향후 실행될 수 있는 WorkRequest를 추적합니다. 또한 일정 예약 한계를 관찰하지는 않지만 WorkManager에서 사용되고 있는 Executor의 크기는 여전히 제한합니다. 이제 앱이 포그라운드에 있을 때 애플리케이션에서 훨씬 많은 WorkRequest를 실행할 수 있습니다. (aosp/1185778)

  • WorkManager에서 adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"을 사용하여 진단 정보를 요청하는 기능이 추가되었습니다. 이 기능은 다음과 같은 유용한 정보를 많이 제공합니다.

    • 지난 24시간 이내에 완료된 WorkRequest.
    • 현재 실행 중인 WorkRequest.
    • 예약된 WorkRequest. (aosp/1235501)
  • 다음을 실행하는 새로운 린트 규칙

    • setForegroundAsync() API를 사용할 경우 올바른 foregroundServiceType 사용 (b/147873061aosp/1215915 참고)
    • JobService API를 직접 사용할 경우 WorkManager에서 사용해야 하는 JobScheduler ID 지정 (aosp/1223567 참조)

API 변경사항

  • APPEND와 유사하지만 취소 또는 실패한 기본 요건이 있는 체인을 대체하는 ExistingWorkPolicy.APPEND_OR_REPLACE를 추가합니다. (b/134613984aosp/1199640 참고)

  • 맞춤 RunnableScheduler를 추가하여 향후 실행에 필요한 WorkRequest를 추적하는 기능을 제공합니다. 이 기능은 진행 중인 스케줄러에서 사용합니다. (aosp/1203944 참고)

버그 수정

  • 이전에 불가능한 유형인 Single<Void>를 반환했기 때문에 RxWorker에서 setProgress()가 지원 중단되었습니다. 대신 Completable을 반환하는 새로운 API setCompletableProgress()가 추가되었으며 새로운 API로 이전하는 데 도움이 되는 새로운 린트 규칙도 추가되었습니다. (b/150080946aosp/1242665 참조)

버전 2.3.4

버전 2.3.4

2020년 3월 18일

androidx.work:work-*:2.3.4가 출시되었습니다. 버전 2.3.4에 포함된 커밋을 확인하세요.

버그 수정

  • 10분 실행 기간을 초과한 후 여러 개의 장기 실행 Worker인스턴스를 실행하는 버그가 수정되었습니다. (aosp/1247484b/150553353 참고)
  • WorkManager의 린트 IssueRegistry가 수정되었습니다. 도와주신 Slack의 @ZacSweers 님에게 감사드립니다. (aosp/1217923 참조)

버전 2.3.3

버전 2.3.3

2020년 3월 4일

androidx.work:work-*:2.3.3가 출시되었습니다. 버전 2.3.3에 포함된 커밋을 확인하세요.

버그 수정

  • Worker가 중단된 경우 일정이 올바르게 변경되지 않는 버그가 수정되었습니다. (b/150325687aosp/1246571 참조)

버전 2.3.2

버전 2.3.2

2020년 2월 19일

androidx.work:work-*:2.3.2이 출시되었습니다. 버전 2.3.2에 포함된 커밋을 확인하세요.

버그 수정

  • WorkManager가 JobScheduler에서 드물게 100개 작업 한도를 초과하는 문제를 해결합니다. (aosp/1226859b/149092520 참고)
  • ConstraintControllers의 경합 상태를 수정합니다. (aosp/1220100 참고)
  • 장기 실행 Worker의 관리 포그라운드 서비스 수명이 향상되었습니다. (aosp/1226295 참고)
  • Worker 취소 시 장기 실행 Worker의 알림 취소의 관리가 개선되었습니다. (aosp/1228346 참조)

버전 2.3.1

버전 2.3.1

2020년 2월 5일

androidx.work:work-*:2.3.1가 출시되었습니다. 버전 2.3.1에 포함된 커밋을 확인하세요.

버그 수정

  • 포그라운드 Service가 활성 상태일 때 실행되는 장기 실행 WorkerNotification 수명 관리가 개선됩니다. (aosp/1218539b/147249312 참고)
  • WorkManager는 이제 androidx.sqlite:sqlite-framework:2.1.0 stable에 종속됩니다. (aosp/1217729 참고)
  • ForegroundInfo에서 foregroundServiceType을 사용할 경우 AndroidManifest.xml에서 foregroundServiceType이 지정되도록 하는 린트 규칙이 추가되었습니다. (aosp/1214207b/147873061 참조)

버전 2.3.0

버전 2.3.0

2020년 1월 22일

androidx.work:work-*:2.3.02.3.0-rc01 이후 변경사항 없이 출시되었습니다. 버전 2.3.0에 포함된 커밋을 확인하세요.

2.2.0 이후 중요 변경사항

  • ListenableWorker#setForegroundAsync()를 통해 장기간 실행되거나 중요한 작업을 지원합니다.
  • ListenableWorker#setProgressAsync()를 통해 Worker 진행 상황을 관찰할 수 있습니다.
  • 이제 WorkManager가 추가 린트 규칙을 라이브러리의 일부로 패키지화합니다. 그러면 버그를 조기에 발견하는 데 도움이 됩니다.

버전 2.3.0-rc01

2020년 1월 8일

androidx.work:work-*:2.3.0-rc01가 출시되었습니다. 버전 2.3.0-rc01에 포함된 커밋을 확인하세요.

이 버전은 2.3.0-beta02와 동일합니다.

버그 수정

  • 이제 work-testing 아티팩트는 work-runtime-ktx에 관한 api 종속 항목을 정의합니다. (aosp/1194410 참조)

버전 2.3.0-beta02

2019년 12월 18일

androidx.work:work-*:2.3.0-beta02가 출시되었습니다. 버전 2.3.0-beta02에 포함된 커밋을 확인하세요.

새로운 기능

  • 복구할 수 없는 SQLite 예외에 관한 보다 정확한 오류 메시지가 추가되었습니다. (aosp/1185777 참고)
  • 주문형 초기화를 사용할 때 콘텐츠 제공업체 androidx.work.impl.WorkManagerInitializerAndroidManifest.xml에서 삭제되도록 보장하는 린트 규칙이 추가되었습니다. (aosp/1167007 참고)
  • enqueue()enqueueUniquePeriodicWork()가 아닌 PeriodicWorkRequest에 사용될 때 린트 경고가 발생하도록 추가되었습니다. (aosp/1166032 참조)

API 변경사항

  • 이제 ForegroundInfo에서는 ListenableWorker.setForegroundAsync()를 사용할 때 사용할 notificationId를 지정해야 합니다. 브레이킹 체인지입니다. 이를 통해 여러 개의 장기 실행 Worker를 동시에 실행할 수 있습니다. 또한 WorkManager는 제공된 Notification의 전체 기간을 보다 정확하게 관리합니다. (b/145473554, aosp/1181208, asop/1181216, asop/1183577 참조)

버그 수정

  • AlarmManager 구현에서 알람이 올바르게 정리되지 않는 버그가 수정되었습니다. (aosp/1156444 참고)
  • WorkRequest의 빈 목록으로 인해 잘못된 WorkContinuation 체인이 빌드되는 버그가 수정되었습니다. (b/142835274, aosp/1157051 참조)

종속 항목 변경사항

  • 이제 WorkManager는 Room 2.2.2를 사용합니다.

버전 2.3.0-beta01

2019년 11월 20일

androidx.work:work-*:2.3.0-beta01가 출시되었습니다. 버전 2.3.0-beta01에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • 주문형 초기화를 사용할 때 androidx.work.Configuration.Provider의 잘못된 구현으로 인한 개발자 오류를 방지하는 새로운 린트 규칙이 추가되었습니다. aosp/1164559를 참고하세요.

버전 2.3.0-alpha03

2019년 10월 23일

androidx.work:work-*:2.3.0-alpha03가 출시되었습니다. 버전 2.3.0-alpha03에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • AndroidManifest.xml에 다른 구성요소를 등록하지 않고도 WorkRequest를 쉽게 취소할 수 있게 하는 WorkManager.createCancelPendingIntent() API가 추가되었습니다. 이 API를 사용하면 특히 NotificationWorkRequest를 쉽게 취소할 수 있습니다. 이 API가 2.3.0의 새로운 포그라운드 API와 쌍을 이룰 것으로 예상합니다.
  • 이제 WorkManager는 androidx.room:*:2.2.0 안정화 버전에 종속됩니다.

API 변경사항

  • 기본 플랫폼 API와의 일관성을 강화하기 위해 ForegroundInfo.getNotificationType()의 이름이 ForegroundInfo.getForegroundServiceType()으로 변경되었습니다. b/142729893aosp/1143316을 참조하세요.

버그 수정

  • 트랜잭션 외부에서 setTransactionSuccessful()을 불필요하게 호출하여 발생하는 버그가 수정되었습니다. 이 버그는 이전 시 드물게 발생합니다. b/142580433aosp/1141737을 참조하세요.

버전 2.3.0-alpha02

2019년 10월 9일

androidx.work:work-*:2.3.0-alpha02가 출시되었습니다. 버전 2.3.0-alpha02에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • 이제 WorkManager는 OS에 의해 활성 상태로 유지되어야 하는 장기 실행 작업이나 중요한 작업의 실행을 지원합니다. 자세한 내용은 ListenableWorker#setForegroundAsync()(또는 Kotlin이면 CoroutineWorker#setForeground())를 참조하세요. 또한 aosp/1133636을 참조하세요.

API 변경사항

  • DatacontainsKey API는 hasKeyWithValueOfType으로 이름이 변경됩니다. 또한 ktx 라이브러리의 상응하는 확장 메서드도 이름이 변경되었습니다. b/141916545를 참조하세요.

버그 수정

  • WorkManager 일정은 대기열에 추가된 WorkRequest 수가 일정 예약 한계에 근접할 때 적절하게 작동합니다. aosp/1105766을 참고하세요.
  • WorkManager는 작업이 아직 완료되지 않았을 때만 ListenableWorker#onStopped()를 호출합니다. b/140055777을 참고하세요.
  • 이제 WorkManager는 worker가 중단되거나 최종적인 상태에 도달하면 진행 정보를 삭제합니다. aosp/1114572를 참고하세요.
  • Data에는 이제 훨씬 더 유용한 toString() 표현이 있습니다. b/140945323을 참고하세요.
  • Data에는 이제 더 나은 equals() 메서드가 있습니다. 또한 Data는 Array 유형에서 deepEquals를 지원합니다. b/140922528을 참고하세요.
  • 이제 WorkManager는 내부 데이터베이스 및 환경설정 파일을 백업 없는 디렉터리에 저장합니다. b/114808216을 참조하세요.

버전 2.3.0-alpha01

2019년 8월 22일

androidx.work:work-*:2.3.September 5, 20190-alpha01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 ListenableWorker에서는 setProgressAsync() API를 통해 진행 상황을 설정할 수 있습니다. 또한 Single<Void>를 반환하는 CoroutineWorker의 상응하는 suspend-ing setProgress API 및 RxWorkersetProgress가 추가되었습니다. 이러한 새 API를 사용하여 Worker는 상응하는 getProgress API가 있는 WorkInfo를 통해 진행 정보를 전달할 수 있습니다. b/79481554를 참고하세요.
  • Data에는 Worker의 입력 데이터에 예상된 유형의 키가 있는지 확인하는 데 사용할 수 있는 containsKey() API가 있습니다. b/117136838을 참조하세요.
  • 이제 Data.toByteArray()Data.fromByteArray()를 사용하여 Data를 직렬화할 수 있습니다. Data 관련 버전 관리 보증이 없으므로 버전 관리 보증을 지속하거나 애플리케이션 간 IPC에 사용해서는 안 됩니다. 동일한 애플리케이션의 여러 프로세스 간에만 안전하게 사용할 수 있습니다.
  • Configuration.setInputMergerFactory를 통해 InputMergerFactory를 지정하는 기능이 추가되었습니다. b/133273159를 참조하세요.

API 변경사항

  • WorkerFactory가 이전에 호출된 ListenableWorker 인스턴스를 반환하면 WorkManager는 IllegalStateException 인스턴스를 발생시킵니다. b/139554406을 참고하세요.
  • ListenableWorkerListenableFuture 취소 및 onStopped() 콜백 관련 문서가 업데이트됩니다. b/138413671을 참조하세요.

버그 수정

  • 이제 진행 중인 스케줄러에서는 idle 제약 조건이 있는 WorkRequest를 무시합니다. 기기가 실제로 idle 상태일 때 이제 JobScheduler에서만 이러한 요청을 선택합니다. aosp/1089779를 참고하세요.
  • 이제 TestScheduler는 테스트에서 내부 작업 실행기에 지정된 Executor를 올바르게 사용합니다. aosp/1090749를 참조하세요.

버전 2.2.0

버전 2.2.0

2019년 8월 15일

androidx.work:work-*:2.2.0가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

이 버전은 androidx.work:work-*:2.2.0-rc01 버전과 동일합니다.

2.2.0에서 2.1.0과 달라진 중요 변경사항

androidx.work:work-gcm:2.2.0은 API 수준 22 이하에서 Google Play 서비스를 이용할 수 있을 때 GCMNetworkManager를 스케줄러로 사용하도록 지원하는 새로운 Maven 아티팩트입니다. 또한 이전 API 버전에서 더욱 안정적이고 뛰어난 백그라운드 처리를 지원하는 선택적 종속 항목입니다. 앱에서 Google Play 서비스를 사용하는 경우 gradle 파일에 이 종속 항목을 추가하여 GCMNetworkManager 지원을 자동으로 받으세요. Google Play 서비스를 사용할 수 없는 경우 WorkManager는 이전 기기의 AlarmManager에 계속해서 폴백됩니다.

버전 2.2.0-rc01

2019년 7월 30일

androidx.work:work-*:2.2.0-rc01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • AlarmManager 구현에서 서비스가 조기 종료되고 드물게 RejectedExecutionException이 발생하는 버그가 수정되었습니다. aosp/1092374b/138238197을 참조하세요.
  • 일부 기기에서 JobScheduler API를 사용할 때 발생하는 NullPointerException 관련 해결 방법이 추가되었습니다. aosp/1091020, b/138364061b/138441699를 참조하세요.

버전 2.2.0-beta02

2019년 7월 19일

androidx.work:work-*:2.2.0-beta02가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 2.2.0-beta01에 도입된 의도치 않은 jacoco 종속 항목이 삭제되었습니다.

버전 2.2.0-beta01

2019년 7월 17일

androidx.work:work-*:2.2.0-beta01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • androidx.work:work-gcm:2.2.0-beta01은 API 수준 22 이하에서 Google Play 서비스를 이용할 수 있을 때 GCMNetworkManager를 스케줄러로 사용하도록 지원하는 새로운 Maven 아티팩트입니다. 또한 이전 API 버전에서 더욱 안정적이고 뛰어난 백그라운드 처리를 지원하는 선택적 종속 항목입니다. 앱에서 Google Play 서비스를 사용하는 경우 gradle 파일에 이 종속 항목을 추가하여 GCMNetworkManager 지원을 자동으로 받으세요. Google Play 서비스를 사용할 수 없는 경우 WorkManager는 이전 기기의 AlarmManager에 계속해서 폴백됩니다.

버그 수정

  • Nvidia Shield K1 태블릿에서 네트워크 상태를 추적할 때 발생하는 IllegalArgumentException이 수정되었습니다. aosp/1010188을 참조하세요.

버전 2.1.0

버전 2.1.0

2019년 7월 11일

androidx.work:work-*:2.1.0가 출시되었습니다. 이 버전은 androidx.work:work-*:2.1.0-rc01 버전과 동일합니다.

2.0.1 이후 중요 변경사항

  • work-runtime-ktx에는 이제 자바 8이 필요합니다. 문제가 발생하면 build.gradlekotlinOptions { jvmTarget = "1.8" }을 추가할 수 있습니다.
  • 참조될 때만 WorkManager를 생성하는 WorkManager를 위한 주문형 초기화가 추가되었습니다. b/127497100 주문형 초기화를 지원하도록 프로젝트를 설정하려면 다음 안내를 따르세요.
    1. 자동 이니셜라이저를 사용 중지합니다.
    2. 맞춤 Application 객체에 Configuration.Provider를 구현합니다.
    3. WorkManager.getInstance()의 모든 참조를 WorkManager.getInstance(Context)로 변경합니다. 이러한 변경에 따라 WorkManager.getInstance()가 지원 중단됩니다. 주문형 초기화를 실행하지 않더라도 항상 새로 대체한 WorkManager.getInstance(Context)를 호출하는 것이 더 안전합니다.
  • PeriodicWorkRequest는 이제 초기 지연을 지원합니다. PeriodicWorkRequest.Builder에서 setInitialDelay 메서드를 사용하여 초기 지연을 설정할 수 있습니다. b/111404867을 참고하세요.
  • DelegatingWorkerFactory를 사용하여 하나 이상의 등록된 WorkerFactory에 위임하는 기능이 추가되었습니다. b/131435993을 참조하세요.
  • WorkManager에서 Configuration.Builder.setTaskExecutor를 통해 모든 내부 부기에 사용하는 Executor를 맞춤설정하는 기능이 추가되었습니다.
  • work-testing 아티팩트에서 TestWorkerBuilderTestListenableWorkerBuilder를 사용하여 단위 테스트 가능한 WorkerListenableWorker 클래스를 생성하는 기능이 추가되었습니다.
    • work-testing은 이제 Kotlin을 종속 항목으로 가져오고 기본적으로 몇 가지 Kotlin 확장 프로그램을 포함합니다.
  • WorkInfo에 실행 시도 횟수가 추가되었습니다. (b/127290461 참조)
  • Data 유형은 이제 바이트 및 바이트 배열을 저장 및 검색할 수 있습니다. 그렇지만 Data 객체의 최대 크기는 변경되지 않습니다.
  • 이제 WorkManager는 Room 2.1.0에 종속되므로 일부 데이터베이스 문제가 수정됩니다.

버전 2.1.0-rc01

2019년 6월 27일

androidx.work:work-*:2.1.0-rc01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 백업이 진행 중인 동안 JobScheduler에서 작업을 실행할 때 애플리케이션이 비정상 종료되는 버그가 수정되었습니다. b/135858602를 참고하세요.

버전 2.1.0-beta02

2019년 6월 20일

androidx.work:work-*:2.1.0-beta02가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • TestListenableWorkerBuilder는 이제 ListenableWorker 인스턴스를 생성할 때 적절한 WorkerFactory를 사용합니다. b/135275844를 참고하세요.
  • 프로세스 종료으로 인해 WorkRequest의 실행 창에서 드리프트가 발생하던 버그가 수정되었습니다. b/135272196을 참고하세요.

버전 2.1.0-beta01

2019년 6월 13일

androidx.work:work-*:2.1.0-beta01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 이제 WorkManager는 Room 2.1.0에 종속되므로 일부 데이터베이스 문제가 수정됩니다.
  • 기본 스레드의 일부 시동 디스크 I/O가 삭제되었습니다.
  • 제약 조건 추적에서 잠재적 교착 문제를 해결했습니다. b/134361006
  • WorkManager와 관련된 잘못된 작업을 사전에 취소했습니다. b/134058261
  • 기기 오작동에 대비하여 일부 JobScheduler API 방어 호출을 추가했습니다.

버전 2.1.0-alpha03

2019년 6월 5일

androidx.work:*:2.1.0-alpha03 버전이 출시되었습니다.

버그 수정

  • PeriodicWorkRequest 문서가 개선되었습니다.
  • WorkManagerTestInitHelper는 이제 테스트에 적절한 백그라운드 실행기를 사용합니다.
  • 일부 기기에서 대용량 트랜잭션을 처리할 때 발생하는 SQLite 문제가 수정되었습니다. b/130182503을 참조하세요.
  • WorkManager의 종속 항목이 이제 더욱 세분화되었습니다. b/133169148을 참조하세요.
  • WorkManager를 사용하여 작업을 예약할 때 JobScheduler 구현에 발생하던 OEM 관련 버그가 수정되었습니다.
  • 이전에 드물게 장애를 일으키던 AlarmManager 기반 스케줄러가 서비스 전체 기간에서 향상되었습니다. b/133313734를 참조하세요.

버전 2.1.0-alpha02

2019년 5월 16일

WorkManager 2.1.0-alpha02가 출시되었습니다. 이 버전에는 몇 가지 새로운 API가 포함되어 있습니다.

API 변경사항

  • PeriodicWorkRequest는 이제 초기 지연을 지원합니다. PeriodicWorkRequest.Builder에서 setInitialDelay 메서드를 사용하여 초기 지연을 설정할 수 있습니다. b/111404867을 참고하세요.

  • DelegatingWorkerFactory를 사용하여 하나 이상의 등록된 WorkerFactory에 위임하는 기능이 추가되었습니다. b/131435993을 참조하세요.

  • WorkManager에서 Configuration.Builder.setTaskExecutor를 통해 모든 내부 부기에 사용하는 Executor를 맞춤설정하는 기능이 추가되었습니다.

  • WorkRequest.keepResultsForAtLeast(b/130638001 참고), 주문형 초기화 및 PeriodicWorkRequest.Builder(b/131711394 참고) 관련 문서가 개선되었습니다.

버전 2.1.0-alpha01

2019년 4월 24일

WorkManager 2.1.0-alpha01이 출시되었습니다. 이 버전에는 몇 가지 새로운 API가 포함되어 있습니다. 이 버전부터는 1.x 버전으로 백포트되지 않는 새로운 기능이 있습니다. 2.x 버전으로 전환하는 것이 좋습니다.

API 변경사항

  • 참조될 때만 WorkManager를 생성하는 WorkManager를 위한 주문형 초기화가 추가되었습니다. b/127497100 주문형 초기화를 지원하도록 프로젝트를 설정하려면 다음 안내를 따르세요.
    1. 자동 이니셜라이저를 사용 중지합니다.
    2. 맞춤 Application 객체에 Configuration.Provider를 구현합니다.
    3. WorkManager.getInstance()의 모든 참조를 WorkManager.getInstance(Context)로 변경합니다. 이러한 변경에 따라 WorkManager.getInstance()가 지원 중단됩니다. 주문형 초기화를 실행하지 않더라도 항상 새로 대체한 WorkManager.getInstance(Context)를 호출하는 것이 더 안전합니다.
  • work-testing 아티팩트에서 TestWorkerBuilderTestListenableWorkerBuilder를 사용하여 단위 테스트 가능한 WorkerListenableWorker 클래스를 생성하는 기능이 추가되었습니다.
    • work-testing은 이제 Kotlin을 종속 항목으로 가져오며 기본적으로 몇 가지 Kotlin 확장 프로그램도 포함합니다.
  • WorkInfo에 실행 시도 횟수가 추가되었습니다. (b/127290461 참조)
  • Data 유형은 이제 바이트 및 바이트 배열을 저장 및 검색할 수 있습니다. 그렇지만 Data 객체의 최대 크기는 변경되지 않습니다.
  • CoroutineWorker.coroutineContext이 지원 중단되었습니다. 이 필드는 CoroutineDispatcher로 잘못 입력되었습니다. 정지 함수의 본문에서 원하는 코루틴Context로 직접 이동할 수 있으므로 이 필드는 더 이상 필요하지 않습니다.
  • RxWorker.createWork()RxWorker.getBackgroundScheduler()는 이제 @NonNull 반환 유형으로 주석이 달립니다.

버전 2.0.1

버전 2.0.1

2019년 4월 9일

WorkManager 2.0.1이 출시되었습니다. 이 버전은 2.0.1-rc01과 동일합니다.

버전 2.0.1-rc01

2019년 4월 3일

WorkManager 2.0.1-rc01이 출시되었습니다. 이 버전에는 일부 버그 수정이 포함되어 있습니다. 기존 1.x 사용자의 경우 이러한 변경 중 일부가 1.0.1-rc01에도 나타납니다.

버그 수정

  • Robolectric 테스트가 이제 WorkManager에서 제대로 작동합니다. b/122553577을 참고하세요.
  • 이전 JobScheduler API에서 제약 조건 추적이 삭제되지 않는 극단적인 사례의 장애가 해결되었습니다. (b/129226383)
  • 긴 작업 체인을 처리할 때 발생하는 StackOverflowError가 수정되었습니다. b/129091233을 참고하세요.
  • API 23에서 flex 시간이 지원되지 않음을 나타내도록 PeriodicWorkRequest 문서가 업데이트되었습니다.
  • Kotlin 문서의 일부 깨진 링크가 수정되었습니다.

버전 2.0.0

버전 2.0.0

2019년 3월 20일

WorkManager 2.0.0이 출시되었습니다. 이 버전은 2.0.0-rc01과 동일하며 AndroidX 종속 항목이 있는 안정적인 1.0.0의 AndroidX 버전입니다. 기존 1.x 버전 대신 이 버전을 타겟팅하는 것이 좋습니다. 모든 진행 중인 개발에서는 2.x를 타겟팅하므로 1.x를 위한 중요 버그 수정은 제한된 기간 동안만 제공됩니다.

버전 2.0.0-rc01

2019년 3월 7일

WorkManager 2.0.0-rc01이 출시되었습니다. 이 버전은 안정적인 1.0.0과 동일하지만 AndroidX 종속 항목이 있습니다. 이 버전이 안정적인 2.0.0에 도달하면 이 버전을 포함해야 하며 기존 1.x 버전의 경우 일부 중요 버그 수정만 제공됩니다. 모든 진행 중인 개발에서는 2.x를 타겟팅합니다.

AndroidX 이전 종속 항목

Kotlin 확장 프로그램 사용에 관한 정보는 KTX 문서를 참고하세요.
참조 문서: 자바

Groovy

dependencies {
    def work_version = "1.0.1"

    // (Java only)
    implementation "android.arch.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "android.arch.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

    // (Java only)
    implementation("android.arch.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("android.arch.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("android.arch.work:work-rxjava2:$work_version")

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

버전 1.0.1

버전 1.0.1

2019년 4월 9일

WorkManager 1.0.1이 출시되었습니다. 이 버전은 1.0.1-rc01과 동일합니다.

향후 1.x 분기 업데이트는 소수에 불과할 것이므로 WorkManager 2.x로 업데이트하는 것이 좋습니다. 또한 1.x 라이브러리를 위한 새 API는 출시되지 않습니다.

버전 1.0.1-rc01

2019년 4월 2일

WorkManager 1.0.1-rc01이 출시되었습니다. 이 버전에는 일부 버그 수정이 포함되어 있습니다.

버그 수정

  • Robolectric 테스트가 이제 WorkManager에서 제대로 작동합니다. b/122553577을 참고하세요.
  • 이전 JobScheduler API에서 제약 조건 추적이 삭제되지 않는 극단적인 사례의 장애가 해결되었습니다. (b/129226383)
  • 긴 작업 체인을 처리할 때 발생하는 StackOverflowError가 수정되었습니다. b/129091233을 참고하세요.

버전 1.0.0

버전 1.0.0

2019년 3월 5일

WorkManager의 1.0.0 안정화 버전입니다. 이 WorkManager 버전은 1.0.0-rc02와 동일합니다.

버전 1.0.0-rc02

2019년 2월 21일

WorkManager 1.0.0 안정화 버전의 두 번째 출시 후보입니다. 이 버전에는 두 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • 이제 Worker는 애플리케이션 비정상 종료 이후에도 올바르게 예약됩니다. b/124546316을 참고하세요.

  • 확인되지 않은 Exception을 발생시키는 Worker가 이제 FAILED로 올바르게 표시되고 앱 프로세스가 더 이상 비정상 종료되지 않습니다.

버전 1.0.0-rc01

2019년 2월 14일

WorkManager 1.0.0 안정화 버전의 출시 후보입니다. 이 버전에는 한 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • AlarmManager 기반 구현은 이제 PeriodicWorkRequest의 flex 기간을 올바르게 준수합니다. b/124274584를 참고하세요.

버전 1.0.0-beta05

2019년 2월 6일

이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • JobScheduler.getPendingJob(...)이 API 23에 사용된 케이스가 수정되었습니다. b/123893059를 참고하세요.
  • Android 5.1(API 수준 22) 이하를 실행하는 기기의 NullPointerException이 수정되었습니다. b/123835104를 참고하세요.

버전 1.0.0-beta04

2019년 2월 4일

이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • AlarmManager 기반 구현의 PeriodicWork 일정 예약이 개선되었습니다.
  • AlarmManager 기반 구현을 사용할 때 WorkManager에서 제약 조건이 올바르게 추적되지 않던 문제가 해결되었습니다. (b/123379508)
  • AlarmManager 기반 구현을 사용할 때 WorkManager가 프로세스 종료 시 작업을 재시도하지 못하던 문제가 수정되었습니다. b/123329850을 참고하세요.
  • AlarmManager 기반 구현을 사용할 때 WorkManager에서 Wakelock을 유출시키는 문제가 수정되었습니다.

버전 1.0.0-beta03

2019년 1월 25일

이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • 일부 상황에서 작업이 적절하게 실행되지 않게 하는 회귀 1.0.0-beta02를 도입했습니다. b/123211993을 참고하세요.
  • 작업이 백오프 타이밍을 적절하게 따르지 않는 문제가 수정되었습니다. b/122881597을 참고하세요.
  • Android 5.1(API) 이하를 실행 중인 기기의 ConcurrentModificationException이 수정되었습니다. 1.0.0-beta02의 수정을 계속해서 진행한 것입니다. b/121345393을 참조하세요.
  • exported=false가 누락된 매니페스트의 일부 구성요소에 이 주석이 추가되었습니다.
  • 패키지 레벨 문서에 WorkManager가 OS와 상호작용하는 방법에 관한 정보가 포함되었습니다.

버전 1.0.0-beta02

2019년 1월 15일

이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • Android 6.0(API 수준 23)을 실행하는 기기에서 주기적 작업이 구간별로 두 번 이상 실행되던 극단적인 사례가 수정되었습니다. b/121998363
  • Android 5.1(API 수준 22) 이하를 실행하는 기기의 ConcurrentModificationException이 수정되었습니다. b/121345393
  • Android 5.1(API 수준 22) 이하를 실행하는 기기에서 제약 조건이 충족되지 않을 때 작업이 잘못 실행되는 문제가 수정되었습니다. b/122578012
  • 일부 극단적인 사례에서 작업 완료 처리가 더 빨라지도록 최적화했습니다. b/122358129
  • WorkManager에서 사용하는 LiveData의 여러 인스턴스 간 잠재적 경합 상태를 해결하기 위한 변경사항이 추가되었습니다.
  • 1.1.1-rc01 대신 Room 종속 항목 1.1.1을 사용하도록 이동했습니다. 이 두 버전은 동일합니다. b/122578011을 참고하세요.

버전 1.0.0-beta01

2018년 12월 19일

이 버전에는 API 변경사항이 없습니다. 앞으로 심각한 문제만 없다면 다음 버전까지 WorkManager가 API를 안정적으로 유지할 것으로 예상됩니다. 이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.

버그 수정

  • 성공적으로 완료된 상위 작업의 이전에 취소된 하위 작업이 더 이상 실행되지 않습니다. b/120811767
  • 로깅 클래스가 올바르게 초기화되었습니다(주로 테스트 중에 표시됨).

버전 1.0.0-alpha13

2018년 12월 12일

이 버전에는 일부 Kotlin 사용자에게 도움이 되는 소규모 API 변경사항이 포함되어 있습니다.

API 변경사항

  • androidx.work.ResultListenableWorker의 내부 클래스가 되도록 이동되었습니다. 이에 따라 Kotlin의 최상위 Result 클래스와 리팩터링 충돌이 발생하지 않습니다. API에 관한 브레이킹 체인지입니다. b/120564418

API에 관한 브레이킹 체인지

  • androidx.work.ResultListenableWorker의 내부 클래스가 되도록 이동되었습니다.

버전 1.0.0-alpha12

2018년 12월 5일

이 버전에는 일부 API에 관한 브레이킹 체인지가 있습니다. 아래 API에 관한 브레이킹 체인지 섹션을 참조하세요. 이 버전은 첫 번째 베타 버전으로 출시될 가능성이 높습니다. 또한 alpha12에는 광범위한 문서 업데이트도 포함되어 있습니다.

API 변경사항

  • 새 아티팩트 work-rxjava2에는 RxWorker가 도입됩니다. Single<Payload>가 필요한 ListenableWorker입니다.
  • 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면 work-firebase 아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다.
  • PayloadResult에 결합되었습니다. Result는 이제 세 가지 구체적인 구현이 포함된 '봉인된 클래스'이며 Result.success()(또는 Result.success(Data)), Result.failure()(또는 Result.failure(Data)) 및 Result.retry()를 통해 얻을 수 있습니다. ListenableFuture는 이제 Payload 대신 Result가 됩니다. Worker에는 출력 Data의 getter 및 setter 메서드가 없습니다. 브레이킹 체인지입니다.
  • 느리게 트리거하는 콘텐츠 URI를 더 잘 지원하기 위해 Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit), Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) 및 변형이 추가되었습니다. b/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) 변형이 추가되었습니다. 이 메서드에는 API 26이 필요합니다.
  • Operation.await()ListenableFuture.await() Kotlin 확장 메서드가 추가되었습니다.
  • Operation.getException()에서 Operation.getThrowable()로 이름이 변경되었습니다. 브레이킹 체인지입니다.
  • ContentUriTriggers 클래스와 이 클래스를 참조하는 메서드는 더 이상 공용으로 사용할 수 없습니다. 브레이킹 체인지입니다.
  • API 간소화를 위해 WorkManager, WorkContinuationOneTimeWorkRequest의 나머지 varargs 메서드가 삭제되었습니다. 빌드 문제를 수정하려면 기존 varargs를 Arrays.asList(...)로 래핑하면 됩니다. 여전히 각 메서드의 단일 인수 버전이 포함됩니다. 브레이킹 체인지입니다.
  • WorkContinuation.combine(OneTimeWorkRequest, *) 변형이 삭제되었습니다. 이러한 변형은 혼란을 야기하는 API를 제공했으며 기존의 combine 메서드가 더 이해하기 쉽습니다. 브레이킹 체인지입니다.

버그 수정

  • 이미 실행 중인 작업의 프로세스 중단을 복구하는 데 있어 이제 Marshmallow 이전 구현을 더욱 신뢰할 수 있습니다.
  • observeForever를 통해 관찰되는 LiveData가 WorkManager를 통해 추적됩니다. Room 라이브러리 수정의 백포트입니다. b/74477406을 참조하세요.
  • 이제 직렬화된 객체가 최대 크기를 초과하면 Data.Builder.build()에서 예외가 발생합니다. 이전에는 백그라운드 스레드에서만 발생하여 적절하게 처리할 수 없었습니다.
  • 중지된 작업과 취소된 작업이 더 명확하게 구별됩니다. getWorkInfoById()ListenableWorker.onStopped() 과정에서 CANCELLED StateWorkInfo를 반환합니다.
  • ListenableWorker에서 null Result가 실패로 처리됩니다. b/120362353
  • API 24를 실행 중인 Shield 태블릿에서 IllegalArgumentException이 가끔 발생하는 문제가 추론에 따라 수정되었습니다. (b/119484416 참조)

API에 관한 브레이킹 체인지

  • 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면 work-firebase 아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다.
  • PayloadResult에 결합되었습니다. Result는 이제 세 가지 구체적인 구현이 포함된 '봉인된 클래스'이며 Result.success()(또는 Result.success(Data)), Result.failure()(또는 Result.failure(Data)) 및 Result.retry()를 통해 얻을 수 있습니다. ListenableFuture는 이제 Payload 대신 Result가 됩니다. Worker에는 출력 Data의 getter 및 setter 메서드가 없습니다.
  • Operation.await()ListenableFuture.await() Kotlin 확장 메서드가 추가되었습니다.
  • Operation.getException()에서 Operation.getThrowable()로 이름이 변경되었습니다.
  • ContentUriTriggers 클래스와 이 클래스를 참조하는 메서드는 더 이상 공용으로 사용할 수 없습니다.
  • API 간소화를 위해 WorkManager, WorkContinuationOneTimeWorkRequest의 나머지 varargs 메서드가 삭제되었습니다. 빌드 문제를 수정하려면 기존 varargs를 Arrays.asList(...)로 래핑하면 됩니다. 여전히 각 메서드의 단일 인수 버전이 포함됩니다.
  • WorkContinuation.combine(OneTimeWorkRequest, *) 변형이 삭제되었습니다. 이러한 변형은 혼란을 야기하는 API를 제공했으며 기존의 combine 메서드가 더 이해하기 쉽습니다.

버전 1.0.0-alpha11

2018년 11월 8일

이 버전에는 beta에서 안정적인 API로 작동하는 데 필요한 여러 변경사항이 있습니다. 이 버전에는 API에 관한 브레이킹 체인지가 포함되어 있습니다. 아래 API에 관한 브레이킹 체인지 섹션을 참조하세요.

API 변경사항

  • work-runtime-ktx에는 새로운 CoroutineWorker가 도입됩니다.
  • WorkStatus의 이름이 WorkInfo로 변경되었습니다. 관련된 getStatus 메서드 변형의 이름이 모두 상응하는 getWorkInfo 변형으로 변경되었습니다. 브레이킹 체인지입니다.
  • ListenableWorker.onStopped()WorkRequest가 취소되었는지 여부를 나타내는 부울 인수를 더 이상 허용하지 않습니다. WorkManager에서는 더 이상 취소 여부를 구별하지 않습니다. 브레이킹 체인지입니다.
  • androidx.work.test 패키지에서 androidx.work.testing 패키지로 이름이 변경되었습니다. 브레이킹 체인지입니다.
  • Constraints의 setter가 더 이상 공개 API의 일부가 아닙니다. 브레이킹 체인지입니다.
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities()는 이전에 배열을 반환했습니다. 이제 이러한 메서드에서 컬렉션을 반환합니다. 브레이킹 체인지입니다.
  • ListenableWorker.onStartWork()에서 ListenableWorker.startWork()로 이름이 변경되었습니다. 브레이킹 체인지입니다.
  • WorkStatus의 생성자가 더 이상 공개 API의 일부가 아닙니다. 브레이킹 체인지입니다.
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID()에서 각각 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()로 이름이 변경되었습니다. 브레이킹 체인지입니다.
  • API의 인체공학을 개선하기 위해 공개 API에 다수의 @NonNull 주석이 추가되었습니다.
  • WorkManager.enqueueUniqueWork() API를 추가하여 WorkContinuation을 생성하지 않고도 고유한 OneTimeWorkRequest를 대기열에 추가할 수 있게 했습니다.
  • 이제 WorkManagerenqueuecancel 메서드 변형은 모두 새로운 Operation 유형을 반환합니다. 브레이킹 체인지입니다.
  • enqueue 변형은 모두 더 이상 WorkRequest의 varargs를 허용하지 않습니다. 브레이킹 체인지입니다. 대신 컬렉션을 사용하세요. Arrays.asList()를 사용하여 기존 코드를 수정할 수 있습니다. API 공개 부분과 메서드 수를 줄이려는 조치입니다.
  • 이제 프로세스당 두 번 이상 initialize WorkManager를 시도하면 IllegalStateException이 발생합니다. 브레이킹 체인지입니다.

버그 수정

  • work-runtime-ktx 아티팩트의 WorkRequest.Builder는 이제 ListenableWorker를 사용합니다. b/117666259 문제가 해결되었습니다.
  • PeriodicWork의 다음 런타임이 미래로 설정됩니다. b/118204399 문제가 해결되었습니다.
  • 앱 시작에 WorkManager를 사용할 때의 잠재 디스크 I/O를 제거했습니다. b/117796731 문제가 해결되었습니다.
  • WorkConstraintsTracker의 경합 상태가 수정되었습니다. 수정사항이며 android-workmanager/issues/56을 참고하세요.

API에 관한 브레이킹 체인지

  • WorkStatus의 이름이 WorkInfo로 변경되었습니다. 관련된 getStatus 메서드 변형의 이름이 모두 상응하는 getWorkInfo 변형으로 변경되었습니다.
  • ListenableWorker.onStopped()WorkRequest가 취소되었는지 여부를 나타내는 부울 인수를 더 이상 허용하지 않습니다. WorkManager에서는 더 이상 취소 여부를 구별하지 않습니다.
  • androidx.work.test 패키지에서 androidx.work.testing 패키지로 이름이 변경되었습니다.
  • Constraints의 setter가 더 이상 공개 API의 일부가 아닙니다.
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities()는 이전에 배열을 반환했습니다. 이제 이러한 메서드에서 컬렉션을 반환합니다.
  • ListenableWorker.onStartWork()에서 ListenableWorker.startWork()로 이름이 변경되었습니다.
  • WorkStatus의 생성자가 더 이상 공개 API의 일부가 아닙니다.
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID()에서 각각 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()로 이름이 변경되었습니다.
  • 이제 WorkManagerenqueuecancel 메서드 변형은 모두 새로운 Operation 유형을 반환합니다.
  • enqueue 변형은 모두 더 이상 WorkRequest의 varargs를 허용하지 않습니다.
  • 이제 프로세스당 두 번 이상 initialize WorkManager를 시도하면 IllegalStateException이 발생합니다.

버전 1.0.0-alpha10

2018년 10월 11일

이 버전은 개발자 제어 비동기 작업을 지원합니다. 이 버전에는 API에 관한 브레이킹 체인지가 포함되어 있습니다. 아래 API에 관한 브레이킹 체인지 섹션을 참조하세요.

WorkManager가 알파 기간의 최종 단계에 진입하게 되며 베타에서는 API가 안정적일 것으로 예상되므로 Issue Tracker에서 의견을 보내 주시기 바랍니다.

API 변경사항

  • 기본 Worker 생성자를 비롯하여 이전의 deprecated 메서드 및 클래스가 모두 삭제되었습니다. API에 관한 브레이킹 체인지입니다.
  • NonBlockingWorker에서 ListenableWorker로 이름이 변경되었습니다. 이제 숨겨지지 않은 공개 클래스이며 사용 가능합니다.
    • ListenableWorker는 기본 스레드에서 호출되는 하나의 추상 메서드 ListenableFuture<Payload> onStartWork()의 액세스를 제공합니다. 개발자의 의지에 따라 비동기식으로 작업을 시작하고 처리할 수 있습니다. 작업이 완료되면 ListenableFuture를 적절하게 업데이트해야 합니다. ListenableFuture의 참조 구현은 alpha02Futures 패키지에서 제공됩니다. 아래의 WorkManager 섹션을 참조하세요.
    • WorkerListenableWorker를 확장하고 추상 Result doWork() 메서드를 사용하여 여전히 이전과 같이 작동합니다.
    • Worker의 일부 메서드 및 멤버가 ListenableWorker로 셔플되었습니다.
    • 곧 Kotlin 코루틴(안정적인 버전이 출시되면) 및 RxJava2를 사용하는 ListenableWorker의 참조 구현이 제공됩니다.
  • 인터페이스 WorkerFactory 및 구체적인 구현 DefaultWorkerFactoryWorkerFactory라는 추상 클래스로 병합되었습니다. 이 구현은 사용자가 생성한 WorkerFactory 인스턴스를 위한 마지막 노력으로 기본 반영 기반 동작이 호출되도록 합니다. 브레이킹 체인지입니다.
  • WorkManager.synchronous(), WorkContinuation.synchronous() 및 모든 관련 메서드가 삭제되었습니다. API에서 여러 메서드의 반환 유형으로 ListenableFuture<Void>가 추가되었습니다. API에 관한 브레이킹 체인지입니다.
    • 이제 ListenableFuture를 사용하여 동기식으로 가져오고 관찰할 수 있습니다. 예를 들어 WorkManager.enqueue()는 이전에는 void를 반환했지만 지금은 ListenableFuture<Void>를 반환합니다. 작업이 완료되면 ListenableFuture.addListener(Runnable, Executor) 또는 ListenableFuture.get()을 호출하여 코드를 실행할 수 있습니다.
    • 이러한 ListenableFuture는 작업의 성공 또는 실패 여부가 아닌 작업의 완료만 알려줍니다. 이 정보를 확인하려면 WorkManager 메서드를 연결해야 합니다.
    • 이러한 객체의 cancel() 호출은 혼란을 야기하고 추론이 어렵기 때문에 무시됩니다(작업을 취소하는 건지 결과를 취소하는 건지 알기 어려움). 이 내용은 Future 계약 내에 있습니다.
    • 동기식 getStatus* 메서드와의 동등함을 유지하기 위해 ListenableFuture 변형을 제공하고 LiveData를 반환한 기존 메서드의 이름을 변경하여 이름의 일부에 'LiveData'를 명시적으로 포함하도록 했습니다(예: getStatusesByIdLiveData(UUID)). API에 관한 브레이킹 체인지입니다.

버그 수정

  • 중복 androidx-annotations.pro 파일과 관련하여 alpha09의 알려진 문제가 해결되었습니다. gradle 파일에서 exclude 'META-INF/proguard/androidx-annotations.pro'를 삭제하여 이전 출시 노트의 해결방법을 삭제할 수 있습니다.
  • 새로운 Worker 생성자를 유지하도록 proguard 구성이 추가되었습니다. b/116296569
  • 작업이 REPLACE된 경합 상태의 잠재적 NullPointerException이 수정되었습니다. b/116253486, b/116677275
  • 이제 WorkContinuation.combine()에서 둘 이상이 아닌 하나 이상의 WorkContinuation이 허용됩니다. b/117266752

API에 관한 브레이킹 체인지

  • 기본 Worker 생성자를 비롯하여 이전의 deprecated 메서드 및 클래스가 모두 삭제되었습니다.
  • 인터페이스 WorkerFactory 및 구체적인 구현 DefaultWorkerFactoryWorkerFactory라는 추상 클래스로 병합되었습니다.
  • WorkManager.synchronous()WorkContinuation.synchronous()가 삭제되었습니다.
  • 이제 WorkManager.getStatus*() 메서드는 ListenableFuture를 반환하고 WorkManager.getStatus*LiveData()LiveData를 반환합니다.

버전 1.0.0-alpha09

2018년 9월 19일

알려진 문제

'OS 독립 경로 'META-INF/proguard/androidx-annotations.pro'에서 파일이 두 개 이상 발견됨' 문제가 발생한 경우 alpha10에서 문제를 해결하는 동안 임시방편으로 gradle 파일에 아래 코드를 삽입하세요.

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

버그 수정

  • '100 작업' 오류에 필요했던 다른 수정사항이 추가되었습니다. b/115560696
  • 경합 상태로 인한 외래 키 제한 오류의 일부 수정사항이 추가되었습니다. b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) 호출을 기본 Worker에 위임했습니다. b/114125093
  • Firebase JobDispatcher의 올바른 최소 백오프 지연을 시행합니다. b/113304626
  • 라이브러리 내부의 스레딩 보장이 개선되었습니다.
  • 내부적으로 LiveData 중복 제거와 관련된 잠재적인 문제가 수정되었습니다.

API 변경사항

  • 이제 WorkManager.Configuration의 일부로 WorkerFactory를 지정하여 런타임 시 자체 Worker 인스턴스를 생성할 수 있습니다. 폴백 팩토리는 DefaultWorkerFactory이며 이전 버전의 WorkManager 동작과 일치합니다.
    • WorkerNonBlockingWorker의 기본 생성자가 이제 지원 중단됨으로 표시됩니다. 새로운 생성자(Worker(Context, WorkerParameters))를 사용하고 super(Context, WorkerParameters)를 호출하세요. WorkManager의 향후 버전에서는 기본 생성자가 삭제됩니다.
  • 내부적으로 새로운 ListenableFuture 아티팩트가 사용되기 시작했습니다(Guava 종속 항목 없음). 향후 버전에서는 API에 ListenableFutures가 도입됩니다. 이 변경사항은 NonBlockingWorker의 최종적인 숨기기 해제를 지원합니다.
  • TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID)를 통해 TestDriver에서 시간 작업을 트리거하는 기능이 추가되었습니다. b/113360060을 참조하세요.

브레이킹 체인지

  • 기본 WorkerNonBlockingWorker 생성자가 지원 중단되었습니다. 가능한 한 빨리 새로운 생성자로 마이그레이션하세요. 향후 버전에서는 기본 생성자가 삭제됩니다.

버전 1.0.0-alpha08

2018년 8월 27일

버그 수정

  • WorkManager 구성요소가 직접 부팅을 인식하지 못하도록 명시적으로 지정하여 직접 부팅 중에 실행되지 않게 합니다. 이후에는 직접 부팅을 인식하는 WorkManager 버전이 제공될 예정입니다. b/112665532
  • 다시 시도하는 작업이 실행되지 않는 문제가 해결되었습니다. b/112604021
  • 주기적인 작업이 반복적으로 실행되지 않는 문제가 해결되었습니다(위의 문제와 관련 있음). b/112859683
  • 앱 프로세스가 이미 실행 중인 경우 백오프 정책을 준수합니다.
  • 10KB 한도를 나타내도록 Data의 예외 메시지가 수정되었습니다.
  • JobScheduler 처리 완료의 지연 시간을 고려하여 Configuration.setMaxSchedulerLimit(int)의 최댓값을 50으로 낮췄습니다. (b/112817355)

버전 1.0.0-alpha07

2018년 8월 16일

버그 수정

  • 음수 제한이 지정된 SQL 쿼리가 무제한의 결과를 반환할 수 있는 문제가 해결되었습니다.
  • 실행을 완료한 작업이 이제 다른 스케줄러에 있는 동일한 작업의 대기 중인 복사본을 모두 올바로 취소합니다. 이 문제로 JobScheduler 작업 수 제한이 초과되었습니다. b/111569265
  • ConstraintTrackerConcurrentModificationException이 수정되었습니다. b/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String)의 반환 유형 주석이 @NonNull 대신 @Nullable로 변경되었습니다. b/112275229를 참조하세요.

API 변경사항

  • Worker는 이제 새로운 클래스 NonBlockingWorker를 확장합니다. 변경돼도 현재 사용에는 영향을 미치지 않습니다. 향후에 NonBlockingWorker는 맞춤 스레딩 솔루션을 완벽하게 지원하는 항목이 될 것입니다.
  • Data.getBooleanArray(String)Data.getIntArray(String)의 반환 유형 주석이 @NonNull 대신 @Nullable로 변경되었습니다. b/112275229를 참조하세요.
  • Kotlin 확장: Map.toWorkData() 지원이 중단되었으며 기존 API와의 일관성을 향상하도록 최상위 수준 workDataOf(vararg Pair<String, Any?>)가 추가되었습니다.

버전 1.0.0-alpha06

2018년 8월 1일

버그 수정

  • 작업을 예약할 때 데이터베이스 잠금을 방지합니다. b/111801342
  • 잠자기 모드일 때 PeriodicWork가 일정에 맞춰 실행되지 않는 버그가 수정되었습니다. b/111469837
  • 제약 조건을 추적할 때 WorkManager가 다운되는 경합 상태가 수정되었습니다. googlecodelabs/android-workmanager/issues/56을 참조하세요.
  • WorkRequest.Builder#build()를 사용할 때 고유한 WorkRequest를 생성합니다. b/111408337
  • 필요한 WorkRequest가 있을 때만 RescheduleReceiver 사용을 설정합니다. (b/111765853)

버전 1.0.0-alpha05

2018년 7월 24일

API 변경사항

  • 이제 WorkManager.getInstance()@Nullable 대신 @NonNull로 주석이 달립니다. 대신 수동 초기화 상황에서 싱글톤이 제대로 초기화되지 않으면 메서드에서 IllegalStateException을 발생시킵니다. API에 관한 브레이킹 체인지입니다.
  • 새로운 API인 Configuration.Builder.setMinimumLoggingLevel(int)이 추가되었습니다. 이 API는 WorkManager 상세 출력을 제어할 수 있습니다. 기본적으로 WorkManager는 Log.INFO 이상을 로깅합니다.
  • 암시적으로 null인 기본값을 더 이상 사용하지 않도록 Data.getString()의 서명이 변경되었습니다. API에 관한 브레이킹 체인지입니다.
  • 내부용으로만 필요한 일부 메서드가 @hide로 표시됩니다. 여기에는 Constraints 생성자, Data.toByteArray()Data.fromByteArray(byte[])가 포함됩니다. API에 관한 브레이킹 체인지입니다.

버그 수정

  • 알려진 자동 백업이 진행되는 동안 WorkManager가 더 이상 작업을 실행하지 않습니다. 이 문제로 비정상 종료가 발생할 수 있었습니다. b/110564377
  • JobScheduler를 사용할 때 PeriodicWorkRequest의 이중 예약 문제가 수정되었습니다. b/110798652
  • 기기가 잠자기 모드에 들어간 후 PeriodicWorkRequest가 올바로 실행되지 않는 문제가 해결되었습니다. b/111469837
  • Firebase JobDispatcher를 사용할 때 초기 지연되는 문제가 해결되었습니다. b/111141023
  • 일부 경합 상태 가능성 및 타이밍 관련 문제가 해결되었습니다.
  • 더 이상 필요하지 않은 BroadcastReceiver가 올바르게 해제됩니다.
  • 앱이 강제 종료 후 다시 시작할 때 일정 변경 성능이 최적화됩니다.
  • 지정된 WorkRequest를 대기열에 추가하기 전이나 추가한 후에 TestScheduler.setAllConstraintsMet(UUID) 호출이 허용되었습니다. b/111238024를 참조하세요.

브레이킹 체인지

  • 이제 WorkManager.getInstance()@Nullable 대신 @NonNull로 주석이 달립니다.
  • 암시적으로 null인 기본값을 더 이상 사용하지 않도록 Data.getString()의 서명이 변경되었습니다.
  • 내부용으로만 필요한 일부 메서드가 @hide로 표시됩니다. 여기에는 Constraints 생성자, Data.toByteArray()Data.fromByteArray(byte[])가 포함됩니다.

버전 1.0.0-alpha04

2018년 6월 26일

버그 수정

  • 이제 AlarmManager 기반 구현을 사용할 때 PeriodicWorkRequest 일정이 올바르게 변경됩니다.
  • 강제 종료나 재부팅 후 모든 worker의 일정을 변경할 때 발생할 수 있는 ANR을 해결했습니다. b/110507716
  • 다양한 WorkManager API에 null 허용 여부 주석이 추가되었습니다. b/110344065
  • Worker 실행 중 발생하는 포착되지 않는 예외 로그가 기록됩니다. b/109900862
  • WorkManager의 이전 버전으로 롤백하는 경우 파괴적인 데이터베이스 마이그레이션이 허용됩니다. b/74633270
  • 중복된 암시적 태그를 만드는 경우 마이그레이션이 비정상 종료되는 문제가 해결되었습니다. 이 문제는 동일한 암시적 태그 형식을 직접 사용한 경우에만 드물게 발생했습니다.

버전 1.0.0-alpha03

2018년 6월 19일

버그 수정

  • AlarmManager 기반 구현의 경합 상태가 수정되었습니다. b/80346526

  • 기기 재부팅 후 JobScheduler를 사용할 때 중복 작업 문제가 수정되었습니다.

  • 콘텐츠 URI 트리거가 포함된 작업이 이제 재부팅 내내 지속됩니다. b/80234744

  • 문서가 업데이트되었습니다. b/109827628, b/109758949, b/80230748

  • WorkRequest를 대기열에 다시 추가할 때 발생하는 비정상 종료 문제를 수정했습니다. b/109572353을 참조하세요.

  • work-runtime-ktx 종속 항목을 사용할 때 Kotlin 컴파일러 경고가 발생하는 문제가 수정되었습니다.

  • 이제 WorkManager는 Room 버전 1.1.1-rc1을 사용합니다.

API 변경사항

  • WorkContinuation.getStatuses()의 동기 버전인 getStatusesSync()가 추가되었습니다.
  • Worker는 사용자가 시작한 취소와 OS에서 요청한 임시 중지를 구분할 수 있습니다. 어떤 유형이든 중지가 요청되면 Worker.isStopped()true를 반환합니다. 작업이 명시적으로 취소되었을 때 Worker.isCancelled()true를 반환합니다. (b/79632247)
  • API 28에 JobParameters#getNetwork() 지원이 추가되었습니다. 이 지원은 Worker.getNetwork()를 통해 나타납니다.
  • JobScheduler 또는 AlarmManager에 전송할 수 있는 작업 수를 적용할 수 있도록 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)가 추가되었습니다. 이를 통해 WorkManager가 사용 가능한 모든 JobScheduler 슬롯을 차지하지 못하게 할 수 있습니다.
  • WorkManager가 안전하게 사용할 수 있는 JobScheduler 작업 ID의 범위를 정의하는 데 도움이 되는 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)가 추가되었습니다. b/79996760
  • Worker.getRunAttemptCount()가 특정 Worker의 현재 실행 수를 반환합니다. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)를 사용하면 고유한 PeriodicWorkRequest를 대기열에 추가할 수 있습니다. b/79600647
  • WorkManager.cancelAllWork()는 모든 Worker를 취소합니다. WorkManager를 사용하는 라이브러리는 이 메서드가 내부 상태의 추가 정리를 위해 WorkManager.getLastCancelAllTimeMillis()를 사용하여 언제 마지막으로 호출되었는지 쿼리할 수 있습니다.
  • 완료된 작업을 내부 데이터베이스에서 삭제할 수 있도록 WorkManager.pruneWork()가 추가되었습니다. b/79950952, b/109710758

동작 변경사항

  • 모든 WorkRequest의 암시적인 태그가 추가되었습니다. 이 태그는 Worker의 정규화된 클래스 이름입니다. 이를 통해 tag 없이 또는 id를 사용할 수 없을 때 WorkRequest를 삭제할 수 있습니다. (b/109572351)

브레이킹 체인지

  • Worker.WorkerResult의 이름이 Worker.Result로 변경되었습니다.
  • 이제 Worker.onStopped추가 isCancelled 매개변수가 있습니다. 이 매개변수는 Worker가 명시적으로 취소되었을 때 true로 설정됩니다.

버전 1.0.0-alpha02

2018년 5월 24일

버그 수정

  • State.isFinished()NullPointerException이 수정되었습니다. b/79550068
  • Application.onCreate()에서 Worker의 일정 변경을 초래하는 문제가 수정되었습니다. b/79660657
  • OS에서 허용하는 작업보다 더 많이 작업을 예약할 수 있는 문제가 해결되었습니다. b/79497378
  • Worker 관련 wake lock 정리를 백그라운드 스레드로 이동했습니다.
  • 이제 대기 중인 작업이 모두 완료되면 AlarmManager 구현이 적절하게 정리됩니다.
  • 영어 이외의 언어에 영향을 미쳤던 정리 SQL 쿼리가 수정되었습니다. b/80065360
  • Datafloat 지원이 추가되었습니다. b/79443878
  • 이제 Data.Builder.putAll()에서 Builder의 인스턴스를 반환합니다. b/79699162
  • 문서에 Javadoc 및 수정사항이 추가되었습니다. b/79691663

API 변경사항

  • Worker가 중지에 반응할 수 있습니다. Worker.isStopped()를 사용하여 Worker가 중지되었는지 확인할 수 있습니다. Worker.onStopped()를 사용하여 간단한 정리 작업을 실행할 수 있습니다.
  • Worker.getTags() API가 Worker와 관련된 태그 Set를 반환합니다.
  • duration과 TimeUnit의 조합을 사용하는 API의 javax.time.Duration 오버로드가 추가되었습니다. 이 오버로드는 @RequiresApi(26)에 의해 보호됩니다.
  • WorkManager 확장이 androidx.work.ktx 패키지에서 androidx.work 패키지로 이동했습니다. 이전 확장 프로그램은 지원이 중단되었으며 향후 버전에서 제거될 예정입니다.
  • Configuration.withExecutor()가 지원 중단되었습니다. 대신 Configuration.setExecutor()를 사용합니다.

버전 1.0.0-alpha01

2018년 5월 8일

WorkManager는 제약 조건을 인식하는 보장된 백그라운드 작업의 예약과 실행을 간소화합니다. 최초 출시는 1.0.0-alpha01입니다.