WorkManager
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 10월 30일 | 2.9.1 | - | - | - |
종속 항목 선언
WorkManager의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { def work_version = "2.9.1" // (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.1" // (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
2024년 10월 30일
androidx.work:work-*:2.10.0
이 출시되었습니다. 버전 2.10.0에 포함된 커밋을 확인하세요.
버전 2.9.1 이후 주요 변경사항
WorkManager
의 작업에 트레이스 태그를 추가했습니다. 실행 중인 Worker의 이름이 포함되므로 'adb shell dumpsys jobscheduler'를 훨씬 더 쉽게 이해할 수 있습니다.WorkManager
의 주요 영역 주변에 트레이스 섹션도 추가됩니다.CoroutineWorker
가 실행되는 디스패처를 제어하기 위해Configuration.workerCoroutineContext
를 추가했습니다.- 개발자는
Constraints.setRequiredNetworkRequest
메서드를 통해NetworkRequest
를 작업자의 제약 조건으로 지정할 수 있습니다. 이를 통해 이 작업자가 실행해야 하는 네트워크를 더 세부적으로 제어할 수 있습니다. WorkManager
2.10.0은 이제 SDK 35로 컴파일되며 SDK 35 호환성을 위한 다양한 변경사항을 포함합니다.
버전 2.10.0-rc01
2024년 10월 24일
androidx.work:work-*:2.10.0-rc01
이 출시되었습니다. 버전 2.10.0-rc01에는 이 커밋이 포함되어 있습니다.
버전 2.10.0-beta01
2024년 10월 2일
androidx.work:work-*:2.10.0-beta01
이 출시되었습니다. 버전 2.10.0-beta01에는 이러한 커밋이 포함되어 있습니다.
버전 2.10.0-alpha04
2024년 9월 18일
androidx.work:work-*:2.10.0-alpha04
이 출시되었습니다. 버전 2.10.0-alpha04에는 이 커밋이 포함되어 있습니다.
API 변경사항
- 포그라운드 서비스 유형에 따라 포그라운드 작업자가 실행 시간 초과로 인해 중지되는 경우 중지 이유
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
를 추가합니다. (Ibd0af)
버전 2.10.0-alpha03
2024년 9월 4일
androidx.work:work-*:2.10.0-alpha03
이 출시되었습니다. 버전 2.10.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
WorkManager
의 작업에 트레이스 태그를 추가했습니다. 실행 중인 Worker의 이름이 포함되므로 'adb shell dumpsys jobscheduler'를 훨씬 더 쉽게 이해할 수 있습니다. 트레이스 섹션도WorkManager
의 키 영역 주변에 추가됩니다.
API 변경사항
- 이제 WorkManager 2.10.0이 SDK 35로 컴파일됩니다.
- '짧은 서비스' 및 '데이터 동기화' 유형의 포그라운드 작업자가 시간 초과되어
WorkManager
가stopSelf()
를 호출하지 않았을 때 ANR이 발생하는 문제를 수정했습니다. 이 수정사항은 포그라운드 서비스 유형이 도입된 API 34 및 35를 실행하는 기기에만 적용됩니다. (ca06b2, b/364508145) WorkerFactory
를 사용할 때Worker
가 바인딩되는 원격 프로세스를 전환할 수 있는 새로운WorkerParameters
API 추가했습니다. (Ibdc8a, Ie8a90, I7373f)
버그 수정
- 작업의 포그라운드 유형에 취소된 Android 14 기본 권한이 있는 경우
WorkManager
가 장기 실행 작업자 (즉, 포그라운드 작업자)를 다시 시작하려고 시도할 때 발생하는 비정상 종료를 수정했습니다. b/333957914를 참조하세요. - 새 플랫폼 API에 대한 액세스 수동 개요가 삭제되었습니다. AGP 7.3 이상 (예: R8 버전 3.3)에서 R8을 사용하고 있을 때와 AGP 8.1 이상 (예: D8 버전 8.1)을 사용할 때 모든 빌드에서 API 모델링을 통해 자동으로 이루어지기 때문입니다. AGP를 사용하지 않는 클라이언트는 D8 버전 8.1 이상으로 업데이트하는 것이 좋습니다. 자세한 내용은 이 도움말을 참조하세요. (Ia60e0, b/345472586)
버전 2.10.0-alpha02
2024년 4월 17일
androidx.work:work-*:2.10.0-alpha02
이 출시되었습니다. 버전 2.10.0-alpha02에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
WorkManager
에서 구성 가능한@RestrictTo
Tracer
를 통해 트레이스 스팬을 내보내는 기능이 추가되었습니다. (I17d7f, b/260214125)CoroutineWorker
가 실행되는 디스패처를 제어하기 위해Configuration.workerCoroutineContext
가 추가되었습니다. 이렇게 하면WorkManager
에서Dispatchers.Default
를 완전히 사용하지 않을 수 있습니다. (Icd1b7)- Worker용 맞춤 예외 핸들러를 추가했습니다. (Ib1b74, b/261190695)
- 이제
OneTimeWorkRequest.Builder
및PeriodicWorkRequest.Builder
를Class
대신KClass
로 구성할 수 있습니다.val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6) WorkManager
클래스가 Kotlin으로 이전되었습니다. 이제LiveData
,ListenableFuture
또는Flow
를 반환하는 메서드가 올바른 null 허용 여부 정보를 제공합니다. 코드의 null 허용 여부 가정이 잘못된 경우 클라이언트의 소스 코드를 변경해야 할 수 있습니다. (If6757)
버전 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.1
2024년 8월 7일
androidx.work:work-*:2.9.1
이 출시되었습니다. 버전 2.9.1에는 이 커밋이 포함되어 있습니다.
버그 수정
- 작업의 포그라운드 유형에 취소된 Android 14 기본 요건 권한이 있을 때
WorkManager
가 장기 실행 worker (즉, 포그라운드 작업자)를 다시 시작하려고 할 때 발생하는 비정상 종료 문제를 수정합니다. (b/333957914)
버전 2.9.0
2023년 11월 29일
androidx.work:work-*:2.9.0
이 출시되었습니다. 버전 2.9.0에 포함된 커밋을 확인하세요.
2.8.0 이후 중요 변경사항
Flow
를 통한 관측 가능성 이제LiveData
대신WorkManager.getWorkInfosFlow
및 유사한 메서드를 통해 Flow를 통해 작업자의 진행 상황을 관찰할 수 있습니다.- 이제
WorkManager
는 이전에 작업자가 중지된 이유에 관한 힌트를 제공합니다.getStopReason()
메서드를 통해 작업자 자체에서 쿼리하거나getStopReason()
를 통해WorkInfo
에서 쿼리할 수 있습니다. setNextScheduleTimeOverride
를 통한 주기적 작업자의 정확한 예약 이렇게 하면 다음 정기 작업 일정을 동적으로 계산할 수 있으며, 이를 사용하여 적응형 새로고침 시간, 맞춤 재시도 동작, 사용자가 매일 아침에 일어나기 전에 뉴스피드 작업자를 실행하는 것과 같은 고급 기능을 구현할 수 있습니다. 다음 기술을 예약하는 동안 현재 실행 중인 worker가 취소되지 않도록 하려면 이러한 기법과 함께ExistingPeriodicWorkPolicy.UPDATE
를 사용해야 합니다.- 프로덕션과 일치하는 스레딩을 사용한 WorkManager 테스트
ExecutorsMode.PRESERVE_EXECUTORS
는initializeTestWorkManager
에서Configuration
에 설정된 실행자를 보존하고 실제 기본 스레드를 사용하기 위해 사용할 수 있습니다. CoroutineWorker
와 같은 코루틴 API가 추가 아티팩트 work-runtime-ktx에서 기본 아티팩트 work-runtime으로 이동했습니다. 이제 work-runtime-ktx는 비어 있습니다.
API 변경사항
stopReason
님이WorkInfo
에 추가되었습니다. 작업자가 실행된 후에stopReason
를 사용할 수 있도록 합니다. 작업자가 중지되면 앱 자체가 매우 빠르게 종료될 수 있으므로stopReason
를 유용하게 보고하는 데 도움이 될 수 있습니다. (I21386)Clock
를 구성을 통해 설정하고 Worker 테스트의 실행 시퀀싱을 구동하는 데 사용할 수 있습니다. (Ic586e)- worker가 중지된 이유를 알려주는
getStopReason()
메서드가ListenableWorker
에 추가되었습니다. (I07060) - 리소스 유출에 관한 Closeguard의 경고를 피할 수 있도록
WorkManagerTestInitHelper#closeWorkDatabase()
를 추가했습니다. (Ia8d49) - 이제
WorkInfo
의 생성자가 공개되어 테스트에 유용할 수 있습니다. (Ia00b6, b/209145335) - 이제
work-runtime-ktx
가 비어 있습니다. 이제 기본 작업 런타임 아티팩트에서CoroutineWorker
및 기타 Kotlin 관련 유틸리티를 사용할 수 있습니다. (I71a9a) - 주기적 작업 일정을 정확하게 설정할 수 있는
setNextScheduleTimeOverride
메서드를 추가했습니다. (I3b4da) - 예약된 실행 시간 정보를 가져오는
getNextScheduleTimeMillis
를WorkInfo
에 추가했습니다. (I797e4) - 초기 지연 및 주기성 정보가
WorkInfo
에 추가됩니다. 추가했습니다. (I52f2f) getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
메서드를 통해 흐름을 통해 작업자를 관찰하는 메서드를 추가했습니다. (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 변경사항
WorkInfo.stopReason
및ListenableWorker.stopReason
에서 반환된 중지 사유에 관한 상수를 추가했습니다. (I0cc00)
버전 2.9.0-alpha02
2023년 7월 26일
androidx.work:work-*:2.9.0-alpha02
이 출시되었습니다. 버전 2.9.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
WorkManager
가 작업자가 이전에 중지된 이유에 관한 힌트를 제공합니다.getStopReason()
메서드를 통해 작업자 자체에서 쿼리하거나getStopReason()
를 통해WorkInfo
에서 쿼리할 수 있습니다.
API 변경사항
stopReason
님을WorkInfo
에 추가했습니다. 작업자가 실행된 후stopReason
를 사용할 수 있도록 합니다. 작업자가 중지되면 앱 자체가 매우 빠르게 종료될 수 있으므로stopReason
를 유용하게 보고하는 데 도움이 될 수 있습니다. (I21386)- 구성을 통해 시계를 설정하고 작업자 테스트의 실행 시퀀싱을 유도하는 데 사용할 수 있도록 허용합니다. 추가했습니다. (Ic586e)
- worker가 중지된 이유를 알려주는
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
를 통한 관측 가능성 이제LiveData
대신WorkManager.getWorkInfosFlow
및 유사한 메서드를 통해 Flow를 통해 작업자의 진행 상황을 관찰할 수 있습니다.setNextScheduleTimeOverride
를 통한 주기적 작업자의 정확한 예약 이를 통해 다음 주기적 작업 일정을 동적으로 계산할 수 있습니다. 이를 통해 적응형 새로고침 시간, 커스텀 재시도 동작과 같은 고급 기능을 구현하거나 사용자가 매일 아침 드리프트 없이 아침에 깨기 전에 뉴스피드 작업자를 실행할 수 있습니다. 다음 작업자를 예약하는 동안 현재 실행 중인 작업자를 취소하지 않도록 하려면ExistingPeriodicWorkPolicy.UPDATE
를 이러한 기법과 함께 사용해야 합니다.- 프로덕션과 일치하는 스레딩을 사용한
WorkManager
테스트ExecutorsMode.PRESERVE_EXECUTORS
는Configuration
에 설정된 실행자를 보존하고 실제 기본 스레드를 사용하는 데 사용할 수 있습니다. CoroutineWorker
와 같은 코루틴 API가 추가 아티팩트work-runtime-ktx
에서 기본 아티팩트work-runtime
로 이동했습니다.work-runtime-ktx
가 비어 있습니다.
API 변경사항
- 이제
WorkInfo
의 생성자가 공개되어 테스트에 유용할 수 있습니다. (Ia00b6, b/209145335) - 이제
work-runtime-ktx
가 비어 있으며CoroutineWorker
및 기타 Kotlin 관련 유틸리티는 기본work-runtime
아티팩트에서 사용할 수 있습니다. (I71a9a) - 주기적 작업 일정을 정확하게 설정할 수 있는
setNextScheduleTimeOverride
메서드를 추가했습니다. (I3b4da) getEarliestRunTimeMillis
에서getNextScheduleTimeMillis
로 이름이 변경되었습니다. (I2bd7a)- 다음 예약된 실행 시간 정보가
WorkInfo
에 추가됩니다. 추가했습니다. (I797e4) - 초기 지연 및 주기 정보가
WorkInfo
에 추가됩니다. (I52f2f) getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
메서드를 통해 흐름을 통해 작업자를 관찰하는 메서드를 추가했습니다. (If122a)- 제약 조건의 생성자와 속성에 누락된
@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에 포함된 커밋을 확인하세요.
버그 수정
- 이전에 두 개의 동시 브로드캐스트를 올바르게 처리하지 못했던
RescheduleReceiver
의 ANR을 수정했습니다. (b/236906724)
버전 2.8.0
2023년 2월 8일
androidx.work:work-*:2.8.0
이 출시되었습니다. 버전 2.8.0에 포함된 커밋을 확인하세요.
2.7.0 이후 중요 변경사항
새로운 기능
- 방해가 되지 않는 방식으로
WorkRequests
를 업데이트하는 기능을 추가하여 원래 대기열 추가 시간, 체이닝 등을 보존했습니다. 자세한 내용은 이 기능에 관한 상세한 블로그 게시물과 javadocs의WorkManager.updateWork
및ExistingPeriodicWorkPolicy.UPDATE
를 참고하세요.
API 변경사항
- 원래 대기열 추가 시간 및 체이닝을 보존하는 작업을 업데이트하기 위해
WorkManager.updateWork
를 추가했습니다. (I9a248, b/219446409) ExistingPeriodicWorkPolicy.UPDATE
가 추가되었습니다. 이 정책을 사용하면 이름으로 주기적인 작업을 업데이트할 수 있습니다. 기존REPLACE
와 비슷하지만 방해가 덜 됩니다. 현재 실행 중인 worker를 취소하지 않으며 대기열 추가 시간을 보존합니다. 초기 지연과 기간은 업데이트 시간이 아닌 원래 대기열 추가 시간으로 계산됩니다. 이름이 매우 유사한REPLACE
와UPDATE
간의 혼동을 줄이기 위해REPLACE
를 지원 중단했습니다. 여전히 이전REPLACE
시맨틱을 유지하려는 경우 새로 추가된CANCEL_AND_REENQUEUE
(REPLACE
와 동일함)를 사용하면 됩니다. (I985ed, b/219446409)- setSchedulingExceptionHandler를 통해
Consumer<Throwable>
을 제공하여 예약 예외를 가로채는 기능을 추가했습니다. - WorkManager를 초기화하려고 할 때 문제가 있었는지 확인하기 위해 setInitializationExceptionHandler를 통해
Consumer<Throwable>
을 제공하는 기능을 추가했습니다. OneTimeWorkRequest
및PeriodicWorkRequest
의 인라인 도우미를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)Worker
에getForegroundInfo
를 추가했습니다. (Ic1ead)- 이제 RxJava 2 및 RxJava 3용
RxWorker
에Completable
을 반환하는setForeground
가 있습니다. 이 함수는ListenableFuture
를 반환하는setForegroundInfoAsync
대신 사용할 수 있습니다. - RxJava 2 및 RxJava 3용
RxWorker
에Single
을 반환하는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에 포함된 커밋을 확인하세요.
버그 수정
- 이전에 새로운 세대 정보를 고려하지 않았던
WorkInfo
의equals
메서드를 수정했습니다. (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.updateWork
및ExistingPeriodicWorkPolicy.UPDATE
를 참고하세요.
API 변경사항
- 원래 대기열 추가 시간 및 체이닝을 보존하는 작업을 업데이트하기 위해
WorkManager.updateWork
를 추가했습니다. (I9a248, b/219446409) ExistingPeriodicWorkPolicy.UPDATE
가 추가되었습니다. 이 정책을 사용하면 이름으로 주기적인 작업을 업데이트할 수 있습니다. 기존REPLACE
와 비슷하지만 방해가 덜 됩니다. 현재 실행 중인 worker를 취소하지 않으며 대기열 추가 시간을 보존합니다. 초기 지연과 기간은 업데이트 시간이 아닌 원래 대기열 추가 시간으로 계산됩니다. 이름이 매우 유사한REPLACE
와UPDATE
간의 혼동을 줄이기 위해REPLACE
를 지원 중단했습니다. 여전히 이전REPLACE
시맨틱을 유지하려는 경우 새로 추가된CANCEL_AND_REENQUEUE
(REPLACE
와 동일함)를 사용하면 됩니다. (I985ed, b/219446409)SchedulingExceptionHandler
를 정의하여 예약 예외를 가로채는 기능을 추가합니다. (I033eb)OneTimeWorkRequest
및PeriodicWorkRequest
의 인라인 도우미를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)
getForegroundInfo
를Worker
에 추가합니다. (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에 포함된 커밋을 확인하세요.
새로운 기능
WorkManager
2.6.0-alpha02
에서: 모든 프로세스에서 실행할 수 있는 worker 지원이 추가됩니다. (Iaf200)WorkManager
2.6.0-alpha02
에서: 원격 프로세스에 바인딩할 수 있는RemoteListenableWorker
의 구현인RemoteCoroutineWorker
를 추가했습니다. (I30578)
API 변경사항
- WorkManager
2.6.0-alpha02
에서:TEMPORARILY_UNMETERED
네트워크 제약 조건의 지원을 추가했습니다. (I08d5e) - WorkManager
2.6.0-alpha02
에서:setProgressAsync()
의 다중 프로세스 worker가 지원됩니다. (Ib6d08) - WorkManager
2.6.0-alpha02
에서: 다른androidx.startup.Initializer
가 종속 항목으로 사용할 수 있도록WorkManagerInitializer
를 공개합니다. (I5ab11)
버전 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를 도입합니다.애플리케이션은 백그라운드에 있을 때 더 이상 포그라운드 서비스를 실행할 수 없습니다. 따라서 이전에는 포그라운드 서비스의 수명 주기에 바인딩되었던 장기 실행 작업을 더 효과적으로 지원하기 위해 애플리케이션이
WorkRequest
를 expedited로 표시할 수 있습니다.이 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에 포함된 커밋을 확인하세요.
버그 수정
- 이제
RemoteWorkManager
가RemoteWorkManagerService
에서 정확하게 바인딩 해제되어RemoteWorkManagerService
가 정확하게 정리할 수 있습니다. (aosp/1730694) - 이제
RemoteListenableWorker
가RemoteWorkerService
에서 정확하게 바인딩 해제되어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는 항상 지정된 프로세스에 도달합니다. 진행 중인 스케줄러는 지정된 프로세스에서도 실행됩니다.
ActivityManager
가JobService
인스턴스를 인스턴스화하여 작업을 시작할 수 없을 때도 있습니다. 따라서 기본 작업이 플랫폼 버그로 인해 자동으로 누락됩니다.WorkManager
가 이제 작업을 조정하여Application
이 초기화될 때 모든 단일WorkRequest
마다 지원 작업이 있는지 확인합니다. 이렇게 하면 작업 실행 안정성이 크게 향상됩니다. (b/172475041, aosp/1489577)WorkRequest
가 완료된 후WorkRequest
가 추적되는 버퍼 기간을 줄여WorkManager
가 데이터베이스 증가를 제한합니다. 이전에 기간은7
일이었습니다.1
일 + keepResultsForAtLeast 기간으로 줄었습니다. (aosp/1419708)- 이제
TestListenableWorkerBuilder
가ListenableWorker
를 확장하는 구체화된 클래스를 지원하여 더 쉽게 테스트할 수 있습니다. (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 변경사항
TestListenableWorkerBuilder
와TestWorkerBuilder
는 원시 유형을 사용하지 않습니다. (I883ad, b/169787349)
버그 수정
ApplicationInfo
를 사용하여 기본 앱 프로세스의 이름을 결정합니다. (b/168716641, aosp/1429950)RemoteWorkManager
및RemoteWorkContinuation
의 공개 상태 규칙을 수정합니다. 이러한 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가 있습니다.processName
은packageName:processName
과 비슷한 정규화된 프로세스 이름입니다(예:com.example:remote
). - 새 API 세트: 작업 요청을
enqueue
,cancel
,query
하는RemoteWorkManager
및RemoteWorkContinuation
. 이러한 API는 여러 프로세스에서 SQLite 경합을 방지하기 위해LiveData
변형을 포함하지 않습니다. 모든enqueue
,cancel
,query
호출은 AIDL을 사용하여primary
앱 프로세스에 전달되고 유연한ListenableFuture
를 반환합니다. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- WorkManager는 일반적으로 모든 앱 프로세스에서 초기화해야 합니다. 이는 SQLite 경합이 증가하여 결과적으로 다른 문제가 발생하므로 바람직하지 않습니다. WorkManager에는 이제
API 변경사항
- 이제 WorkManager가 완료되지 않은 종속 항목이 없는 완료된
WorkRequest
를 더 적극적으로 제거합니다. 버퍼 기간이7
일에서1
일로 변경되었습니다. (aosp/1419708)
버그 수정
- 이제 WorkManager가 작업을 사전에 조정하므로
WorkManager
가 초기화될 때WorkRequest
및JobScheduler
작업이 동기화됩니다. (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/1253230 및 b/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/134613984 및 aosp/1199640 참고)맞춤
RunnableScheduler
를 추가하여 향후 실행에 필요한 WorkRequest를 추적하는 기능을 제공합니다. 이 기능은 진행 중인 스케줄러에서 사용합니다. (aosp/1203944 참고)DelegatingWorkerFactory
를 사용할 때 위임할 팩토리를 동적으로 추가하는 지원이 추가됩니다. (b/156289105, aosp/1309745)BATTERY_NOT_LOW
제약 조건 추적을 플랫폼과 더 긴밀하게 정렬합니다. (aosp/1312583)이제 프로세스 내 스케줄러에서 더 나은 API를 사용하여 프로세스 이름을 확인합니다. 여러 프로세스를 사용하는 앱 지원을 개선하는 데 유용합니다. (aosp/1324732)
다음을 실행하는 새로운 린트 규칙
setForegroundAsync()
API를 사용할 경우 올바른foregroundServiceType
사용 (b/147873061 및 aosp/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.Builder
가final
로 표시됩니다. (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에 포함된 커밋을 확인하세요.
새로운 기능
WorkRequest
에Constraints.setRequiresCharging(...)
과Constraints.setRequiresDeviceIdle(...)
이 모두 필요할 경우 경고하는 새로운 린트 규칙이 추가되었습니다. 일부 기기는 충전 중이면서 동시에 유휴 상태일 수 없습니다. 따라서 이러한 요청의 실행 빈도는 예상보다 적습니다. (aosp/1253840 참조)
API 변경사항
WorkQuery
를 사용하여WorkInfo
를 쿼리하는 기능이 추가되었습니다. 이 기능은 개발자가 여러 속성의 조합으로WorkInfo
를 쿼리하려고 할 때 유용합니다. 자세한 내용은WorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
또는WorkQuery.Builder withUniqueWorkNames(...)
를 참고하세요. (aosp/1253230 및 b/143847546 참고)ListenableWorker
완료 전에 완료되지 않는setForegroundAsync()
호출은 이제 반환된ListenableFuture
에서IllegalStateException
을 통해 신호를 보냅니다. (aosp/1262743 참고)
버그 수정
PeriodicWorkRequest
의 잘못된 간격을 확인하는 린트 규칙이 수정되었습니다. (aosp/1254846 및 b/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/147873061 및 aosp/1215915 참고)JobService
API를 직접 사용할 경우WorkManager
에서 사용해야 하는JobScheduler
ID 지정 (aosp/1223567 참조)
API 변경사항
APPEND
와 유사하지만 취소 또는 실패한 기본 요건이 있는 체인을 대체하는ExistingWorkPolicy.APPEND_OR_REPLACE
를 추가합니다. (b/134613984 및 aosp/1199640 참고)맞춤
RunnableScheduler
를 추가하여 향후 실행에 필요한WorkRequest
를 추적하는 기능을 제공합니다. 이 기능은 진행 중인 스케줄러에서 사용합니다. (aosp/1203944 참고)
버그 수정
- 이전에 불가능한 유형인
Single<Void>
를 반환했기 때문에RxWorker
에서setProgress()
가 지원 중단되었습니다. 대신Completable
을 반환하는 새로운 APIsetCompletableProgress()
가 추가되었으며 새로운 API로 이전하는 데 도움이 되는 새로운 린트 규칙도 추가되었습니다. (b/150080946 및 aosp/1242665 참조)
버전 2.3.4
버전 2.3.4
2020년 3월 18일
androidx.work:work-*:2.3.4
가 출시되었습니다. 버전 2.3.4에 포함된 커밋을 확인하세요.
버그 수정
- 10분 실행 기간을 초과한 후 여러 개의 장기 실행
Worker
인스턴스를 실행하는 버그가 수정되었습니다. (aosp/1247484 및 b/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/150325687 및 aosp/1246571 참조)
버전 2.3.2
버전 2.3.2
2020년 2월 19일
androidx.work:work-*:2.3.2
이 출시되었습니다. 버전 2.3.2에 포함된 커밋을 확인하세요.
버그 수정
- WorkManager가 JobScheduler에서 드물게 100개 작업 한도를 초과하는 문제를 해결합니다. (aosp/1226859 및 b/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
가 활성 상태일 때 실행되는 장기 실행Worker
의Notification
수명 관리가 개선됩니다. (aosp/1218539 및 b/147249312 참고) WorkManager
는 이제androidx.sqlite:sqlite-framework:2.1.0
stable에 종속됩니다. (aosp/1217729 참고)ForegroundInfo
에서foregroundServiceType
을 사용할 경우AndroidManifest.xml
에서foregroundServiceType
이 지정되도록 하는 린트 규칙이 추가되었습니다. (aosp/1214207 및 b/147873061 참조)
버전 2.3.0
버전 2.3.0
2020년 1월 22일
androidx.work:work-*:2.3.0
이 2.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.WorkManagerInitializer
가AndroidManifest.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를 사용하면 특히Notification
의WorkRequest
를 쉽게 취소할 수 있습니다. 이 API가 2.3.0의 새로운 포그라운드 API와 쌍을 이룰 것으로 예상합니다.- 이제 WorkManager는
androidx.room:*:2.2.0
안정화 버전에 종속됩니다.
API 변경사항
- 기본 플랫폼 API와의 일관성을 강화하기 위해
ForegroundInfo.getNotificationType()
의 이름이ForegroundInfo.getForegroundServiceType()
으로 변경되었습니다. b/142729893 및 aosp/1143316을 참조하세요.
버그 수정
- 트랜잭션 외부에서
setTransactionSuccessful()
을 불필요하게 호출하여 발생하는 버그가 수정되었습니다. 이 버그는 이전 시 드물게 발생합니다. b/142580433 및 aosp/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 변경사항
Data
의containsKey
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
-ingsetProgress
API 및RxWorker
의setProgress
가 추가되었습니다. 이러한 새 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을 참고하세요.ListenableWorker
의ListenableFuture
취소 및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/1092374) (b/138238197) - 일부 기기에서
JobScheduler
API를 사용할 때 발생하는NullPointerException
관련 해결 방법이 추가되었습니다. aosp/1091020, b/138364061 및 b/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.gradle
에kotlinOptions { jvmTarget = "1.8" }
을 추가할 수 있습니다.- WorkManager를 위한 주문형 초기화가 추가되었습니다. 이에 따라 참조 시에만 WorkManager가 생성됩니다. b/127497100을 참고하세요. 주문형 초기화를 지원하도록 프로젝트를 설정하려면 다음 단계를 따르세요.
- 자동 이니셜라이저를 사용 중지합니다.
- 맞춤
Application
객체에Configuration.Provider
를 구현합니다. 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
아티팩트에서TestWorkerBuilder
및TestListenableWorkerBuilder
를 사용하여 단위 테스트 가능한Worker
및ListenableWorker
클래스를 생성하는 기능이 추가되었습니다.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을 참고하세요. 주문형 초기화를 지원하도록 프로젝트를 설정하려면 다음 단계를 따르세요.
- 자동 이니셜라이저를 사용 중지합니다.
- 맞춤
Application
객체에Configuration.Provider
를 구현합니다. WorkManager.getInstance()
의 모든 참조를WorkManager.getInstance(Context)
로 변경합니다. 이러한 변경에 따라WorkManager.getInstance()
가 지원 중단됩니다. 주문형 초기화를 실행하지 않더라도 항상 새로 대체한WorkManager.getInstance(Context)
를 호출하는 것이 더 안전합니다.
work-testing
아티팩트에서TestWorkerBuilder
및TestListenableWorkerBuilder
를 사용하여 단위 테스트 가능한Worker
및ListenableWorker
클래스를 생성하는 기능이 추가되었습니다.work-testing
은 이제 Kotlin을 종속 항목으로 가져오며 기본적으로 몇 가지 Kotlin 확장 프로그램도 포함합니다.
WorkInfo
에 실행 시도 횟수가 추가되었습니다. b/127290461을 참고하세요.Data
유형은 이제 바이트 및 바이트 배열을 저장 및 검색할 수 있습니다. 그렇지만Data
객체의 최대 크기는 변경되지 않습니다.CoroutineWorker.coroutineContext
가 지원 중단됩니다. 이 필드는CoroutineDispatcher
로 잘못 입력되었습니다. 정지 함수의 본문에서 원하는 coroutineContext로 직접 이동할 수 있으므로 이 필드는 더 이상 필요하지 않습니다.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 이전 종속 항목
참조 문서: 자바
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.Result
가ListenableWorker
의 내부 클래스가 되도록 이동되었습니다. 이에 따라 Kotlin의 최상위Result
클래스와 리팩터링 충돌이 발생하지 않습니다. API에 관한 브레이킹 체인지입니다. b/120564418
API에 관한 브레이킹 체인지
androidx.work.Result
가ListenableWorker
의 내부 클래스가 되도록 이동되었습니다.
버전 1.0.0-alpha12
2018년 12월 5일
이 버전에는 일부 API에 관한 브레이킹 체인지가 있습니다. 아래 API에 관한 브레이킹 체인지 섹션을 참조하세요. 이 버전은 첫 번째 베타 버전으로 출시될 가능성이 높습니다. 또한 alpha12
에는 광범위한 문서 업데이트도 포함되어 있습니다.
API 변경사항
- 새 아티팩트
work-rxjava2
에는RxWorker
가 도입됩니다.Single<Payload>
가 필요한ListenableWorker
입니다. - 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면
work-firebase
아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다. Payload
가Result
에 결합되었습니다.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
,WorkContinuation
및OneTimeWorkRequest
의 나머지 varargs 메서드가 삭제되었습니다. 빌드 문제를 수정하려면 기존 varargs를Arrays.asList(...)
로 래핑하면 됩니다. 여전히 각 메서드의 단일 인수 버전이 포함됩니다. 브레이킹 체인지입니다. WorkContinuation.combine(OneTimeWorkRequest, *)
변형이 삭제되었습니다. 이러한 변형은 혼란을 야기하는 API를 제공했으며 기존의combine
메서드가 더 이해하기 쉽습니다. 브레이킹 체인지입니다.
버그 수정
- 이미 실행 중인 작업의 프로세스 중단을 복구하는 데 있어 이제 Marshmallow 이전 구현을 더욱 신뢰할 수 있습니다.
observeForever
를 통해 관찰되는LiveData
가 WorkManager를 통해 추적됩니다. Room 라이브러리 수정의 백포트입니다. b/74477406을 참조하세요.- 이제 직렬화된 객체가 최대 크기를 초과하면
Data.Builder.build()
에서 예외가 발생합니다. 이전에는 백그라운드 스레드에서만 발생하여 적절하게 처리할 수 없었습니다. - 중지된 작업과 취소된 작업이 더 명확하게 구별됩니다.
getWorkInfoById()
는ListenableWorker.onStopped()
과정에서CANCELLED
State
의WorkInfo
를 반환합니다. ListenableWorker
에서null
Result
가 실패로 처리됩니다. b/120362353- API 24를 실행 중인 Shield 태블릿에서
IllegalArgumentException
이 가끔 발생하는 문제가 추론에 따라 수정되었습니다. b/119484416
API에 관한 브레이킹 체인지
- 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면
work-firebase
아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다. Payload
가Result
에 결합되었습니다.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
,WorkContinuation
및OneTimeWorkRequest
의 나머지 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
를 대기열에 추가할 수 있게 했습니다.- 이제
WorkManager
의enqueue
및cancel
메서드 변형은 모두 새로운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()
로 이름이 변경되었습니다.- 이제
WorkManager
의enqueue
및cancel
메서드 변형은 모두 새로운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
의 참조 구현은alpha02
의Futures
패키지에서 제공됩니다. 아래의WorkManager
섹션을 참조하세요.Worker
는ListenableWorker
를 확장하고 추상Result doWork()
메서드를 사용하여 여전히 이전과 같이 작동합니다.Worker
의 일부 메서드 및 멤버가ListenableWorker
로 셔플되었습니다.- 곧 Kotlin 코루틴(안정적인 버전이 출시되면) 및 RxJava2를 사용하는
ListenableWorker
의 참조 구현이 제공됩니다.
- 인터페이스
WorkerFactory
및 구체적인 구현DefaultWorkerFactory
가WorkerFactory
라는 추상 클래스로 병합되었습니다. 이 구현은 사용자가 생성한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
및 구체적인 구현DefaultWorkerFactory
가WorkerFactory
라는 추상 클래스로 병합되었습니다. 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 동작과 일치합니다.Worker
및NonBlockingWorker
의 기본 생성자가 이제 지원 중단됨으로 표시됩니다. 새로운 생성자(Worker(Context, WorkerParameters)
)를 사용하고super(Context, WorkerParameters)
를 호출하세요. WorkManager의 향후 버전에서는 기본 생성자가 삭제됩니다.
- 내부적으로 새로운
ListenableFuture
아티팩트가 사용되기 시작했습니다(Guava 종속 항목 없음). 향후 버전에서는 API에 ListenableFutures가 도입됩니다. 이 변경사항은NonBlockingWorker
의 최종적인 숨기기 해제를 지원합니다. TestDriver.setInitialDelayMet(UUID)
및TestDriver.setPeriodDelayMet(UUID)
를 통해TestDriver
에서 시간 작업을 트리거하는 기능이 추가되었습니다. b/113360060을 참조하세요.
브레이킹 체인지
- 기본
Worker
및NonBlockingWorker
생성자가 지원 중단되었습니다. 가능한 한 빨리 새로운 생성자로 마이그레이션하세요. 향후 버전에서는 기본 생성자가 삭제됩니다.
버전 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 ConstraintTracker
의ConcurrentModificationException
이 수정되었습니다. b/112272753Data.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/109572353work-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/79996760Worker.getRunAttemptCount()
가 특정Worker
의 현재 실행 수를 반환합니다. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
를 사용하면 고유한PeriodicWorkRequest
를 대기열에 추가할 수 있습니다. b/79600647WorkManager.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/79550068Application.onCreate()
에서Worker
의 일정 변경을 초래하는 문제가 수정되었습니다. b/79660657- OS에서 허용하는 작업보다 더 많이 작업을 예약할 수 있는 문제가 해결되었습니다. b/79497378
Worker
관련 wake lock 정리를 백그라운드 스레드로 이동했습니다.- 이제 대기 중인 작업이 모두 완료되면
AlarmManager
구현이 적절하게 정리됩니다. - 영어 이외의 언어에 영향을 미쳤던 정리 SQL 쿼리가 수정되었습니다. b/80065360
Data
에float
지원이 추가되었습니다. 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
입니다.