Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(모든 구성 패키지에 관한 API 참조 문서 참고)
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 11월 13일 | 1.7.5 | - | - | 1.8.0-alpha06 |
구조
Compose는 androidx
내의 Maven 그룹 ID 7개의 조합입니다. 각 그룹에는 타겟팅된 기능의 하위 집합이 있으며, 각 기능은 자체적인 출시 노트를 포함하고 있습니다.
다음 표에서는 그룹에 관한 설명과 각 출시 노트 조합의 링크를 제시합니다.
그룹 | 설명 |
---|---|
compose.animation | Jetpack Compose 애플리케이션에서 애니메이션을 빌드하여 풍부한 사용자 경험을 제공합니다. |
compose.compiler | Kotlin 컴파일러 플러그인으로 최적화를 사용 설정하고 @Composable 함수를 변환합니다. |
compose.foundation | 즉시 사용 가능한 구성요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 기초를 확장해 나만의 디자인 시스템 요소를 빌드합니다. |
compose.material | 즉시 사용 가능한 Material Design 구성요소로 Jetpack Compose UI를 빌드합니다. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다. |
compose.material3 | 차세대 Material Design인 Material Design 3 구성요소로 Jetpack Compose UI를 빌드합니다. Material 3은 업데이트된 테마 설정 및 구성요소, Material You 맞춤설정 기능(동적 색상 등)을 포함하며 새로운 Android 12의 시각적 스타일 및 시스템 UI와 일관되도록 설계되었습니다. |
compose.runtime | Compose의 프로그래밍 모델과 상태 관리를 위한 기본 구성요소이며, Compose 컴파일러 플러그인이 타겟팅하는 핵심 런타임입니다. |
compose.ui | 레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다. |
종속 항목 선언
Compose의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용을 알아보려면 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.6" implementation "androidx.compose.runtime:runtime-livedata:1.7.6" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.6") implementation("androidx.compose.runtime:runtime-livedata:1.7.6") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.6") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
Runtime Tracing 버전 1.7
버전 1.7.0-rc01
2024년 9월 18일
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
이 출시되었습니다. 버전 1.7.0-rc01에는 이 커밋이 포함되어 있습니다.
Runtime Tracing 버전 1.0
버전 1.0.0-beta01
2023년 11월 29일
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha05
2023년 11월 15일
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
이 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- 종속 항목을 지원되는 최저 안정화 버전 (예: compose-runtime 및 tracing-perfetto)에 고정했습니다. compose-runtime-tracing이 앱에 더 최신 버전의 compose-runtime을 가져오는 문제를 수정했습니다.
버전 1.0.0-alpha04
2023년 8월 23일
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
이 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 최신 버전의 벤치마크 및 추적 Perfetto와 호환되므로 앱 시작(콜드 스타트) 시 컴포지션 추적을 지원할 수 있습니다(예: AndroidX 벤치마크 및 Android 스튜디오(Hedgehog 베타 2부터)).
API 변경사항
androidx.tracing.perfetto.Trace
에서androidx.tracing.perfetto.PerfettoSdkTrace
로 이름이 변경되었습니다. (I44af8)- 추적 Perfetto SDK API를
android.os.Trace
와 일치시키는 작업 (I73ba0, b/282199917) - 앱 시작 시 추적을 위한 기본 요건 (Iad890)
- 실험용 및 공개 API 파일을 병합했습니다. (I0f2e1, b/278769092)
버전 1.0.0-alpha02
2023년 2월 8일
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 기능상의 변경사항은 없습니다. 다운스트림 종속 항목
androidx.tracing:tracing-perfetto*
의 여러 성능을 최적화했습니다.
버전 1.0.0-alpha01
2022년 9월 7일
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
androidx.compose.runtime:runtime-tracing
은 지원 도구(제공 예정)가 있는 Compose 앱에서 확장된 추적을 허용하는 라이브러리입니다. 최초 출시는 1.0.0-alpha01입니다.
버전 1.8
버전 1.8.0-alpha06
2024년 11월 13일
androidx.compose.runtime:runtime-*:1.8.0-alpha06
이 출시되었습니다. 버전 1.8.0-alpha06에는 이 커밋이 포함되어 있습니다.
API 변경사항
PausableComposition
API의 변경사항 이러한 변경사항은 이전 1.8.0-alpha 버전 (1.8.0-alpha02 이후)과 관련된 중대한 변경사항이지만, 1.8.0의 새로운 API이므로 API가 아직 알파 버전이므로 하위 호환성이 유지되지 않습니다. (I39819)- Recomposer 내에서 새 컴포지션 생성을 관찰하는 도구 API를 추가했습니다. (Iaeb7e)
Snapshot
에Long
유형의snapshotId
를 추가하고id
를 지원 중단했습니다. 프레임 속도가 매우 높고 애니메이션이 장시간 실행되는 시스템에서 스냅샷 ID가 오버플로되지 않도록 스냅샷의 ID가Int
에서Long
로 변경되었습니다. 네이티브Long
유형이 없는 플랫폼에서 이 유형이Int
또는 다른 유형이 될 수 있도록 유형이 expect/actual로 설정되었습니다. JavaScript와 같이 네이티브Long
가 없는 플랫폼은Int
의 오버플로가 약 24일마다 발생하는 높은 프레임 속도 (1,000FPS 초과)를 피해야 합니다. (I38ac3, b/374821679)
버그 수정
- 단일
provides
의providesDefault
이 수정되었습니다. (aosp/3318540 b/374263387) ChangeList
을 최적화합니다. (3318538)
버전 1.8.0-alpha05
2024년 10월 30일
androidx.compose.runtime:runtime-*:1.8.0-alpha05
이 출시되었습니다. 버전 1.8.0-alpha05에는 이 커밋이 포함되어 있습니다.
버그 수정
SnapshotIdSet
에Int.MAX_VALUE
를 추가하여 스택 오버플로를 수정합니다. (b/370536104, Ic4179f6)- 런타임 마이크로 최적화 (I50c60)
- R8이 디버깅 runtimeCheck 호출을 삭제하도록 허용 (I8c44)
compoundKeyOf
를 재귀 대신 반복적으로 만듭니다. (I5817f)
외부 기여
- 컬렉션 목록으로 비슷한 사진 구현 (I7d47c)
버전 1.8.0-alpha04
2024년 10월 16일
androidx.compose.runtime:runtime-*:1.8.0-alpha04
이 출시되었습니다. 버전 1.8.0-alpha04에는 이 커밋이 포함되어 있습니다.
성능 개선
- 생성자에 상태 레코드의 스냅샷 ID를 제공합니다. (85c00f)
- 클래스 확인 오류를 방지하도록
SnapshotState***
를 리팩터링했습니다. (6ee4a6) - throw 인라인을 방지하도록 R8 규칙을 수정했습니다. (5beb92)
- 작업 미세 최적화 (d73c5c)
- JVM에서
SynchronizedObject
할당 최적화 (2b043f)
버전 1.8.0-alpha03
2024년 10월 2일
androidx.compose.runtime:runtime-*:1.8.0-alpha03
이 출시되었습니다. 버전 1.8.0-alpha03에는 이 커밋이 포함되어 있습니다.
성능 개선
rememberCoroutineScope
의 하위 컨텍스트를 지연 로드로 만듭니다. (f61464)rememberCoroutineScope
는 일반적으로 컴포지션 후에 발생하는 이벤트에 대한 응답으로 코루틴을 실행하는 데 사용됩니다. 경우에 따라 이러한 이벤트가 발생하지 않아 이익이 없으면서도 작업 생성 및 취소에 추가 비용이 발생할 수 있습니다.rememberCoroutineScope
에서 반환된 범위가 액세스 시coroutineContext
를 지연 로드하도록 만들어 범위가 사용되지 않는 경우 작업 생성 및 취소를 완전히 방지합니다.
버전 1.8.0-alpha02
2024년 9월 18일
androidx.compose.runtime:runtime-*:1.8.0-alpha02
이 출시되었습니다. 버전 1.8.0-alpha02에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 컴포지션 중에 일시중지할 수 있고 컴포지션에 비동기식으로 적용할 수 있는 하위 컴포지션을 만들 수 있는
PausableComposition
를 추가했습니다. 일시중지에는 컴파일러 지원이 필요하며 현재 개발 중입니다. (I3394b)
버전 1.8.0-alpha01
2024년 9월 4일
androidx.compose.runtime:runtime-*:1.8.0-alpha01
이 출시되었습니다. 버전 1.8.0-alpha01에는 이 커밋이 포함되어 있습니다.
버전 1.7
버전 1.7.5
2024년 10월 30일
androidx.compose.runtime:runtime-*:1.7.5
이 출시되었습니다. 버전 1.7.5에는 이 커밋이 포함되어 있습니다.
버전 1.7.4
2024년 10월 16일
androidx.compose.runtime:runtime-*:1.7.4
이 출시되었습니다. 버전 1.7.4에는 이 커밋이 포함되어 있습니다.
버전 1.7.3
2024년 10월 2일
androidx.compose.runtime:runtime-*:1.7.3
이 출시되었습니다. 버전 1.7.3에는 이 커밋이 포함되어 있습니다.
버전 1.7.2
2024년 9월 18일
androidx.compose.runtime:runtime-*:1.7.2
이 출시되었습니다. 버전 1.7.2에는 이 커밋이 포함되어 있습니다.
버전 1.7.1
2024년 9월 10일
- Android 아티팩트는 변경되지 않았습니다.
-desktop
아티팩트가 삭제되고-jvmStubs
및-linuxx64Stubs
아티팩트가 추가되었습니다. 이러한 타겟은 사용하도록 의도된 것이 아니며 Jetbrains Compose 작업을 돕는 자리표시자입니다.
버전 1.7.0
2024년 9월 4일
androidx.compose.runtime:runtime-*:1.7.0
이 출시되었습니다. 버전 1.7.0에는 이 커밋이 포함되어 있습니다.
1.6.0 이후 중요 변경사항
- 기본적으로
compositionLocalWithComputedDefault()
를 사용하거나provides
대신providesComputed
를 사용하여 값을 계산하는 데 사용할 람다를 제공하여 다른 컴포지션 로컬의 값을 기반으로 계산되는 컴포지션 로컬을 제공하는 기능을 추가했습니다. - 컴포지션 로컬의 값은 값을 계산하는 람다 내에서 액세스할 수 있는 컴포지션 로컬의
currentValue
속성을 사용하여 가져올 수 있습니다. 이는@Composable
함수에서만 액세스할 수 있는current
대신 사용됩니다. (Iadbc0) - 새로 생성된 상태 객체는 초기 상태로 전역 스냅샷을 비롯한 다른 스냅샷에서 즉시 액세스할 수 있습니다. 후속 수정사항은 객체가 생성된 스냅샷이 적용될 때까지 표시되지 않습니다.
mutableStateOf()
의 초기 상태와 기본 버전은mutableStateOf()
에 매개변수로 전달된 값입니다.mutableStateListOf()
및mutableStateMapOf()
의 초기 상태는 비어 있습니다.- 상태 객체가 생성 시 전역 스냅샷에서 즉시 액세스할 수 있도록 지원하는 데 사용되는
Snapshot.isInSnapshot
및Snapshot.PreexistingSnapshotId
를 추가했습니다. - 맞춤 상태 객체는 내장 스냅샷 객체에 적용된 변경사항 패턴을 따라 즉시 액세스할 수 있도록 지원할 수 있습니다. (I84a17)
- Compose 라이브러리에
nonSkippingGroupOptimization
를 사용 설정합니다. 이렇게 하면 androidx의 모든 다시 시작 불가능한 컴포저블 함수에 대해 생성된 코드가 더 효율적입니다. 향후 이 기능을 기본적으로 사용 설정할 계획입니다. I(acbc08) - 동일한 프레임의 하위 컴포지션에서 컴포저블 람다를 무효화합니다. (98301c)
onForgotten
와 동일한 순서로onRelease
콜백을 호출합니다. (2cd790)- 강력한 건너뛰기 모드 사용 설정 (ed1766)
- 더 많은 경우에
currentCompoundHashKey
를 고유하게 만듭니다. (d4a872)
버전 1.7.0-rc01
2024년 8월 21일
androidx.compose.runtime:runtime-*:1.7.0-rc01
이 출시되었습니다. 버전 1.7.0-rc01에는 이 커밋이 포함되어 있습니다.
버전 1.7.0-beta07
2024년 8월 7일
androidx.compose.runtime:runtime-*:1.7.0-beta07
이 출시되었습니다. 버전 1.7.0-beta07에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta06
2024년 7월 24일
androidx.compose.runtime:runtime-*:1.7.0-beta06
이 출시되었습니다. 버전 1.7.0-beta06에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta05
2024년 7월 10일
androidx.compose.runtime:runtime-*:1.7.0-beta05
이 출시되었습니다. 버전 1.7.0-beta05에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta04
2024년 6월 26일
androidx.compose.runtime:runtime-*:1.7.0-beta04
이 출시되었습니다. 버전 1.7.0-beta04에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta03
2024년 6월 12일
androidx.compose.runtime:runtime-*:1.7.0-beta03
이 출시되었습니다. 버전 1.7.0-beta03에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta02
2024년 5월 29일
androidx.compose.runtime:runtime-*:1.7.0-beta02
이 출시되었습니다. 버전 1.7.0-beta02에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-beta01
2024년 5월 14일
androidx.compose.runtime:runtime-*:1.7.0-beta01
이 출시되었습니다. 버전 1.7.0-beta01에는 이러한 커밋이 포함되어 있습니다.
버전 1.7.0-alpha08
2024년 5월 1일
androidx.compose.runtime:runtime-*:1.7.0-alpha08
이 출시되었습니다. 버전 1.7.0-alpha08에는 이 커밋이 포함되어 있습니다.
버전 1.7.0-alpha07
2024년 4월 17일
androidx.compose.runtime:runtime-*:1.7.0-alpha07
이 출시되었습니다. 버전 1.7.0-alpha07에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 기본적으로
compositionLocalWithComputedDefault()
를 사용하거나provides
대신providesComputed
를 사용하여 값을 계산하는 데 사용할 람다를 제공하여 다른 컴포지션 로컬의 값을 기반으로 계산되는 컴포지션 로컬을 제공하는 기능을 추가했습니다. - 컴포지션 로컬의 값은 값을 계산하는 람다 내에서 액세스할 수 있는 컴포지션 로컬의
currentValue
속성을 사용하여 가져올 수 있습니다. 이는@Composable
함수에서만 액세스할 수 있는current
대신 사용됩니다. (Iadbc0)
API 변경사항
- 새로 생성된 상태 객체는 초기 상태로 전역 스냅샷을 비롯한 다른 스냅샷에서 즉시 액세스할 수 있습니다. 후속 수정사항은 객체가 생성된 스냅샷이 적용될 때까지 표시되지 않습니다.
mutableStateOf()
의 초기 상태와 기본 버전은mutableStateOf()
에 매개변수로 전달된 값입니다.mutableStateListOf()
및mutableStateMapOf()
의 초기 상태는 비어 있습니다.- 상태 객체가 생성 시 전역 스냅샷에서 즉시 액세스할 수 있도록 지원하는 데 사용되는
Snapshot.isInSnapshot
및Snapshot.PreexistingSnapshotId
를 추가했습니다. - 맞춤 상태 객체는 내장 스냅샷 객체에 적용된 변경사항 패턴을 따라 즉시 액세스할 수 있도록 지원할 수 있습니다. (I84a17)
버그 수정
- 중첩된 스냅샷에서
readObserver
병합을 수정했습니다. 이로 인해 중첩된 파생 상태가snapshotFlow
내에서 사용될 때 무효화되지 않았습니다. (Idf138)
버전 1.7.0-alpha06
2024년 4월 3일
androidx.compose.runtime:runtime-*:1.7.0-alpha06
이 출시되었습니다. 버전 1.7.0-alpha06에는 이 커밋이 포함되어 있습니다.
버그 수정
버전 1.7.0-alpha05
2024년 3월 20일
androidx.compose.runtime:runtime-*:1.7.0-alpha05
이 출시되었습니다. 버전 1.7.0-alpha05에는 이 커밋이 포함되어 있습니다.
버그 수정
- 비활성화된 컴포지션의 최근 변경사항 삭제 (5950bc)
버전 1.7.0-alpha04
2024년 3월 6일
androidx.compose.runtime:runtime-*:1.7.0-alpha04
이 출시되었습니다. 버전 1.7.0-alpha04에는 이 커밋이 포함되어 있습니다.
성능 개선
- 파생된 상태 평가당 한 번
Snapshot.current
를 호출합니다. (ee7daf) - 컴포지션에서 관찰당 한 번
currentRecord
를 읽습니다. (b882b2) snapshotFlow
에서 의도치 않은 반복자 할당을 삭제합니다. (231e56)- Compose 라이브러리에
nonSkippingGroupOptimization
를 사용 설정합니다. 이렇게 하면 androidx의 모든 다시 시작 불가능한 컴포저블 함수에 대해 생성된 코드가 더 효율적입니다. 향후 이 기능을 기본적으로 사용 설정할 계획입니다. I(acbc08)
버전 1.7.0-alpha03
2024년 2월 21일
androidx.compose.runtime:runtime-*:1.7.0-alpha03
이 출시되었습니다. 버전 1.7.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 변경사항 감지를 개선하기 위해 replace 그룹을 도입했습니다. (0941b5)
성능 개선
- 변경사항을 감지할 때 메모리 할당을 개선했습니다. (53e7fd)
- 컴포저의 메모리 누수를 수정했습니다. (0e097d)
- 리컴포지션 시
ScopeMap
를 사용하여 무효화를 전달합니다. (e19a7e) - 파생된 상태만 유지하도록 무효화 맵 최적화 (f11c44)
IdentityArraySet
사용을ScatterSet
로 바꿉니다. (db572e)ScopeMap
의removeScope
을 최적화합니다. (bb0530)
버전 1.7.0-alpha02
2024년 2월 7일
androidx.compose.runtime:runtime-*:1.7.0-alpha02
이 출시되었습니다. 버전 1.7.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- 동일한 프레임의 하위 컴포지션에서 컴포저블 람다를 무효화합니다. (98301c)
onForgotten
와 동일한 순서로onRelease
콜백을 호출합니다. (2cd790)snapshotFlow
에서 관찰되지 않는 변경된 상태를 필터링합니다. (796b80)
성능 개선
- 스냅샷 관찰자가 이미 투명한 경우 이를 수정합니다. (f60f30)
SnapshotIdSet.lowest()
을 최적화합니다. (7ae149)SnapshotIdSet
에서 할당이 없는fold()
를 사용합니다. (532b7d)- 반복자 할당을 삭제했습니다. (83f96b)
버전 1.7.0-alpha01
2024년 1월 24일
androidx.compose.runtime:runtime-*:1.7.0-alpha01
이 출시되었습니다. 버전 1.7.0-alpha01에 포함된 커밋을 확인하세요.
성능 최적화
버그 수정
- 내재적 기억에서 기본 매개변수 메타 고려 (096665)
- 더 많은 경우에
currentCompoundHashKey
를 고유하게 만듭니다. (d4a872) - 인라인 함수 호출을 종료할 때 그룹을 실현합니다. (2a90fc)
버전 1.6
버전 1.6.8
2024년 6월 12일
androidx.compose.runtime:runtime-*:1.6.8
이 출시되었습니다. 버전 1.6.8에는 이 커밋이 포함되어 있습니다.
버전 1.6.7
2024년 5월 1일
androidx.compose.runtime:runtime-*:1.6.7
이 출시되었습니다. 버전 1.6.7에는 이 커밋이 포함되어 있습니다.
버전 1.6.6
2024년 4월 17일
androidx.compose.runtime:runtime-*:1.6.6
이 출시되었습니다. 이전 출시 이후 변경사항이 없습니다.
버전 1.6.5
2024년 4월 3일
androidx.compose.runtime:runtime-*:1.6.5
이 출시되었습니다. 버전 1.6.5에는 이 커밋이 포함되어 있습니다.
버전 1.6.4
2024년 3월 20일
androidx.compose.runtime:runtime-*:1.6.4
이 출시되었습니다. 버전 1.6.4에는 이 커밋이 포함되어 있습니다.
버전 1.6.3
2024년 3월 6일
androidx.compose.runtime:runtime-*:1.6.3
이 출시되었습니다. 버전 1.6.3에는 이 커밋이 포함되어 있습니다.
버전 1.6.2
2024년 2월 21일
androidx.compose.runtime:runtime-*:1.6.2
이 출시되었습니다. 버전 1.6.2에 포함된 커밋을 확인하세요.
버전 1.6.1
2024년 2월 7일
androidx.compose.runtime:runtime-*:1.6.1
이 출시되었습니다. 버전 1.6.1에 포함된 커밋을 확인하세요.
버그 수정
버전 1.6.0
2024년 1월 24일
androidx.compose.runtime:runtime-*:1.6.0
이 출시되었습니다. 버전 1.6.0에 포함된 커밋을 확인하세요.
1.5.0 이후 중요 변경사항
새로운 기능
- 재구성 루프 중에 삼켜진 예외를 다시 발생시킵니다. (4dff9a)
성능 최적화
- 스냅샷 상태의 녹화 수정 최적화 (28c3fe)
rememberSaveable
최적화 (f01d79)- 변경사항이 기록될 때까지 파생된 상태의 재읽기를 지연합니다. (f38099)
- 컴포지션 로컬 값 제공 개선 (a337ea)
버그 수정
- 슬롯 테이블 메모리 누수를 수정했습니다. (73fcfe)
- 삭제될 하위 컴포지션의 재구성은 건너뜁니다. (Ieeb99, b/254645321)
- remember 계산에 저장된 경우에만
RememberObserver
수명 주기를 트리거합니다. (f6b4dc) $dirty
캡처를 인라인 람다로 제한합니다. (acfca0)- 이동 가능한 콘텐츠가 잘못된 컴포지션 로컬을 수신하는 경우가 있는 문제를 수정했습니다. (035cd6)
버전 1.6.0-rc01
2024년 1월 10일
androidx.compose.runtime:runtime-*:1.6.0-rc01
이 출시되었습니다. 버전 1.6.0-rc01에 포함된 커밋을 확인하세요.
버전 1.6.0-beta03
2023년 12월 13일
androidx.compose.runtime:runtime-*:1.6.0-beta03
이 출시되었습니다. 버전 1.6.0-beta03에 포함된 커밋을 확인하세요.
버전 1.6.0-beta02
2023년 11월 29일
androidx.compose.runtime:runtime-*:1.6.0-beta02
이 출시되었습니다. 버전 1.6.0-beta02에 포함된 커밋을 확인하세요.
버전 1.6.0-beta01
2023년 11월 15일
androidx.compose.runtime:runtime-*:1.6.0-beta01
이 출시되었습니다. 버전 1.6.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 주석에서 특정 안정성 값을 전파합니다. (274a4c)
버그 수정
- 컨텍스트에서 컴포지션 로컬 범위 상태에 참조 정책을 사용합니다. (83361c)
- $dirty 캡처를 인라인 람다로 제한합니다. (acfca0)
- 이동 가능한 콘텐츠가 잘못된 컴포지션 로컬을 수신하는 경우가 있는 문제를 수정했습니다. (035cd6)
RecomposeScopeImpl
에서 할당되지 않는 더 빠른 해시맵을 사용합니다. (d79494)DerivedState
에서ObjectIntMap
계정을 사용합니다. (21862e)DerivedState
에서 intSnapshotThreadLocal
에IntRef
을 사용합니다. (04eaf4)
버전 1.6.0-alpha08
2023년 10월 18일
androidx.compose.runtime:runtime-*:1.6.0-alpha08
이 출시되었습니다. 버전 1.6.0-alpha08에 포함된 커밋을 확인하세요.
버그 수정
- remember 계산에 저장된 경우에만
RememberObserver
수명 주기를 트리거합니다. (f6b4dc) - 무효 목록 정렬의 할당을 개선했습니다. (954d63)
SnapshotStateObserver
에서 할당되지 않는 새 맵을 사용합니다. (4303ce)- 컴포지션이 비활성화되면 무효화를 삭제합니다. (e001be)
버전 1.6.0-alpha07
2023년 10월 4일
androidx.compose.runtime:runtime-*:1.6.0-alpha07
이 출시되었습니다. 버전 1.6.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
SnapshotStateList
가RandomAccess
로 표시되어 목록 도우미의 직접 색인 생성 버전을 사용할 수 있습니다. (I5210c, b/219554654)
버전 1.6.0-alpha06
2023년 9월 20일
androidx.compose.runtime:runtime-*:1.6.0-alpha06
이 출시되었습니다. 버전 1.6.0-alpha06에 포함된 커밋을 확인하세요.
버전 1.6.0-alpha05
2023년 9월 6일
androidx.compose.runtime:runtime-*:1.6.0-alpha05
이 출시되었습니다. 버전 1.6.0-alpha05에 포함된 커밋을 확인하세요.
버전 1.6.0-alpha04
2023년 8월 23일
androidx.compose.runtime:runtime-*:1.6.0-alpha04
이 출시되었습니다. 버전 1.6.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 재구성 루프 중에 삼켜진 예외를 다시 발생시킵니다. (4dff9a)
API 변경사항
ReusableComposition
를 비활성화하는 메서드를 추가하여 관찰을 삭제하지만 노드는 그대로 유지합니다. 비활성화된 컴포지션은setContent
를 호출하여 다시 활성화할 수 있습니다. (Ib7f31)- 하위 컴포지션의 수명 주기 및 재사용을 관리하기 위한
ReusableComposition
인터페이스를 추가했습니다. (I812d1, b/252846775)
버전 1.6.0-alpha03
2023년 8월 9일
androidx.compose.runtime:runtime-*:1.6.0-alpha03
이 출시되었습니다. 버전 1.6.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
버전 1.6.0-alpha02
2023년 7월 26일
androidx.compose.runtime:runtime-*:1.6.0-alpha02
이 출시되었습니다. 버전 1.6.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능 및 성능 개선사항
rememberSaveable
최적화 (f01d79)- 변경사항이 기록될 때까지 파생된 상태의 재읽기를 지연합니다. (f38099)
- 컴포지션 로컬 값 제공 개선 (a337ea)
SideEffect
는 그룹이 생성되지 않도록@ExplicitGroupsComposable
로 표시됩니다. (I74815)- 재사용 시 컴포지션 로컬 맵을 비교하지 않음 (782071)
API 변경사항
- 여러 값을 더 빠르게 제공하는 데 사용되는 오버헤드를 방지하지만 단일 값을 제공할 때는 오버헤드가 되는
CompositionLocalProviders
의 특수 사례 오버로드를 추가했습니다. (I6d640, b/288169379)
버그 수정
버전 1.6.0-alpha01
2023년 6월 21일
androidx.compose.runtime:runtime-*:1.6.0-alpha01
이 출시되었습니다. 버전 1.6.0-alpha01에 포함된 커밋을 확인하세요.
버그 수정
- 삭제될 하위 컴포지션의 재구성은 건너뜁니다. (Ieeb99, b/254645321)
- 스냅샷을 적용할 때 할당이 줄었습니다. (I65c09)
- 스냅샷이 수정되지 않은 경우
DerivedState
에서readableHash
를 계산하지 않음 (68c565)
버전 1.5
버전 1.5.4
2023년 10월 18일
androidx.compose.runtime:runtime-*:1.5.4
이 출시되었습니다. 버전 1.5.4에 포함된 커밋을 확인하세요.
버전 1.5.3
2023년 10월 4일
androidx.compose.runtime:runtime-*:1.5.3
이 출시되었습니다. 버전 1.5.3에 포함된 커밋을 확인하세요.
버전 1.5.2
2023년 9월 27일
androidx.compose.runtime:runtime-*:1.5.2
이 출시되었습니다. 버전 1.5.2에 포함된 커밋을 확인하세요.
버전 1.5.1
2023년 9월 6일
androidx.compose.runtime:runtime-*:1.5.1
이 출시되었습니다. 버전 1.5.1에 포함된 커밋을 확인하세요.
버전 1.5.0
2023년 8월 9일
androidx.compose.runtime:runtime-*:1.5.0
이 출시되었습니다. 버전 1.5.0에 포함된 커밋을 확인하세요.
API 변경사항
- 재구성, 색상 애니메이션,
AndroidComposeView
의 할당을 삭제했습니다. (Ib2bfa) - 상태를 만들고
remember
호출로 래핑되어야 하는 함수를 표시하는@StateFactoryMarker
주석을 추가했습니다. (I64550) - State 및
MutableState
의 기본 버전을 추가합니다. (fb3d89) Snapshot.isApplyObserverNotificationPending
를 추가했습니다. (I672a5)- 자동 박싱에 대한 불이익을 받지 않고도
State
객체에서 Int, Long, Float, Double 값을 추적할 수 있도록State
API의 원시 버전을 추가했습니다. 이를 사용하려면 새 팩토리 메서드mutableIntState(Int)
,mutableFloatStateOf(Float)
등을 사용하세요. (I48e43)
버그 수정
- 삭제될 하위 컴포지션의 재구성은 건너뜁니다. (Ieeb99, b/254645321)
ComposerImpl
에서 스냅샷 참조를 유지하지 않음 (0206f7)- 컴포지션을 두 번 적용하지 않음 (f5791b)
- 초기화되지 않은 파생된 상태 값의 무효화를 보장합니다. (aa2a92)
- 컴포지션 삭제 중에
onEndChanges
를 호출합니다. (62cc8c) - 하위 구성으로 콘텐츠를 이동하는 문제를 수정했습니다. (4beb41)
- 잠재적인 교착 상태를 수정했습니다. (c1a425 및 8edce0)
- 이제 Android 창용으로 생성된 리컴포저는 ON_STOP 알림을 수신할 때 모든 컴포지션 대신
withFrameNanos
호출만 차단합니다. 즉, 중지된 활동과 연결된 창은 데이터 변경사항에 맞게 계속 다시 컴포지션되지만 애니메이션 또는withFrameNanos
의 다른 호출자는 차단됩니다. (Id9e7f, b/240975572) - 효과를 폐기하기 전에
LayoutNode
의 비활성화 콜백 실행 3784073 - 다시 시작된 람다의 변경된 플래그 수정 ea81df9
- 노드가 있는 컴포저블의 실시간 수정 회귀 수정 73fd4d8
- ON_STOP는 컴포지션 대신 프레임 시계 브로드캐스트를 일시중지해야 함 ae276f1
- 변경되지 않은 파생 상태의
SnapshotStateObserver
범위를 무효화합니다. 84d9b1c - 컴포지션을 삭제할 때 발생할 수 있는 교착 상태를 수정했습니다. 28761fc
- 하위 구성으로 콘텐츠를 이동하는 문제를 수정했습니다. 92d4156
- 다시 시작된 람다의 변경된 플래그를 수정했습니다. (8a03e9)
- 효과를 폐기하기 전에
LayoutNode
의 비활성화 콜백을 실행합니다. (8b0fa4) - 노드 그룹을 종료할 때
endToMarker()
를 수정합니다. (d71d980) - 비활성화 확인에 현재
SlotWriter
그룹 사용 (a0b518b) SlotTable.moveSlotGapTo()
에서fill
를 삭제하고 닫기로 이동했습니다. (81f9935)- 이동 가능한 콘텐츠가 이동하는 동안 무효화가 누락되는 문제를 수정했습니다. (1d7c024)
- 이동된 이동 가능한 콘텐츠의 즉시 무효화를 수정했습니다. (8676618)
성능 개선
- 스냅샷이 수정되지 않은 경우
DerivedState
에서readableHash
를 계산하지 않습니다. (307102) - 할당을 줄였습니다. (I65c09, d7ea77, 727974, 445808)
- Compose
CoroutineScopes
의 빠른 취소 (a55362 및 bd382f) - 액세스할 수 없는 상태 레코드로 상태 객체의 레코드를 덮어씁니다. (c986960)
- 그룹을 실현할 때 올바른 범위의 작성자를 사용합니다. (9a5e5b6)
IdentityArraySet
를 사용하여 스냅샷 무효화를 저장합니다. (7f60cca)- 스냅샷 관찰에 대한 할당 감소 (5bc535f)
버전 1.5.0-rc01
2023년 7월 26일
androidx.compose.runtime:runtime-*:1.5.0-rc01
이 출시되었습니다. 버전 1.5.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
변경사항이 기록될 때까지 파생된 상태의 재읽기를 지연합니다. (f38099)
mutableStateOf()
호출을 해당하는 특수화된 원시 유형으로 이전하도록 권장하는 선택적 검사를 사용할 수 있습니다. 린트 ID는AutoboxingStateCreation
입니다. 이전에는 이 검사가 모든 프로젝트에 기본적으로 사용 설정되었습니다. Android 스튜디오 편집기와 프로젝트의 린트 출력에서 이 경고를 보려면 다음과 같이 모듈의 build.gradle 또는 build.gradle.kts 구성 내에서warning "AutoboxingStateCreation"
를 선언하여 심각도를 정보에서 경고 (또는 그 이상)로 변경합니다 (I34f7e).android { lint { warning "AutoboxingStateCreation" } ... }
버전 1.5.0-beta03
2023년 6월 28일
androidx.compose.runtime:runtime-*:1.5.0-beta03
이 출시되었습니다. 버전 1.5.0-beta03에 포함된 커밋을 확인하세요.
버그 수정
- 삭제될 하위 컴포지션의 재구성은 건너뜁니다. (Ieeb99, b/254645321)
버전 1.5.0-beta02
2023년 6월 7일
androidx.compose.runtime:runtime-*:1.5.0-beta02
이 출시되었습니다. 버전 1.5.0-beta02에 포함된 커밋을 확인하세요.
성능 개선
- 스냅샷이 수정되지 않은 경우
DerivedState
에서readableHash
를 계산하지 않습니다. (307102)
버전 1.5.0-beta01
2023년 5월 24일
androidx.compose.runtime:runtime-*:1.5.0-beta01
이 출시되었습니다. 버전 1.5.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 재구성, 색상 애니메이션,
AndroidComposeView
의 할당을 삭제했습니다. (Ib2bfa) - 상태를 만들고
remember
호출로 래핑되어야 하는 함수를 표시하는@StateFactoryMarker
주석을 추가했습니다. (I64550) - State 및
MutableState
의 기본 버전을 추가합니다. (fb3d89) Snapshot.isApplyObserverNotificationPending
를 추가했습니다. (I672a5)
버그 수정
- 할당을 줄였습니다. (I65c09, d7ea77, 727974, 445808)
ComposerImpl
에서 스냅샷 참조를 유지하지 않음 (0206f7)- Compose
CoroutineScopes
의 빠른 취소 (a55362 및 bd382f) - 컴포지션을 두 번 적용하지 않음 (f5791b)
- 초기화되지 않은 파생된 상태 값의 무효화를 보장합니다. (aa2a92)
- 컴포지션 삭제 중에
onEndChanges
를 호출합니다. (62cc8c) - 하위 구성으로 콘텐츠를 이동하는 문제를 수정했습니다. (4beb41)
- 잠재적인 교착 상태를 수정했습니다. (c1a425
- ON_STOP는 컴포지션 대신 프레임 시계 브로드캐스트를 일시중지해야 합니다. (f4a2d1)
- 다시 시작된 람다의 변경된 플래그를 수정했습니다. (8a03e9)
- 효과를 폐기하기 전에
LayoutNode
의 비활성화 콜백을 실행합니다. (8b0fa4)
외부 기여
Snapshot.isApplyObserverNotificationPending
를 추가했습니다. (I672a5)
버전 1.5.0-alpha04
2023년 5월 10일
androidx.compose.runtime:runtime-*:1.5.0-alpha04
이 출시되었습니다. 버전 1.5.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 자동 박싱에 대한 불이익을 받지 않고도
State
객체에서 Int, Long, Float, Double 값을 추적할 수 있도록State
API의 원시 버전을 추가했습니다. 이를 사용하려면 새 팩토리 메서드mutableIntState(Int)
,mutableFloatStateOf(Float)
등을 사용하세요. (I48e43)
버그 수정
컴포지션 삭제 중에
onEndChanges
를 호출합니다.Composition.dispose
중에 삭제된 포커스 노드가 포커스를 재설정하기 위해onEndChanges
를 구독합니다.(03d4a47)초기화되지 않은 파생된 상태 값의 무효화를 보장합니다. 각 파생 상태는
SnapshotStateObserver
의 종속 항목 목록과 연결되며, 이는 종속 항목이 변경될 때마다 파생 상태와 연결된 범위를 무효화하는 데 사용됩니다. 종속 항목 변경사항은 스냅샷 진행 시 등록되며, 이는 파생된 상태 읽기 후 (Snapshot.notifyObjectsInitialized()
호출로 인해) 발생할 수 있습니다.SnapshotStateObserver
의 이전 파생된 상태 관찰 로직은 이전 종속 항목을 정리한 다음 새 값을 읽었습니다. 이로 인해 종속 항목 무효화가 등록되지 않은 정리된 상태에서 무효화가 발생하는 경합 상태가 발생했습니다.이 변경사항은 파생된 상태 읽기 및 종속 항목 정리를 재정렬하여 무효화가 항상 유효한 상태에서 발생하도록 합니다. (c472be6)
버전 1.5.0-alpha03
2023년 4월 19일
androidx.compose.runtime:runtime-*:1.5.0-alpha03
이 출시되었습니다. 버전 1.5.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 Android 창용으로 생성된 리컴포저는 ON_STOP 알림을 수신할 때 모든 컴포지션 대신
withFrameNanos
호출만 차단합니다. 즉, 중지된 활동과 연결된 창은 데이터 변경사항에 맞게 계속 다시 컴포지션되지만 애니메이션 또는withFrameNanos
의 다른 호출자는 차단됩니다. (Id9e7f, b/240975572)
버그 수정
- 스냅샷 목록 및 맵에서 잠재적 교착 상태를 수정했습니다. 5c1a425
- 효과를 폐기하기 전에
LayoutNode
의 비활성화 콜백 실행 3784073 - 다시 시작된 람다의 변경된 플래그 수정 ea81df9
- 노드가 있는 컴포저블의 실시간 수정 회귀 수정 73fd4d8
- ON_STOP는 컴포지션 대신 프레임 시계 브로드캐스트를 일시중지해야 함 ae276f1
- 변경되지 않은 파생 상태의
SnapshotStateObserver
범위를 무효화합니다. 84d9b1c - 컴포지션을 삭제할 때 발생할 수 있는 교착 상태를 수정했습니다. 28761fc
- 하위 구성으로 콘텐츠를 이동하는 문제를 수정했습니다. 92d4156
버전 1.5.0-alpha02
2023년 4월 5일
androidx.compose.runtime:runtime-*:1.5.0-alpha02
이 출시되었습니다. 버전 1.5.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Kotlin의
getValue
연산자를 구성할 수 있습니다. (f174f6e)
버그 수정, 성능 개선
- 액세스할 수 없는 상태 레코드로 상태 객체의 레코드를 덮어씁니다. (c986960)
- 그룹을 실현할 때 올바른 범위의 작성자를 사용합니다. (9a5e5b6)
- 노드 그룹을 종료할 때
endToMarker()
를 수정합니다. (d71d980) - 비활성화 확인에 현재
SlotWriter
그룹 사용 (a0b518b) IdentityArraySet
를 사용하여 스냅샷 무효화를 저장합니다. (7f60cca)SlotTable.moveSlotGapTo()
에서fill
를 삭제하고 닫기로 이동했습니다. (81f9935)- 이동 가능한 콘텐츠가 이동하는 동안 무효화가 누락되는 문제를 수정했습니다. (1d7c024)
- 이동된 이동 가능한 콘텐츠의 즉시 무효화를 수정했습니다. (8676618)
- 스냅샷 관찰에 대한 할당 감소 (5bc535f)
버전 1.5.0-alpha01
2023년 3월 22일
androidx.compose.runtime:runtime-*:1.5.0-alpha01
이 출시되었습니다. 버전 1.5.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
Modifier.Nodes
가 코루틴을 실행할 수 있도록Modifier.Node#coroutineScope
를 추가합니다. (I76ef9)CompositionLocalConsumerModifierNode
인터페이스를 구현하여Modifier.Nodes
가CompositionLocals
를 읽을 수 있도록 허용합니다. (Ib44df)
버전 1.4
버전 1.4.3
2023년 5월 3일
androidx.compose.runtime:runtime-*:1.4.3
은 변경사항 없이 출시되었습니다.
버전 1.4.2
2023년 4월 19일
androidx.compose.runtime:runtime-*:1.4.2
이 출시되었습니다. 버전 1.4.2에 포함된 커밋을 확인하세요.
버그 수정
스냅샷 목록 및 지도에서 잠재적 교착 상태를 수정했습니다. 2eb6570
SnapshotStateList
또는SnapshotStateMap
에 콘텐츠를 추가하면 상태 레코드에 대한 직접 쓰기와 동시에 수정 작업이 실행되는 경우 교착 상태가 발생할 수 있습니다. 직접 쓰기를 사용하여 사용되지 않는 레코드를 해제하는 93fcae828b에서 도입된 변경사항으로 인해 이러한 문제가 발생할 가능성이 크게 높아졌습니다.이제 맵 또는 목록 잠금이 유지될 때 스냅샷 잠금을 시도하지 않도록 잠금이 순서대로 지정됩니다.
버전 1.4.1
2023년 4월 5일
androidx.compose.runtime:runtime-*:1.4.1
이 출시되었습니다. 버전 1.4.1에 포함된 커밋을 확인하세요.
버그 수정
- 노드 그룹을 종료할 때
endToMarker()
를 수정합니다. d71d980
버전 1.4.0
2023년 3월 22일
androidx.compose.runtime:runtime-*:1.4.0
이 출시되었습니다. 버전 1.4.0에 포함된 커밋을 확인하세요.
1.3.0 이후 중요 변경사항
- 첫 번째 컴포지션 3680e25에
LiveData
의 초기화된 값 사용 ComposeNodeLifecycleCallback
를 추가하여 Compose 노드의 수명 주기를 관찰합니다. 8b6a258ComposableMethod
에parameterTypes
속성을 추가합니다. 7b6c7ad
버그 수정 및 성능 개선
SnapshotStateObserver
29f4a3e에서 두 범위 색인 모두 삭제- 건너뛸 수 없는 람다의 본문에 필요한 그룹 추가 7d06752
- 스냅샷 상태의 메모리 참조 특성을 개선했습니다. 93fcae8
- 컴포지션 로컬 조회에서 권투를 삭제했습니다. 0875717
- 재사용 불가능한 노드 그룹 6388d8d에 올바른 키 사용
- 반복 적용되거나 동시 적용되지 않도록
SnapshotStateObserver
를 보호합니다. 98cb6ba IdentityArraySet
'get' 메서드에 check-index-bounds 검사를 추가했습니다. 35a77d3ViewTreeLifecycleOwner
확장 프로그램을 사용하도록 Compose 모듈 업데이트 21c2122- Recomposer가 프레임을 완료한 후 적용 알림을 전송합니다. 98f2641
- 리컴포저 취소 시 색인 범위 외 비정상 종료 수정 8f8656f
- 컴포지션의 상위 제공업체가 변경된 경우 항상 재구성 강제 9526fcc
- 취소된 작업의 리컴포저 허용 오차 a55f7ed
- 다수의 작곡기의 무효화 처리 개선 9b7ed67
- 비로컬 반환의 닫기 그룹 생성 수정 b6f590c
버전 1.4.0-rc01
2023년 3월 8일
androidx.compose.runtime:runtime-*:1.4.0-rc01
이 출시되었습니다. 버전 1.4.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
버전 1.4.0-beta02
2023년 2월 22일
androidx.compose.runtime:runtime:1.4.0-beta02
및 androidx.compose.runtime:runtime-saveable:1.4.0-beta02
가 출시되었습니다. 버전 1.4.0-beta02에 포함된 커밋을 확인하세요.
버전 1.4.0-beta01
2023년 2월 8일
androidx.compose.runtime:runtime-*:1.4.0-beta01
이 출시되었습니다. 버전 1.4.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- Compose 노드의 수명 주기를 관찰할 수 있는
ComposeNodeLifecycleCallback
을 추가했습니다. (I3731b) @TestOnly
를Composer.disableSourceInformation()
에 추가했습니다. 이 함수는 테스트에서만 안전하게 호출할 수 있기 때문입니다. (I896c8)
버그 수정
버전 1.4.0-alpha05
2023년 1월 25일
androidx.compose.runtime:runtime:1.4.0-alpha05
및 androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
가 출시되었습니다. 버전 1.4.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
- 인라인/지원 중단된 숨겨진 함수의 유형/null 허용 여부가 추가되었습니다. (I24f91)
버전 1.4.0-alpha04
2023년 1월 11일
androidx.compose.runtime:runtime-*:1.4.0-alpha04
가 출시되었습니다. 버전 1.4.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
TestMonotonicFrameClock
이 올바른 실험용 주석을 사용합니다. (I95c9e)
버그 수정
- 반복 적용되거나 동시 적용되지 않도록
SnapshotStateObserver
를 보호합니다. (d902fb)
버전 1.4.0-alpha03
2022년 12월 7일
androidx.compose.runtime:runtime-*:1.4.0-alpha03
이 출시되었습니다. 버전 1.4.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
java.lang.reflect.Method#getParameterTypes()
와 유사한ComposableMethod
클래스에 새 공개 메서드를 추가합니다. (Iab0c3)
버그 수정
- 이제
Recomposer
가 변경사항 적용을 완료하면 스냅샷 적용 알림이 전송됩니다. (Iad6c0, b/222093277)
버전 1.4.0-alpha02
2022년 11월 9일
androidx.compose.runtime:runtime-*:1.4.0-alpha02
가 출시되었습니다. 버전 1.4.0-alpha02에 포함된 커밋을 확인하세요.
버전 1.4.0-alpha01
2022년 10월 24일
androidx.compose.runtime:runtime-*:1.4.0-alpha01
이 출시되었습니다. 버전 1.4.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
SnapshotStateList
및SnapshotStateMap
은 각각toList()
및toMap()
을 명시적으로 구현합니다. 이 메서드는 콘텐츠를 저장하는 데 사용되는 변경 불가능한 내부 데이터를 반환하므로 사본을 실행하지 않고 현재 콘텐츠를 반환합니다. 예를 들어 이 값은 데이터 복사 없이snapshotFlow
를 사용하여 값의 흐름을 만드는 데 사용할 수 있습니다. (Ica2bd)
버전 1.3
버전 1.3.3
2023년 1월 11일
androidx.compose.runtime:runtime-*:1.3.3
이 출시되었습니다. 버전 1.3.3에 포함된 커밋을 확인하세요.
- 1.3.2 이후 변경사항이 없습니다.
버전 1.3.2
2022년 12월 7일
androidx.compose.runtime:runtime-*:1.3.2
가 출시되었습니다. 버전 1.3.2에 포함된 커밋을 확인하세요.
버그 수정
- androidx.compose.ui 1.3.2를 지원하도록 업데이트했습니다.
버전 1.3.1
2022년 11월 9일
androidx.compose.runtime:runtime-*:1.3.1
이 출시되었습니다. 버전 1.3.1에 포함된 커밋을 확인하세요.
버전 1.3.0
2022년 10월 24일
androidx.compose.runtime:runtime-*:1.3.0
이 출시되었습니다. 버전 1.3.0에 포함된 커밋을 확인하세요.
1.2.0 이후 중요 변경사항
예외 처리/실시간 편집 지원
- 실시간 편집을 더 효과적으로 지원하기 위해 컴포지션 중에 예외를 처리할 수 있도록 API를 추가함
- 핫 리로드를 위한 컴포지션 오류 처리
- 저장/복원 시 실시간 편집 오류 처리
컴포지션 추적
- 새로운 컴포지션 추적 도구를 지원하기 위한 런타임 추적 API를 추가함
- 컴포저블 트레이스 이벤트 시작/종료 호출 생성
- ComposerKt.traceEventStart(Int, String)를 다시 추가함
구성 가능한 Reflection API
- 구성 가능한 API에 대해 더 안정적으로 리플렉션 기반 호출을 할 수 있게 새
ComposableMethod
API를 추가함 - invokeComposable을 Compose 런타임으로 이동
- 구성 가능한 메서드를 호출하도록 API 재작업
런타임 수정
스냅샷 시스템
- 메모리 관리, 성능, 정확성과 관련하여 스냅샷 시스템을 다양하게 개선함
- SnapshotStateObserver에서 범위 삭제 최적화
- 투명한 스냅샷에서 만들어진 중첩된 스냅샷 삭제
- 전역 스냅샷에서 상태를 읽을 때 발생하는 경합 상태 수정
- SnapshotStateObserver에서 DerivedState 지원
- 다른 범위에서 읽힐 때 컴포지션에서 파생된 상태 삭제 방지
- DerivedState 내에서 HashMap 대신 IdentityArrayMap 사용
- 변경 가능한 벡터를 사용하도록 파생된 상태 관찰자 업데이트
- SnapshotStateObserver 상태 정리 업데이트
- SnapshotStateObserver.invalidated를 ArraySet로 대체
- 전역 스냅샷에서 상태를 읽을 때 발생하는 경합 상태 수정
- DerivedState 해시 계산에서 비활성 레코드 사용 수정
- 전역 스냅샷 진행 시 발생하는 경합 상태 수정
- SnapshotStateObserver에서 범위 관찰 정리 속도 향상
버전 1.3.0-rc01
2022년 10월 5일
androidx.compose.runtime:runtime-*:1.3.0-rc01
이 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 슬롯 테이블에서 발생하는
ArrayIndexOutOfBoundsException
을 수정했습니다. (b/249076084)
버전 1.3.0-beta03
2022년 9월 21일
androidx.compose.runtime:runtime-*:1.3.0-beta03
이 출시되었습니다. 버전 1.3.0-beta03에 포함된 커밋을 확인하세요.
동작 브레이킹 체인지
remember
및rememberCoroutineScope
의 매개변수이며crossinline
으로 변경되었습니다. 이렇게 하면 조기 반환이 허용되지 않고 조기 반환 오류가 보고되며, 이렇게 하면 추후 내부 오류가 보고됩니다.- 이 변경으로 인해, 이 함수에 전달된 람다에서 로컬이 아닌 반환을 삭제해야 하는 새로운 컴파일러 오류가 보고될 수 있습니다. (Ibea62)
버전 1.3.0-beta02
2022년 9월 7일
androidx.compose.runtime:runtime-*:1.3.0-beta02
가 출시되었습니다. 버전 1.3.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
- API를 업데이트했습니다. (I64ca0)
버전 1.3.0-beta01
2022년 8월 24일
androidx.compose.runtime:runtime-*:1.3.0-beta01
이 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
find
메서드를CompositionData
에 추가했습니다. 이 API를 사용하는 개발자 도구가 ID를 사용하여 컴포지션의 하위 그룹을 빠르게 찾을 수 있습니다. (I5794f)
버전 1.3.0-alpha03
2022년 8월 10일
androidx.compose.runtime:runtime-*:1.3.0-alpha03
이 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.
버전 1.3.0-alpha02
2022년 7월 27일
androidx.compose.runtime:runtime-*:1.3.0-alpha02
가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- 이전 버전과의 호환성을 위해
ComposerKt.traceEventStart(Int, String)
를 다시 추가했습니다. (I6e6de)
버전 1.3.0-alpha01
2022년 6월 29일
androidx.compose.runtime:runtime-*:1.3.0-alpha01
이 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- 유틸리티 기능을 런타임으로 이동했습니다. (I4f729)
버전 1.2
버전 1.2.1
2022년 8월 10일
androidx.compose.runtime:runtime-*:1.2.1
이 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 메모리 누수 수정: 투명한 스냅샷에서 생성된 중첩된 스냅샷을 삭제합니다. (b/239603305)
버전 1.2.0
2022년 7월 27일
androidx.compose.runtime:runtime-*:1.2.0
이 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0
이후 중요 변경사항
Compose 런타임에는 1.2.0에서 도입된 몇 가지 기능과 안정화된 여러 버그 수정이 포함되었습니다. 가장 중요한 새로운 기능은
movableContentOf
API를 도입한 것으로, 공유 요소 전환과 같은 복잡한 UX를 사용 설정하는 데 사용할 수 있습니다.movableContentOf
API는 컴포저블 람다를, 호출되는 새 위치로 상태 및 상응하는 노드를 이동시키는 람다로 변환합니다. 이전 호출이 컴포지션을 종료하면 상태가 일시적으로 유지되고 새 람다 호출이 컴포지션에 진입하면 상태 및 관련 노드가 새 호출 위치로 이동됩니다. 새로 추가된 호출이 없으면 상태는 완전히 삭제되고 관찰자가 알림을 받습니다.동일한 컴포지션에서
movableContentOf
람다가 여러 번 호출되면 호출마다 새 상태와 노드가 생성되고, 호출이 컴포지션을 종료하고 새 호출이 진입함에 따라 상태는 호출되는 순서로 첫 번째 종료 호출에서 진입 호출로 이동됩니다. 새 호출로 요청하지 않은 모든 상태는 완전히 삭제됩니다.이 기능과 기타 몇 가지 새로운 기능 외에도 런타임 및 스냅샷 상태 시스템을 안정화하는 데 많은 시간을 투자했습니다. 다양한 메모리 누수가 삭제되고 코드 경로가 최적화되었습니다.
변경사항을 요약한 목록은 아래에서 확인할 수 있습니다.
1.2
의 새로운 기능
- 실험용 스냅샷 unsafeEnter/Leave 추가
- Snapshot.asContextElement 실험용 API 추가
- Snapshot.withoutReadObservation 도입
- 컴포지션 내 상태 이동 허용
- Compose에서 재구성 추적
1.2
의 성능
1.2
의 버그 수정
- 출시 재구성 범위에서 추적 정보 삭제
- 다른 범위에서 읽힐 때 컴포지션에서 파생된 상태 삭제 방지
- SnapshotStateObserver에서 더 효율적인 removeScope() 사용
- 컴포지션에서 파생된 상태 종속 항목 삭제
- 이동 가능한 콘텐츠 내에서 내부 재구성 후 currentCompositeKeyHash가 변경되는 문제 수정
- 처리 중에 무효화된 컴포지션 삭제
- 재구성 중 파생 상태 읽기 문제 수정
- 파생된 상태 객체 관찰 시 메모리 누수 문제 수정
- movableContent 복합 해시 키가 일관되도록 수정
- 컴포저가 다운되는 사례 수정
- 그룹 강제 무효화가 재구성을 강제하도록 보장
- 입력이 있는 rememberSaveable이 잘못된 순서로 복원될 때 버그 수정
버전 1.2.0-rc03
2022년 6월 29일
androidx.compose.runtime:runtime-*:1.2.0-rc03
이 출시되었습니다. 버전 1.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- 파생된 상태에 대한 관찰은 이전에 재구성 범위 및 컴포지션에서 무조건 삭제되었으며, 이로 인해 파생 상태를 계속 관찰할 수 있었던 다른 범위가 손상되었습니다. 이번 변경사항에서는 다른 범위에서 더 이상 관찰되지 않는 경우에만 파생 상태 인스턴스를 삭제합니다. (b/236618362)
버전 1.2.0-rc02
2022년 6월 22일
androidx.compose.runtime:runtime-*:1.2.0-rc02
가 출시되었습니다. 버전 1.2.0-rc02에 포함된 커밋을 확인하세요.
버전 1.2.0-rc01
2022년 6월 15일
androidx.compose.runtime:runtime-*:1.2.0-rc01
이 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.
API 변경사항
- Compose 라이브러리의 인터페이스가 이제 jdk8 기본 인터페이스 메서드를 사용하여 빌드됩니다. (I5bcf1)
버전 1.2.0-beta03
2022년 6월 1일
androidx.compose.runtime:runtime-*:1.2.0-beta03
이 출시되었습니다. 버전 1.2.0-beta03에 포함된 커밋을 확인하세요.
버전 1.2.0-beta02
2022년 5월 18일
androidx.compose.runtime:runtime-*:1.2.0-beta02
가 출시되었습니다. 버전 1.2.0-beta02에 포함된 커밋을 확인하세요.
버전 1.2.0-beta01
2022년 5월 11일
androidx.compose.runtime:runtime-*:1.2.0-beta01
이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이 출시는 1.2의 첫 번째 베타 버전입니다.
API 변경사항
- 실험용
Snapshot.unsafeEnter/unsafeLeave
를 추가했습니다. (I108f3) - 실험용
Snapshot.asContextElement()
API를 추가했습니다. (Iff072) - 이제
@ComposableTarget
주석과@ComposableTargetMarker
로 표시된 주석은@file
접두사를 사용하여 파일 범위에서 사용할 수 있습니다. 파일 범위에서 타겟 주석을 사용하면 컴파일러는 파일의 모든 구성 가능한 함수가 연결된 Applier를 타겟팅한다고 가정하게 됩니다. 예를 들어@file:UiComposable
을 사용하면 모든@Composable
함수가 Compose UI Applier를 타겟팅한다고 선언합니다. 다른 Applier를 타겟팅해야 하는 함수는 원하는 Applier에 맞는 타겟 마커 주석을 명시적으로 제공해야 합니다. (I40804)
버전 1.2.0-alpha08
2022년 4월 20일
androidx.compose.runtime:runtime-*:1.2.0-alpha08
이 출시되었습니다. 버전 1.2.0-alpha08에 포함된 커밋을 확인하세요.
API 변경사항
CompositionTracer
인터페이스에TracingInProgress
를 추가했습니다. (Ic6f12)- 컴포저에
recomposeScopeIdentity
를 추가합니다. (I0c873) - 트레이스 API(Composer.setTracer)가
OptIn(InternalComposeTracingApi)
으로 제한되었습니다. (I9187f) - 재사용 가능한 콘텐츠를 위해 생성된 상태의 전체 기간을 더 효과적으로 제어할 수 있도록
ResuableContentHost
를 추가했습니다. 예를 들어, 하위 컴포지션을 일시적으로 사용하지 않을 경우 콘텐츠가 비활성화되어 컴포지션에 기억된 모든 상태가 트리거되는 것을 잊을 수 있습니다(예: 모든 일회용 효과). (I2c0f2, b/220322704)
버전 1.2.0-alpha07
2022년 4월 6일
androidx.compose.runtime:runtime-*:1.2.0-alpha07
이 출시되었습니다. 버전 1.2.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
- 새 함수
Snapshot.withoutReadObservation { ... }
을 추가했습니다. 이를 통해 사용자는 이 블록 중에 읽은 상태 값의 변경사항을 구독하지 않고 전달된 람다를 실행할 수 있습니다. 스냅샷 기반 스레드에서 안전하게 읽고 쓸 수 있는 이점을 원하지만 불필요한 재구성 또는 재측정을 유발하지 않고 값을 읽고자 하는 사용 사례에 유용할 수 있습니다. (I9f365, b/214054486)
버전 1.2.0-alpha06
2022년 3월 23일
androidx.compose.runtime:runtime-*:1.2.0-alpha06
이 출시되었습니다. 버전 1.2.0-alpha06에 포함된 커밋을 확인하세요.
버전 1.2.0-alpha05
2022년 3월 9일
androidx.compose.runtime:runtime-*:1.2.0-alpha05
가 출시되었습니다. 버전 1.2.0-alpha05에 포함된 커밋을 확인하세요.
외부 기여
- Kotlinx 코루틴 1.6.0을 사용하도록 업데이트했습니다. (I3366d)
버전 1.2.0-alpha04
2022년 2월 23일
androidx.compose.runtime:runtime-*:1.2.0-alpha04
가 출시되었습니다. 버전 1.2.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
구성 가능한 함수가 사용 목적으로 설계되지 않은 Applier를 타겟팅하도록 호출되면 컴파일 시간 보고를 허용하는
ComposableTarget
,ComposableTargetMarker
및ComposableOpenTarget
을 추가했습니다.대부분의 경우 Compose 컴파일러 플러그인에서 주석을 추론할 수 있으므로 이러한 주석을 직접 사용할 일은 거의 없습니다. 추론할 수 없는 경우는 맞춤 Applier, 구성 가능한 추상 함수(예: 인터페이스 메서드), 구성 가능한 람다인 필드나 전역 변수(로컬 변수 및 매개변수가 추론됨)를 생성 및 사용하는 경우 또는
ComposeNode
나 구성 가능한 관련 함수를 사용하는 경우입니다.맞춤 Applier의 경우
ComposeNode
또는ReusableComposeNode
를 호출하는 구성 가능한 함수는 함수와 구성 가능한 람다 매개변수 유형에CompoableTarget
주석을 추가해야 합니다. 하지만ComposableTarget
을 직접 사용하는 대신ComposableTargetMarker
주석이 달린 주석을 만들어 표시된 주석을 사용하는 것이 좋습니다.ComposableTargetMarker
로 표시된 구성 가능한 주석은 applier 매개변수로 속성 클래스의 정규화된 이름을 갖는ComposbleTarget
과 동일합니다.ComposableTargetMarker
를 사용하는 예는anroidx.compose.ui.UiComposable
을 참고하세요. (I38f11)
버전 1.2.0-alpha03
2022년 2월 9일
androidx.compose.runtime:runtime-*:1.2.0-alpha03
이 출시되었습니다. 버전 1.2.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
구성 가능한 람다를 다른 람다로 변환하는
movableContentOf
를 추가했습니다. 변환된 람다는 람다가 호출된 새 위치로 상태와 상응하는 노드를 이동시킵니다. 이전 호출이 컴포지션을 종료하면 상태가 일시적으로 유지되고 새 람다 호출이 컴포지션에 진입하면 상태 및 관련 노드가 새 호출 위치로 이동됩니다. 새로 추가된 호출이 없으면 상태는 완전히 삭제되고 관찰자가 알림을 받습니다.동일한 컴포지션에서
movableContentOf
람다가 여러 번 호출되면 호출마다 새 상태와 노드가 생성되고, 호출이 컴포지션을 종료하고 새 호출이 진입함에 따라 상태는 호출되는 순서로 첫 번째 종료 호출에서 진입 호출로 이동됩니다. 새 호출로 요청하지 않은 모든 상태는 완전히 삭제됩니다. (Ib4850)구성 가능한 함수에 관한 자세한 추적을 도구에서 제공할 수 있도록 컴포지션에 추적 API를 추가했습니다. 이제 컴파일러는 소스 정보가 포함된 추적 API 호출을 생성합니다. (Ib0eb5)
출시 빌드에서 이러한 호출과 관련 소스 정보를 삭제하려면 다음 Proguard 규칙을 추가합니다.
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
도구에서 재구성 시 컴포저블을 식별할 수 있도록
InternalComposeScope
를 추가합니다. (I07a3f)
버전 1.2.0-alpha02
2022년 1월 26일
androidx.compose.runtime:runtime-*:1.2.0-alpha02
가 출시되었습니다. 버전 1.2.0-alpha02에 포함된 커밋을 확인하세요.
버전 1.2.0-alpha01
2022년 1월 12일
androidx.compose.runtime:runtime-*:1.2.0-alpha01
이 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- Layout Inspector에서 변하지 않는 ID를 생성하도록
CompositionData
에identity
필드를 추가했습니다. (Ic116e)
종속 항목 업데이트
- 이제 Kotlin
1.6.10
에 종속됩니다.
버전 1.1
버전 1.1.1
2022년 2월 23일
androidx.compose.runtime:runtime-*:1.1.1
이 출시되었습니다. 버전 1.1.1에 포함된 커밋을 확인하세요.
버그 수정
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
에서 발생하는NullPointerException
을 수정합니다. (aosp/1947059, b/206677462)- Android에서 클립보드를 읽는 동안 클립보드 콘텐츠로 인해 발생하는 비정상 종료 문제를 해결했습니다. (I06020, b/197769306)
LazyVerticalGrid
의 RTL을 수정했습니다. (aosp/1931080, b/207510535)
버전 1.1.0
2022년 2월 9일
androidx.compose.runtime:runtime-*:1.1.0
이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.
1.0.0 이후 중요 변경사항
- Android 12 오버스크롤 효과의 안정화 버전 지원
- 터치 영역 크기 조정 개선
- Compose 1.0의 경우 Material 구성요소는 Material 접근성 가이드라인 터치 영역 크기에 맞게 레이아웃 공간을 확장합니다. 예를 들어 버튼의 크기를 더 작게 설정하더라도 버튼 터치 영역은 최소
48x48dp
로 확장됩니다. 이렇게 하면 Compose Material이 Material Design 구성요소의 동작과 동일하게 정렬되어 뷰와 Compose를 함께 사용할 때 일관되게 동작합니다. 또한 이러한 변경을 통해 Compose Material 구성요소를 사용하여 UI를 만들 때 터치 영역 접근성에 관한 최소 요구사항이 충족됩니다. - Navigation Rail의 안정화 버전 지원
- 다수의 이전 실험용 API의 안정화 버전 전환
- 최신 버전의 Kotlin 지원
버전 1.1.0-rc03
2022년 1월 26일
androidx.compose.runtime:runtime-*:1.1.0-rc03
이 출시되었습니다. 버전 1.1.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- Compose Material
1.1.0-rc03
을 지원하도록 업데이트되었습니다.
버전 1.1.0-rc01
2021년 12월 15일
androidx.compose.runtime:runtime-*:1.1.0-rc01
이 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.
버전 1.1.0-beta04
2021년 12월 1일
androidx.compose.runtime:runtime-*:1.1.0-beta04
가 출시되었습니다. 버전 1.1.0-beta04에 포함된 커밋을 확인하세요.
새로운 기능
- Kotlin
1.6.0
과 호환되도록 업데이트되었습니다.
버전 1.1.0-beta03
2021년 11월 17일
androidx.compose.runtime:runtime-*:1.1.0-beta03
이 출시되었습니다. 버전 1.1.0-beta03에 포함된 커밋을 확인하세요.
버전 1.1.0-beta02
2021년 11월 3일
androidx.compose.runtime:runtime-*:1.1.0-beta02
가 출시되었습니다. 버전 1.1.0-beta02에 포함된 커밋을 확인하세요.
API 변경사항
- 스냅샷 코드가 여러 개의 파일로 분할되었지만, 모두 동일한 JVM 클래스에 있습니다. (Ic6c98)
버전 1.1.0-beta01
2021년 10월 27일
androidx.compose.runtime:runtime-*:1.1.0-beta01
이 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.
버전 1.1.0-alpha06
2021년 10월 13일
androidx.compose.runtime:runtime-*:1.1.0-alpha06
이 출시되었습니다. 버전 1.1.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
- 교차 모듈을 호출해야 하는 컴포저 메서드에서
InternalCompilerApi
를 삭제했습니다. (I1aa0b) Recomposer.state
를 지원 중단하고Recomposer.currentState
로 대체하여 유형을 StateFlow로 변경했습니다. (Ic2ab3, b/197773820)
버전 1.1.0-alpha05
2021년 9월 29일
androidx.compose.runtime:runtime-*:1.1.0-alpha05
가 출시되었습니다. 버전 1.1.0-alpha05에 포함된 커밋을 확인하세요.
버전 1.1.0-alpha04
2021년 9월 15일
androidx.compose.runtime:runtime-*:1.1.0-alpha04
가 출시되었습니다. 버전 1.1.0-alpha04에 포함된 커밋을 확인하세요.
버전 1.1.0-alpha03
2021년 9월 1일
androidx.compose.runtime:runtime-*:1.1.0-alpha03
이 출시되었습니다. 버전 1.1.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Compose 컴파일러가 이전 버전의 Compose Runtime(1.0)을 지원합니다. 이 변경 전에 Compose 컴파일러는 같은 버전 이상의 Compose Runtime과만 호환되었습니다. 이 변경 후에는 Compose 컴파일러가 이전 버전의 Compose Runtime(1.0)과 호환됩니다. (aosp/1796968)
- Kotlin
1.5.30
에 종속되도록 Compose1.1.0-alpha03
을 업데이트했습니다. (I74545)
버전 1.1.0-alpha02
2021년 8월 18일
androidx.compose.runtime:runtime-*:1.1.0-alpha02
가 출시되었습니다. 버전 1.1.0-alpha02에 포함된 커밋을 확인하세요.
버전 1.1.0-alpha01
2021년 8월 4일
androidx.compose.runtime:runtime-*:1.1.0-alpha01
이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.
버전 1.0
버전 1.0.5
2021년 11월 3일
androidx.compose.runtime:runtime-*:1.0.5
가 출시되었습니다. 버전 1.0.5에 포함된 커밋을 확인하세요.
버그 수정
- derivedStateOf 인스턴스를 추적할 때 발생하는 비정상 종료 문제를 수정했습니다. (aosp/1792247)
버전 1.0.4
2021년 10월 13일
androidx.compose.runtime:runtime-*:1.0.4
가 출시되었습니다. 버전 1.0.4에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- Kotlin
1.5.31
에 종속되도록 업데이트했습니다.
버전 1.0.3
2021년 9월 29일
androidx.compose.runtime:runtime-*:1.0.3
이 출시되었습니다. 버전 1.0.3에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- Kotlin
1.5.30
에 종속되도록 업데이트했습니다.
버전 1.0.2
2021년 9월 1일
androidx.compose.runtime:runtime-*:1.0.2
가 출시되었습니다. 버전 1.0.2에 포함된 커밋을 확인하세요.
Compose 1.0.2
출시를 지원하도록 업데이트되었습니다. Compose 1.0.2
는 여전히 Kotlin 1.5.21
과 호환됩니다.
버전 1.0.1
2021년 8월 4일
androidx.compose.runtime:runtime-*:1.0.1
이 출시되었습니다. 버전 1.0.1에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- Kotlin
1.5.21
에 종속되도록 업데이트했습니다.
버전 1.0.0
2021년 7월 28일
androidx.compose.runtime:runtime-*:1.0.0
이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.
1.0.0의 주요 기능
Compose의 첫 번째 안정화 버전입니다. 자세한 내용은 공식 Compose 버전 블로그를 참고하세요.
알려진 문제
Android 스튜디오 Bumblebee Canary 4 또는 AGP
7.1.0-alpha04
/7.1.0-alpha05
를 사용하는 경우 다음과 같은 비정상 종료가 발생할 수 있습니다.java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
이 문제를 해결하려면
build.gradle
파일에서 minSdkVersion을 24 이상으로 일시적으로 늘리세요. 이 문제는 Android 스튜디오 Bumblebee 향후 버전 및 AGP7.1
버전에서 해결될 예정입니다. (b/194289155)
버전 1.0.0-rc02
2021년 7월 14일
androidx.compose.runtime:runtime-*:1.0.0-rc02
가 출시되었습니다. 버전 1.0.0-rc02에 포함된 커밋을 확인하세요.
- SnapshotStateObserver에서 불규칙한 NullPointerExceptions를 일으키는 경합 상태를 해결했습니다. (aosp/1763445, aosp/1758105, b/192677711)
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
비정상 종료를 일으키는 런타임 스냅샷의 문제를 해결했습니다. (b/193006595, b/192570897)
버전 1.0.0-rc01
2021년 7월 1일
androidx.compose.runtime:runtime-*:1.0.0-rc01
이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.
버전 1.0.0-beta09
2021년 6월 16일
androidx.compose.runtime:runtime-*:1.0.0-beta09
가 출시되었습니다. 버전 1.0.0-beta09에 포함된 커밋을 확인하세요.
추가된 프로필 규칙
이번 출시에서는 다음 Compose 모듈에 프로필 규칙이 추가됩니다. (I14ed6)
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
프로필 규칙이란 무엇인가요?
라이브러리의 프로필 규칙은
src/main
또는 이에 상응하는 디렉터리에 있는 텍스트 파일baseline-prof.txt
에 지정됩니다. 이 파일에서는 줄별로 규칙을 지정합니다. 이때 규칙은 라이브러리의 메서드 또는 클래스와의 일치를 확인하는 패턴을 말합니다. 규칙의 문법은adb shell profman --dump-classes-and-methods ...
를 사용할 때 사용되며 사람이 읽을 수 있는 ART 프로필 형식의 상위 집합입니다. 규칙의 형식은 메서드 또는 클래스를 타겟팅하는 두 가지 형식 중 하나입니다.메서드 규칙의 패턴은 다음과 같습니다.
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
클래스 규칙의 패턴은 다음과 같습니다.
<CLASS_DESCRIPTOR>
여기에서
<FLAGS>
는 이 메서드의 플래그를 'Hot', 'Startup' 또는 'Post Startup'으로 지정해야 하는지를 나타내는 문자H
,S
,P
중 하나 이상으로 구성됩니다.<CLASS_DESCRIPTOR>
는 타겟팅된 메서드가 속한 클래스의 설명자입니다. 예를 들어androidx.compose.runtime.SlotTable
클래스는Landroidx/compose/runtime/SlotTable;
의 설명자를 포함합니다.<METHOD_SIGNATURE>
는 메서드의 서명이며 이름, 매개변수 유형, 메서드의 반환 유형을 포함합니다. 예를 들어LayoutNode
의fun isPlaced(): Boolean
메서드는 서명이isPlaced()Z
입니다.이러한 패턴에는 단일 규칙이 여러 메서드나 클래스를 포괄하도록 와일드 카드(
**
,*
,?
)가 포함될 수 있습니다.
규칙의 기능은 무엇인가요?
H
플래그는 'Hot' 메서드임을 나타내며, 이러한 메서드는 미리 컴파일해야 합니다.S
플래그는 시작 시 호출되는 메서드임을 나타내며, 컴파일 비용을 발생시키지 않고 시작 시 메서드를 해석하지 않으려면 이러한 메서드를 미리 컴파일해야 합니다.P
플래그는 시작 후에 호출되는 메서드임을 나타냅니다.이 파일에 있는 클래스는 시작 중에 사용된다는 사실을 나타내며, 클래스 로드 비용을 발생시키지 않으려면 클래스를 힙에 미리 할당해야 합니다.
어떤 방식으로 작동하나요?
- 라이브러리는 이러한 규칙을 정의할 수 있고 규칙은 AAR 아티팩트에 패키징됩니다. 그런 다음, 이러한 아티팩트를 포함하는 앱을 빌드하면 규칙이 함께 병합되어 앱과 관련된 압축 바이너리 ART 프로필을 빌드하는 데 사용됩니다. 그러면 ART에서 앱을 기기에 설치할 때 예정보다 앞서 애플리케이션의 특정 하위 집합을 컴파일하여 애플리케이션의 성능을 향상하도록(특히, 첫 번째 실행 성능) 이 프로필을 활용할 수 있습니다. 디버그 가능한 애플리케이션에는 영향을 주지 않습니다.
버전 1.0.0-beta08
2021년 6월 2일
androidx.compose.runtime:runtime-*:1.0.0-beta08
이 출시되었습니다. 버전 1.0.0-beta08에 포함된 커밋을 확인하세요.
API 변경사항
State<T>
는 이제State<out T>
입니다. (I69049)- 재구성 단일 패스에서 변경사항을 재구성할 수 있도록
ControlledComposition
API를 변경합니다. (Iaafd1, b/184173932)
버전 1.0.0-beta07
2021년 5월 18일
androidx.compose.runtime:runtime-*:1.0.0-beta07
이 출시되었습니다. 버전 1.0.0-beta07에 포함된 커밋을 확인하세요.
API 변경사항
- 소스 축소 중에 컴파일러로 생성된 소스 정보를 삭제할 수 있는 새 Compose 컴파일러 API를 추가했습니다. (Ia34e6)
키가 변경될 때 노드를 대체하는 대신 콘텐츠에서 노드를 재사용하려고 하는
ReusableContent
를 도입합니다. 키가 변경되면 생성된 노드와 노드 업데이트에 사용된 값을 제외하고 콘텐츠에 관한 슬롯 테이블의 이전 값이 무시됩니다.ComposeNode
의 경우처럼 노드를 대체하는 대신 내보낸 노드를 재사용하는ReusableComposeNode
를 도입합니다. (I1dd86)@ComposeCompilerApi
가 더 이상@RequiresOptIn
이 아닙니다. (Iab690)
버그 수정
- 이제 LazyColumn/Row는 이미 스크롤되었더라도 이전에 표시된 최대 2개의 항목을 활성 상태로 유지합니다. 이를 통해 스크롤 성능을 개선하는 새 항목을 작성해야 할 때 구성요소가 활성 상태의 하위 작성을 재사용할 수 있습니다. (Ie5555)
버전 1.0.0-beta06
2021년 5월 5일
androidx.compose.runtime:runtime-*:1.0.0-beta06
이 출시되었습니다. 버전 1.0.0-beta06에 포함된 커밋을 확인하세요.
API 변경사항
@ComposeCompilerApi
가 더 이상@RequiresOptIn
이 아닙니다. (Iab690)
버전 1.0.0-beta05
2021년 4월 21일
androidx.compose.runtime:runtime-*:1.0.0-beta05
가 출시되었습니다. 버전 1.0.0-beta05에 포함된 커밋을 확인하세요.
API 변경사항
- 스냅샷 읽기와 쓰기를 기록하는
@InternalComposeApi
를 삭제했습니다. (Id134d)
버그 수정
- ui-test-manifest 및 ui-tooling-data의 AndroidManifest 파일이 이제 Android 12와 호환됩니다. (I6f9de, b/184718994)
버전 1.0.0-beta04
2021년 4월 7일
androidx.compose.runtime:runtime-*:1.0.0-beta04
가 출시되었습니다. 버전 1.0.0-beta04에 포함된 커밋을 확인하세요.
버그 수정
이 변경 이전에 구성 가능한 로컬 함수는 매개변수에 따라 건너뛸 수 있었습니다. 이 변경 이후에는 구성 가능한 로컬 함수가 건너뛰지 않습니다. 이렇게 변경한 이유는 로컬 함수의 경우 일반적으로 상위 요소에서 매개변수를 캡처하는 것으로 예상되고 건너뛰기가 버그의 일반적인 소스이기 때문입니다.
요약하자면 다음과 같습니다.
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
이 변경 이전에는, 구성 가능한
ShowCount
함수는count
매개변수가 업데이트된 후에도 항상 건너뛰게 되어 있었습니다. 더 이상은 아닙니다. (I5648a)rememberSaveable()
이 입력 매개변수와 함께 사용될 때 이전 값이 복원되는 문제를 해결했습니다. (I1b110, b/182403380)
버전 1.0.0-beta03
2021년 3월 24일
androidx.compose.runtime:runtime-*:1.0.0-beta03
이 출시되었습니다. 버전 1.0.0-beta03에 포함된 커밋을 확인하세요.
API 변경사항
DefaultMonotonicFrameClock
이 지원 중단되었습니다. 이제MonotonicFrameClock
없이withFrameNanos
또는Recomposer.runRecomposeAndApplyChanges
를 호출하면IllegalStateException
이 발생합니다. (I4eb0d)
버전 1.0.0-beta02
2021년 3월 10일
androidx.compose.runtime:runtime-*:1.0.0-beta02
가 출시되었습니다. 버전 1.0.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
- 실험용 API의 공개 사용에 제한을 적용합니다. (I6aa29, b/174531520)
- navigation-compose의 대상 내에서 사용될 때
rememberSaveable { mutableStateOf(0) }
이 중단되는 문제를 해결했습니다. (I1312b, b/180042685, b/180701630)
버전 1.0.0-beta01
2021년 2월 24일
androidx.compose.runtime:runtime-*:1.0.0-beta01
이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
Compose 1.0.0 베타의 첫 번째 버전입니다.
API 변경사항
- 기본 프레임 루프에서 무효화된 컴포지션을 재구성하기 위한
Recomposer.runRecomposeConcurrentlyAndApplyChanges
실험용 API를 추가합니다. (I342d0) - 이제 @ReadOnlyComposable로 표시된 모든 컴포저블은 다른 @ReadOnlyComposables만 호출할 수 있도록 컴파일 시간 유효성 검사가 실행됩니다. (I58961)
compositionLocalOf
및staticCompositionLocalOf
용defaultFactory
는 이제 선택사항이 아닌 필수입니다.이 변경으로 인해 null을 허용하지 않는 유형 중 기본 팩토리가 제공되지 않은 유형에 관해 잠재적으로 발생할 수 있는 유형 오류가 발생하지 않습니다. 이전에는 null을 허용하지 않는 유형의 경우 null 참조가 제공되었습니다.
null을 허용하는 유형에는
{ null }
을 기본 팩토리로 제공하는 것이 좋습니다.적절한 기본값을 제공할 수 없는 한, null을 허용하지 않는 유형에는 로컬을 사용하지 않는 것이 좋습니다. 적절한 기본값이 존재하지 않으면
defaultFactory
람다에서 예외가 발생합니다. 하지만 예외가 발생해도 로컬이 유형 시스템에 의해 실행되지 않는 한, 로컬의 사용자는 로컬에 관한 암시적 종속 항목을 갖게 됩니다. (Ifbd2a)지원 중단된 기호가 Compose 런타임에서 삭제되었습니다. (I3252c)
지원 중단된
emptyContent()
가 삭제되었습니다. 대신{}
를 사용합니다. (Idb33f, b/179432510)프로바이더 이름이 CompositionLocalProvider로 변경되었습니다.
- 컴포지션 생성자가 더 이상 키 매개변수를 허용하지 않으며 지원 중단되었습니다.
- currentCompositeKeyHash가 최상위 컴포저블 함수가 아닌 최상위 컴포저블 속성으로 전환되었습니다.
- CompositionData 및 CompositionGroup이 androidx.compose.runtime.tooling 네임스페이스로 이동했습니다.
- ComposableLambda는 구체적인 클래스가 아닌 일종의 인터페이스가 되었으며 더 이상 유형 매개변수를 갖지 않습니다.
- ComposableLambdaN은 구체적인 클래스가 아닌 일종의 인터페이스가 되었으며 더 이상 유형 매개변수를 갖지 않습니다.
- snapshotFlow 함수가 androidx.compose.runtime 네임스페이스로 이동했습니다.
- SnapshotMutationPolicy의 병합 메서드가 더 이상 실험용이 아닙니다.
- @TestOnly 최상위 clearRoots 함수를 삭제했습니다. 더 이상 필요하지 않습니다.
- keySourceInfoOf 및 resetSourceInfo 함수가 삭제되었습니다. 더 이상 필요하지 않습니다.
- Composer.collectKeySourceInformation이 삭제되었습니다. 더 이상 필요하지 않습니다.
- isJoinedKey, joinedKeyLeft 및 joinedKeyRight 메서드가 삭제되었습니다. 더 이상 필요하지 않습니다.
- 다양한 최상위 API가 여러 파일로 이동되고 재구성되었습니다. Kotlin의 파일 클래스 의미 체계로 인해 바이너리 호환성이 중단되지만 소스 호환성은 중단되지 않습니다. 따라서 대부분의 사용자에게 문제가 되지 않습니다.
- (I99b7d, b/177245490)
SnapshotStateObserver는 더 이상 실험용이 아닙니다. (Id2e6a)
이전에 지원 중단된 일부 API를 삭제했습니다. (Ice5da, b/178633932)
다음과 같이 Material API가 변경되었습니다.
- 기본 패딩을 맞춤설정할 수 있도록 contentPadding 매개변수를 Top/BottomAppBar에 추가했습니다.
- 필수 매개변수가 선택 매개변수 앞에 와야 한다는 API 지침을 따르기 위해 BackdropScaffold의 매개변수를 재정렬했습니다.
- BottomNavigationItem의
icon
매개변수를selected
및onClick
다음으로 이동했습니다. - BottomNavigationItem의
alwaysShowLabels
매개변수 이름을alwaysShowLabel
로 변경했습니다. - 몇몇 구성요소의
bodyContent
매개변수 이름을 단순하게content
로 변경했습니다. ButtonDefaults.buttonColors()
의 매개변수를 재정렬했습니다. 매개변수의 유형이 변경되지는 않았으므로 이로 인한 코드 오류는 발생하지 않습니다. 이름이 지정된 매개변수를 사용하거나 수동으로 정렬을 업데이트하세요. 그러지 않으면 코드가 이전과 동일하게 작동하지 않습니다.darkColors()
에secondaryVariant
매개변수를 추가했습니다. 이 색상은 일반적으로 어두운 테마의secondary
와 동일하지만 일관성 및 세부 맞춤설정을 위해 추가되었습니다.- 공개 API 노출 영역에서 ElevationDefaults 및 animateElevation()을 삭제했습니다. 자주 사용되지 않거나 유용하지 않기 때문입니다.
Slider
의onValueChangeEnd
이름을onValueChangeFinished
로 바꾸고 null을 허용하도록 설정했습니다.- 일관성을 위해
Snackbar
의text
매개변수 이름을content
로 변경했습니다. - 기본 패딩의 맞춤설정이 가능하도록
DropdownMenuItem
에contentPadding
매개변수를 추가했고,content
를RowScope
의 확장 프로그램으로 만들었습니다. ModalDrawerLayout
의 이름을ModalDrawer
로 변경했습니다.BottomDrawerLayout
의 이름을BottomDrawer
로 변경했습니다.- (I1cc66)
버전 1.0.0-alpha12
2021년 2월 10일
androidx.compose.runtime:runtime-*:1.0.0-alpha12
가 출시되었습니다. 버전 1.0.0-alpha12에 포함된 커밋을 확인하세요.
API 변경사항
- UiApplier에서 ViewGroups 지원이 삭제되었습니다. 지원 중단된 emitView 컴포저블을 삭제했습니다. (Ifb214)
- CompositionReference 이름을 CompositionContext로 바꾸었습니다. (I53fcb)
- ComponentActivity.setContent를 androidx.activity:activity-compose 모듈의 androidx.activity.compose.setContent로 이동했습니다. (Icf416)
- API 가이드라인을 준수하고 공개 API에서 내부 구현 클래스를 숨기도록 Snapshot API를 업데이트했습니다. (Id9e32)
- Ambients의 이름을 Ambient와 일치하도록 CompositionLocal로 바꾸었습니다. Ambients에서 AmbientFoo라고 했던 이름은 이제 CompositionLocals에서 LocalFoo가 됩니다. (I2d55d)
- Ambient를 CompositionLocal로, ambientOf/staticAmbientOf를 compositionLocalOf/staticCompositionLocalOf로 각각 이름을 바꿨습니다. 이 변경으로 컴포지션에 로컬인 값을 제공/검색하는 메커니즘인 CompositionLocal의 목적이 더 명확해집니다. CompositionLocal 인스턴스에는 val LocalFoo = compositionLocalOf { Foo() }와 같은
Local
접두사가 있어야 합니다. (Ia55b6) - takeMutableSnapshot과 takeSnapshot이 Snapshot의 컴패니언 메서드로 이동되었습니다. (I91f19)
@ComposableContract
를 지원 중단하고 3가지 추가 특정 주석으로 대체했습니다.@ComposableContract(restartable = false)
는@NonRestartableComposable
,@ComposableContract(readonly = true)
는@ReadOnlyComposable
,@ComposableContract(preventCapture = true)
는@DisallowComposableCalls
가 되었습니다.@ComposableContract(tracked = true)
는 삭제되었습니다. (I60a9d)emptyContent() 및 (@Composable() -> Unit).orEmpty() 유틸리티는 더 이상 성능에 긍정적인 영향이나 가치가 없으므로 지원 중단되었습니다. (I0484d)
snapshotFlow
및withMutableSnapshot
은 이제 실험용이 아닙니다. (I6a45f)이제 Recomposer를 종료할 수 있습니다. 종료된 Recomposer는 컴포지션 하위 코루틴이 완료될 때까지 리컴포지션을 계속합니다. close와 구분하기 위해 Recomposer.shutDown의 이름을 cancel로 바꾸었습니다. (Ib6d76)
compose:runtime-dispatch
아티팩트를 이제 지원 중단합니다. 이제 MonotonicFrameClock은 compose:runtime에서, AndroidUiDispatcher는 compose:ui에서 찾을 수 있습니다. (Ib5c36)Compose 컴파일러 플러그인에서 타겟팅하는 API는 구체적인 클래스 대신 인터페이스를 사용하도록 리팩터링했습니다. 또한, 인터페이스는 더 이상 유형 매개변수를 사용하지 않습니다.
이는 소스 코드 호환성에 영향을 주면 안 되는 내부 변경이지만, 바이너리 브레이킹 체인지입니다. (I3b922, b/169406779)
SnapshotMutableState를 도입했습니다. (Icfd03)
DisposableEffectDisposable을 DisposaleEffectResult로 이름을 바꿨습니다. (Ica7c6)
Recomposer.current()를 삭제했습니다. [Abstract]ComposeView는 이제 기본적으로 지연 생성되고 창으로 범위가 지정되는 Recomposer이며, 창의 ViewTreeLifecycleOwner에 의해 구동됩니다. Recomposition 및 withFrameNanos 기반 애니메이션 틱은 호스트 수명 주기가 중지된 동안 일시중지됩니다. (I38e11)
Recomposer.runningRecomposers는 이제 프로세스에서 진행 중인 컴포지션 상태를 관찰하기 위한 읽기 전용 RecomposerInfo의 전역 StateFlow를 제공합니다. 현재 지원 중단된 Recomposer.current()보다 이 API를 사용하는 것이 좋습니다. (If8ebe)
DisposableEffectDisposable을 DisposaleEffectResult로 이름을 바꿨습니다. (I3ea68)
버전 1.0.0-alpha11
2021년 1월 28일
androidx.compose.runtime:runtime-*:1.0.0-alpha11
이 출시되었습니다. 버전 1.0.0-alpha11에 포함된 커밋을 확인하세요.
API 변경사항
- onCommit, onDispose, onActive를 지원 중단하고 SideEffect 및 DisposableEffect API로 대체했습니다. (If760e)
- emit() API와 모든 오버로드를 지원 중단하고 ComposeNode로 이름을 바꿨습니다. API는 동일하고 이름만 다르며 이는 Compose의 이름 지정 규칙을 따르기 위함입니다. (I4137b)
- invalidate 및 compositionReference()를 지원 중단하고 currentRecomposeScope 및 rememberCompositionReference로 각각 대체했습니다. (I583a8)
CompositionLifecycleObserver가 RememberObserver로 대체되며 CompositionLifecycleObserver는 이제 지원 중단됩니다.
RememberObserver
는 수정된 의미 체계와 이름이 바뀐 메서드로CompositionLifecycleObserver
를 대체합니다. 새로운 API로 변경하는 것은 한 번만 기억되는 객체의 경우 기계적으로 실행할 수 있으며, 계속 이렇게 하는 것이 좋습니다. 그러나, 참조가 컴포지션에서 두 번 이상 기억된 경우onEnter
가 한 번만 호출되는 참조마다onRemembered
가 호출됩니다. 객체가 단일onEnter
호출 보장을 신뢰할 수 없게 하는WithConstraints
및Scaffold
와 같은 하위 컴포지션에서 사용되었고RememberObserver
에서 삭제되었다면onEnter
가 여러 번 호출되었습니다.RememberObserver
에서onAbandoned
를 추가합니다. 이 함수는RememberObserver
인스턴스가remember
에 전달된 콜백에서 반환되지만 컴포지션 상태에 기억되지 않아서onRemembered
가 호출되지 않는 경우에 호출됩니다. 이러한 상황은 완료 전에 예외에서 컴포지션을 종료한 경우 또는 상태에서 더 이상 최신이 아니거나 필요하지 않은 컴포지션을 생성하므로 컴포지션이 삭제된 경우에 발생할 수 있습니다. 위의 단일 참조 권장사항을 따르는RememberObserver
인스턴스가 외부 리소스를 추적하면onForgotten
과onAbandoned
는 모두 리소스가 더 이상 필요하지 않음을 나타냅니다. 객체가 시작된 작업 또는onRemembered
에 할당된 리소스를 추적하고 있다면onRemembered
가 호출되는 경우onAbandoned
는 호출되지 않으므로 무시될 수 있습니다. (I02c36)collectAsState()
함수를 인라인으로 표시하지 않습니다. (Ia73e4)
버그 수정
- WithConstraints를 BoxWithConstraints로 재작업하여 foundation.layout으로 이동했습니다. (I9420b, b/173387208)
- 테스트에서 TestCoroutineDispatcher를 활용합니다. (I532b6)
버전 1.0.0-alpha10
2021년 1월 13일
androidx.compose.runtime:runtime-*:1.0.0-alpha10
이 출시되었습니다. 버전 1.0.0-alpha10에 포함된 커밋을 확인하세요.
브레이킹 체인지
내부 컴파일러 API를 재구성하면 모든
@Composable
함수가 완료된 후에 구성의 결과로 생성된 노드 변경사항을 구성의 '변경사항 적용' 단계에 일괄 적용할 수 있습니다.이는 변경사항이 적용될 때까지 내부 및 실험용 API에서 더 이상 노드를 사용할 수 없으므로 애플리케이션 코드에 영향을 줄 수 있는 동작 브레이킹 체인지입니다. 이 문제는 일반적으로 노드가 생성 및 초기화될 때까지 코드 실행을 연기하도록 이러한
SideEffect
컴포저블의 종속 항목을 사용하여 코드를 둘러싸는 방식으로 해결할 수 있습니다. (I018da)
API 변경사항
- Recomposer가 변경사항을 적용했는지 추적하는 방법을 추가했습니다. (I1b3e2)
[Abstract]ComposeView API를 확장하여 Compose 기반 뷰를 재활용할 수 있도록 하고 나중에 다시 만들 수 있도록 뷰의 구성을 폐기합니다. 하위 구성을 만들기 위해 창으로 범위가 지정된 Recomposer 및 CompositionReference를 설치 및 탐색하는 API를 추가합니다.
[Abstract]ComposeView의 구성 폐기 전략을 구성하기 위한 ViewCompositionStrategy를 추가합니다. 기본 동작은 창 분리에 사용됩니다. (I860ab)
버그 수정
- Recomposer는 이제 Recomposer의 활동과 연결된 효과의 활동을 모니터링할 수 있도록 현재 상태의 Flow를 노출합니다. (Ifb2b9)
- 이제 keyEvent.nativeKeyEvent를 통해 네이티브 keyEvent에 액세스할 수 있습니다. (I87c57, b/173086397)
버전 1.0.0-alpha09
2020년 12월 16일
androidx.compose.runtime:runtime-*:1.0.0-alpha09
가 출시되었습니다. 버전 1.0.0-alpha09에 포함된 커밋을 확인하세요.
API 변경사항
공개 API에서 SlotTable, SlotReader, SlotWriter가 삭제되었습니다. 이전에는 InternalComposeAPI로 표시되었으며 지금은 구성 모듈 내부에 있습니다.
구성 정보를 추출하는 데 사용하는 ui-tooling API를 대체할 ComposeData 및 ComposeGroup이 추가되었습니다. 이러한 API는 공개되어 있지만 ui-tooling API가 해석하는 원시 정보를 제공하므로 ui-tooling API 외부에서 사용할 수는 없습니다. (I31a9c)
Appier 클래스가 더 이상 실험적 API로 간주되지 않습니다. (Id85b0)
하향식 대신 상향식으로 트리를 간단히 빌드할 수 있도록
Applier
인터페이스가 변경되었습니다.insert()
에서insertTopDown()
으로 메서드 이름을 변경했습니다.새로운 메서드인
insertBottomUp()
이 추가되었습니다.Applier에서
insertTopDown()
또는insertBottomUp()
중 성능이 더 뛰어난 메서드를 사용하여 편집 중인 트리에 노드를 삽입합니다.LayoutNode
및View
와 같은 일부 트리는 하향식보다 상향식으로 빌드하는 것이 훨씬 더 효율적입니다. 이 변경사항이 적용되기 전에는 상향식을 구현하는 데 인서트 스택이 필요했는데, 성능을 위해 상향식 구조가 필요한 모든 applier에 이러한 스택을 복사해야 했습니다. 이번 변경사항에 따라 이제Applier
가 상향식 트리를 빌드하기 위해insertBottomUp()
을 재정의하고 하향식 트리를 빌드하기 위해insertTopDown()
을 재정의합니다. (Icbdc2)Compose는 구성 가능한 호출을 실행할 수 있는 속성 getter를 지원합니다. 이에 대한 지원은 중단되지 않지만 속성 getter를 @Composable로 선언하기 위한 문법을 변경 중입니다.
이전에는 속성 자체에 주석을 달아 이 작업을 실행했으나 이제 해당 구문이 지원 중단됩니다.
@Composable val someProperty: Int get() = ...
이제 이 작업을 위한 올바른 구문은 속성의 getter에 주석을 다는 것입니다.
val someProperty: Int @Composable get() = ...
한동안은 두 구문 모두 작동하지만 시간이 지나면 지원 중단되는 이전 구문에서 컴파일 오류가 발생합니다. (Id9197)
버그 수정
- AndroidOwner를 내부로 이동했습니다. (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode)를 내부로 이동했습니다. (Id724a)
버전 1.0.0-alpha08
2020년 12월 2일
androidx.compose.runtime:runtime-*:1.0.0-alpha08
이 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.
API 변경사항
- Compose 가이드라인과의 일관성을 확인하기 위해 컴포저블 람다 매개변수 이름 지정 및 위치에 관한 린트 검사를 추가했습니다.
또한 린트 검사와 지침에 따라 후행 람다의 이름으로
children
을 사용하는 일부 API를content
로 이전했습니다. (Iec48e) - Recomposer에서 더 이상 EmbeddingContext를 수락하지 않습니다. 필수 예약 종속성은 effectCoroutContext에서 가져옵니다. FrameManager가 지원 중단됩니다. 플랫폼 통합이 자체 전역 스냅샷 처리를 초기화해야 합니다. (I02369)
- RestorableStateHolder.withRestorableState 함수의 이름이 RestableableStateProvider로 변경되었습니다. (I66640)
버그 수정
- 접미사로
Ambient
라는 이름을 사용하는 Ambient가 지원 중단되고 다른 Ambient 및 Compose API 가이드라인에 따라 Ambient를 접두사로 사용하는 새로운 속성으로 대체됩니다. (I33440) - 이전 ui-test 모듈 및 해당 스텁을 삭제했습니다. (I3a7cb)
버전 1.0.0-alpha07
2020년 11월 11일
androidx.compose.runtime:runtime-*:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
새로운 기능
API 변경사항
@UnionType
주석이 지원 중단되었습니다. (I57cde)- 앰비언트를 제공하기 위한 대안으로 provideDefault를 추가했습니다. 이미 제공된 앰비언트 값이 없을 때만 설정될 앰비언트 값을 지정하는 데 사용할 수 있습니다. (Id6635, b/171024925)
- SideEffect 및 DisposableEffect API와 일관성을 유지하기 위해 LaunchedTask의 이름을 LaunchedEffect로 바꿨습니다. 제목 매개변수가 없는 LaunchedEffect는 권장사항을 따르도록 장려하기 위해 허용되지 않습니다. (Ifd3d4)
- 이제 Applier에는 Composer가 변경사항을 트리에 적용하기 시작/완료하면 호출되는 onBeginChanges/onEndChanges 콜백이 있습니다. 필요에 따라 리소스 관리를 일괄 처리하는 데 사용될 수도 있습니다. (Icf476)
- 이제 Recomposer에는 생성 시 CoroutineContext가 필요합니다. (Ic4610)
- 공개 API에 영향을 주지 않아야 하는 내부 SlotTable 구현을 변경했습니다. (If9828)
- 초기 값을 사용하지 않는 지원 중단된 rxjava2 어댑터를 삭제했습니다. (Idb72f)
버그 수정
- foundation.Text가 지원 중단되고 material.Text로 대체되었습니다. 테마의 값을 사용하지 않는 비독단적인 기본 텍스트 API는 androidx.compose.foundation.BasicText를 참고하세요. (If64cb)
- BaseTextField가 지원 중단되었습니다. BasicTextField를 대신 사용하세요. (I896eb)
- 여러 레이아웃 관련 기호를 androidx.compose.ui에서 androidx.compose.layout.ui로 이동했습니다. (I0fa98, b/170475424)
외부 기여
- Compose용
runtime-rxjava3
모듈을 추가했습니다.runtime-rxjava2
와 유사합니다. (I02cbf)
버전 1.0.0-alpha06
2020년 10월 28일
androidx.compose.runtime:runtime-*:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 Recomposer가 CompositionReference이자 유효한 컴포지션 상위 요소입니다. 이제 명시적 Recomposer가 필요한 위치가 줄었습니다. (I4036f)
- SideEffect에 상응하는 DisposableEffect API를 추가하여 onCommit-with-params의 역할을 채우며 필수 onDispose만 사용합니다.
- DisposableEffect 또는 LaunchedTask와 같이 리컴포지션에서 진행 중인 프로세스 또는 장기 프로세스로 데이터를 게시하는 rememberUpdatedState API를 추가했습니다.
- (Id50b9)
- MutableVector가 이제 RandomAccess를 구현합니다. (I85d73, b/170461551)
- 컴포지션에서 관리하는 객체에 컴포지션의 부작용을 적용하기 위한 SideEffect 컴포저블을 추가했습니다. SideEffect는 onCommit 컴포저블을 대체하기 위한 것입니다. (Ia77c2)
- 새로운 실험용 api RestorableStateHolder입니다. 다음에 복원된 상태로 다시 작성할 수 있도록 폐기하기 전에 하위 트리에 관해 [savedInstanceState] 및 [rememberSavedInstanceState]로 정의된 상태를 저장할 수 있습니다. (I66884, b/166586419)
버그 수정
- ComposeTestRule에서 전환을 사용 설정하여 ComposeTestRule에서 깜박이는 커서를 사용 설정하는 옵션을 삭제했습니다. (If0de3)
버전 1.0.0-alpha05
2020년 10월 14일
androidx.compose.runtime:runtime-*:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
- 입력 수정자를 정지하는 실험용 Modifier.pointerInput을 추가했습니다. (Ia77d2)
- 스크롤마다 하위 구성의 작업을 줄이는 방식으로 LazyColumn/Row의 스크롤 성능을 개선합니다. Composition 클래스에 새로운 hasInvalidations() 메서드가 추가되었습니다. Recomposer의 hasPendingChanges() 메서드 이름이 hasInvalidations()로 바뀌었습니다. (Ib2f32, b/168293643, b/167972292, b/165028371)
- 시간 경과에 따라 단일
State<T>
값을 업데이트하는 구성의 코루틴을 실행하기 위해 produceState API를 추가합니다. (Id4a57) - launchInComposition의 이름이 Compose API 가이드라인에 맞게 LaunchedTask로 바뀌었습니다. (I99a8e)
- 이제 맞춤 레이아웃에서 place() 호출 순서가 하위 요소의 그리기 순서를 정의합니다. (Ibc9f6)
버전 1.0.0-alpha04
2020년 10월 1일
androidx.compose.runtime:runtime-*:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 더 이상 유효하지 않을 때 레이아웃과 그림 관찰 범위를 수집할 수 있도록 OwnerScope을 추가했습니다. (Ic4cf8)
- 다른 상태 객체를 읽고 그 상태 객체에서 파생될 수 있는 계산을 바탕으로 상태 객체를 만들도록 derivedStateOf API를 추가했습니다. (If758b)
- SnapshotStateObserver용 TestOnly API를 추가했습니다. (I6e2a9)
버그 수정
- foundation.Box가 지원 중단되었습니다. 대신 foundation.layout.Box를 사용하세요. (Ie5950, b/167680279)
버전 1.0.0-alpha03
2020년 9월 16일
androidx.compose.runtime:runtime-*:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
CompositionCoroutineScope
은 더 이상MonotonicFrameClock
을 구현하지 않습니다.withFrameNanos
의 호출자는 최상위 함수를 명시적으로 가져와야 합니다. (Icb642, b/166778123)
버그 수정
onNode
또는waitForIdle
과 같은 전역 테스트 함수는 이제 지원 중단되었습니다. ComposeTestRule에 정의된 새로운 함수로 이전하세요. (I7f45a)launchInComposition
에서는 더 이상 전달되지 않은 코루틴을 실행하지 않습니다. (Ief6af, b/16648600)
버전 1.0.0-alpha02
2020년 9월 2일
androidx.compose.runtime:runtime-*:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- 스냅샷 데이터 변경사항을 사용하고 생성하기 위해
snapshotFlow
및withMutableSnapshot
API가 추가됩니다. (I3e722) 구성 가능한 함수의 호출 규칙이 변경되었습니다. 바이너리 브레이킹 체인지입니다. 이 버전의 Compose 컴파일러 플러그인을 사용하려면 모든 라이브러리를 다시 컴파일해야 합니다.
이 변경사항은 소스 수준의 브레이킹 체인지를 만들지 않습니다. 명시적인 선택이 있는 컴파일러 API만 변경되었기 때문입니다. (I7afd2, b/158123185)
EmbeddingContext에서 일정 예약 메서드가 삭제되었습니다. (I7b9be)
onPreCommit이 지원 중단되었습니다. 이제 onCommit에 onPreCommit의 동작이 있습니다.
이제 onCommit과 onActive가 다음 choreographer 프레임의 시작 부분이 아닌 구성 변경사항이 커밋된 동일한 choreographer 프레임에서 실행됩니다. (I70403)
버전 1.0.0-alpha01
2020년 8월 26일
androidx.compose.runtime:runtime-*:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
버전 0.1.0-dev
버전 0.1.0-dev17
2020년 8월 19일
androidx.compose.runtime:runtime-*:0.1.0-dev17
이 출시되었습니다. 버전 0.1.0-dev17에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 맞춤 emit에서 하나 이상의 setter를 건너뛰고 emit로부터 독립적으로 재구성할 수 있음을 선언할 수 있습니다. (Ibbd13)
지원 중단된 FrameManager 호출을 삭제했습니다.
내부 Compose API를 변경하여
mutableStateof()
와 같은 상태 객체를 추적하기 위한 오버헤드 양을 줄였습니다. (I80ba6)state { ... }
컴포저블이 이제 지원 중단되고 명확성을 위해 명시적remember { mutableStateOf(...) }
호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한by mutableStateOf()
패턴과 일치합니다. (Ia5727)Flow.collectAsState는 이제 Dispatchers.Main으로 기본 설정되지 않고 구성 자체에서 기본 디스패처를 결정합니다. (I9c1d9)
상태를 저장하는 요소가 for 루프 내에서 사용되었을 때 비정상 종료가 발생하는 문제가 수정되었습니다. 이제 savedInstanceState()에서 동일한 키를 가질 수 있으며, UiSavedStateRegistry의 API가 이제 이 새로운 요구사항에 맞게 조정됩니다. (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
버그 수정
emitView
가 지원 중단되었습니다. Compose 내에서 뷰를 내보내기 위해서는 가능하면AndroidView
를 대신 사용합니다. View 및 ViewGroup을 직접 구성하는 것은 AndroidView를 사용하여 이를 달성할 수 있는 경우에 구성 트리에 남아있지 않는 한 향후에는 지원되지 않습니다. (I29b1e, b/163871221)
버전 0.1.0-dev16
2020년 8월 5일
androidx.compose.runtime:runtime-*:0.1.0-dev16
이 출시되었습니다. 버전 0.1.0-dev16에 포함된 커밋을 확인하세요.
API 변경사항
mutableStateOf()
,ambientOf()
및savedInstanceStateOf()
의 기본 변형 정책이referentialEqualityPolicy()
대신structuralEqualityPolicy()
로 변경되었습니다.mutableStateOf()
인스턴스에 할당된 새 값이 변경으로 간주되는지 여부를 결정하는 기본값은 이제 기본적으로===
대신==
를 사용하는 것입니다.https://kotlinlang.org/docs/reference/equality.html을 참조하세요.
ambientOf()
및savedInstanceStateOf()
는 구현에서mutableStateOf()
를 사용하므로mutableStateOf()
와 일치하도록 변경되었습니다.구조적 동등성을 사용하여 개발자 기대에 더욱 부응하게 되었습니다.
예:
val state = mutableStateOf(1f)
그 뒤에 다음이 나올 경우
state.value = 1f
더 이상
state
변경으로 간주되지 않으며, 구성 중state
사용을 더 이상 재구성할 필요가 없습니다.이는 브레이킹 체인지이지만 대부분의 경우(예:
equals()
를 재정의하지 않는 클래스를 사용할 때) 애플리케이션에 현저한 영향을 주지는 않습니다.data
클래스와 같이equals()
를 재정의하는 클래스는 성능이 저하될 수 있습니다.equals()
메서드가mutableStateOf()
에 할당될 때 이제 기본적으로 호출되기 때문입니다.mutableStateOf()
,ambientOf()
및savedInstanceStateOf()
호출에 정책 매개변수policy = referentialEqualityPolicy()
를 추가하여 이전 동작을 복원할 수 있습니다. (Ic21a7)Row
및Column
은 이제 인라인 함수이며 이러한 함수를 사용하는 오버헤드가 상당히 감소합니다. (I75c10)
버그 수정
- setViewContent는 지원 중단되었습니다. 대신 setContent를 사용해야 합니다. (I7e497, b/160335130)
MonotonicFrameClock을 AnimationClockObservable로 사용할 수 있게 하는 MonotonicFrameAnimationClock을 추가하여 새로운 코루틴 기반 클록과 여전히 이전 콜백 기반 클록을 사용하는 API 간의 간극을 메웠습니다.
ManualAnimationClock에 상응하는 MonotonicFrameClock은 이제 ManualFrameClock입니다. (I111c7, b/161247083)
Modifier.stateDraggable이 완전히 재작업되고 Modifier.swipeable로 이름이 바뀌었습니다. 새로운 SwipeableState 클래스가 도입되었으며 DrawerState 및 BottomDrawerState가 이 클래스에서 상속하도록 리팩터링되었습니다. [Modal/Bottom]DrawerLayout은 더 이상 onStateChange 매개변수를 사용하지 않습니다. (I72332, b/148023068)
Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'은 더 강력한 순서 지정 신호가 있지만, 체인을 끊고 읽기가 더 어려운
Modifier.padding().background() + anotherModifier
입력을 금지하기도 합니다. (Iedd58, b/161529964)SubcomposeLayout이 추가되었습니다. 이는 나중에 하위 트리 구성에 관한 측정 중에만 제공되는 일부 값을 사용하려는 경우 측정 도중에 하위 요소를 구성할 수 있는 낮은 수준의 프리미티브입니다. 예를 들어 WithConstraints는 SubcomposeLayout을 사용하여 구현되지 않습니다. (I25cc8)
Material FilledTextField는 TextField로 이름이 바뀌었으며 기본 TextField는 BaseTextField로 이름이 바뀌어 원하는 가장 간단한 API를 쉽게 찾고 사용할 수 있습니다. (Ia6242, b/155482676)
Modifier.drawBackground 이름을 Modifier.background로 바꿨습니다. (I13677)
버전 0.1.0-dev15
2020년 7월 22일
androidx.compose.runtime:runtime-*:0.1.0-dev15
가 출시되었습니다. 버전 0.1.0-dev15에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- Compose의
0.1.0-dev15
버전을 사용하려면 위의 종속 항목 선언에 표시된 새로운 코드 스니펫에 따라 종속 항목을 업데이트해야 합니다.
API 변경사항
이제
@Model
주석이 지원 중단됩니다. state 및 mutableStateOf를 대안으로 사용합니다. 이번 지원 중단은 여러 신중한 논의 끝에 결정되었습니다.근거
근거에는 다음이 포함되지만 이에 국한되지는 않습니다.
- 교육이 필요한 API 노출 영역 및 개념이 감소합니다.
- 다른 유사한 툴킷(Swift UI, React, Flutter)과 더욱 원활하게 호환됩니다.
- 되돌릴 수 있는 결정입니다. 나중에 언제든지
@Model
을 가져올 수 있습니다. @Model
을 처리해야 할 작업으로 구성하는 데 있어서 발생하는 특수한 사용 및 답변하기 어려운 질문을 삭제합니다.@Model
데이터 클래스, 등호, 해시코드 등- 일부 속성은 '관찰'되고 나머지는 관찰되지 않게 하려면 어떻게 해야 하나요?
- 관찰에서 사용할 구조 동등성과 참조 동등성을 각각 지정하려면 어떻게 해야 하나요?
- 시스템에서 '매직'을 줄입니다. 즉, 시스템이 실제보다 더 영리하다고(예를 들어, 목록을 식별하는 방법을 알고 있다고) 가정할 가능성을 줄입니다.
- 관찰의 세부사항을 더 직관적으로 파악할 수 있습니다.
- 클래스의 변수에서 속성으로의 리팩터링 가능성을 개선합니다.
- 잠재적으로 State별로 수동 최적화할 가능성이 생깁니다.
- 나머지 생태계와 더 원활하게 호환되고 불변 또는 '변경 가능한 상태를 허용'하는 데 모호성을 줄입니다.
이전 참고사항
@Model
의 거의 모든 기존 사용법은 두 가지 방법 중 하나로 상당히 쉽게 변환됩니다. 아래 예에서는 속성이 두 개인@Model
클래스가 호환 가능하게 사용됨을 보여줍니다.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
대안 1:
State<OriginalClass>
사용 및 사본 생성이 접근 방식은 Kotlin의 데이터 클래스를 사용하면 더 쉽습니다. 기본적으로 모든 이전
var
속성을 데이터 클래스의val
속성으로 만들고remember
대신state
를 사용한 다음 데이터 클래스copy(...)
편의 메서드를 사용하여 상태 값을 원본을 복제한 사본에 할당합니다.데이터 클래스의 유일한 변형이
State
인스턴스가 만들어진 동일한 범위에서 실행된 경우에만 이 접근 방식이 효과가 있다는 데 유의해야 합니다. 데이터 클래스가 사용 범위 밖에서 내부적으로 자신을 변형하고 이를 관찰하는 데 의존하고 있다면 다음 접근 방식을 사용하는 것이 좋습니다.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
대안 2: mutableStateOf 및 속성 위임 사용
이 접근 방식은 Kotlin의 속성 위임과 개발자가 MutableState 인스턴스를 구성 밖에서 만들도록 허용하는
mutableStateOf
API를 사용하면 더 쉽습니다. 기본적으로 원래 클래스의 모든var
속성을 속성 위임으로mutableStateOf
가 있는var
속성으로 교체합니다. 이렇게 하면 클래스 사용법이 전혀 변경되지 않고 클래스의 내부 구현만 변경되는 이점이 있습니다. 그러나 각 속성이 이제 개별적으로 관찰/구독되므로 동작은 원래 예와 완전히 동일하지는 않습니다. 따라서 리팩터링 후에 확인하는 재구성 범위가 더 좁아질 수 있는데 이는 좋은 현상입니다.class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Compose 컴파일러의 코드 생성 전략을 변경했습니다. 변경하기 전에는 Compose 컴파일러에서 호출을 구성 가능한 함수로 변환했습니다. 이번 변경으로 이제 구성 가능한 함수의 본문은 변환하고 호출 사이트의 대부분은 변경하지 않고 그대로 둡니다.
이는 Compose 런타임과 통신하는 로직이 대부분 호출 사이트가 아니라 함수 본문의 시작 부분에서 발생함을 의미합니다.
이번 변경은 모든 Compose 사용에서 소스와 호환됩니다. 대부분의 Compose 사용자는 이번 변경으로 인해 어떤 코드도 업데이트할 필요가 없습니다.
이 작업을 지원하기 위해 모든 구성 가능한 함수의 JVM 서명이 변경되었습니다. 단일 매개변수를 허용하는 구성 가능한 함수는 3개의 매개변수를 허용하는 함수로 변환됩니다. 추가 매개변수는 '키' 정수인 컴포저, 호출을 통한 메타데이터 전파에 사용되는 비트마스크 정수입니다.
이제 Compose는 기본 인수를 구성 가능한 함수로도 변환합니다. 함수 자체의 추가 합성으로 인한 기본 오버로드 없이 기본 인수를 변환하므로 이러한 변경으로 인해 정의되는 함수의 수가 줄어듭니다.
이로 인해 알려진 의도된 동작 변경사항은 다음과 같습니다.
- 일부 호출이 이전에는 건너뛰지 않던 곳을 건너뜁니다.
- 이제 기본 인수 표현식의 구성 가능한 표현식이 올바르게 작성 및 처리됩니다.
이 작업에는 다음과 같은 최적화가 포함되어 있습니다. 1. 매개변수 비교 결과는 호출 그래프를 통해 다른 구성 가능한 함수로 전파됩니다. 이렇게 하면 런타임 시 비교 작업이 적게 발생하고 슬롯 표 크기가 줄며 이전에는 건너뛰지 않던 구성 가능한 함수를 더 많이 건너뜁니다. 2. 컴파일 시간에 '정적'이라고 판단된 매개변수는 더 이상 런타임에 비교되거나 저장되지 않습니다. 따라서 비교 횟수와 슬롯 표 크기가 줄어듭니다. 3. 함수 본문의 제어 흐름 구조는 생성되는 그룹 수를 최소화하는 데 사용되므로 슬롯 표 크기가 줄고 런타임 동안 작업도 줄어듭니다. 4. 함수의 사용되지 않은 전달 및 수신자 매개변수는 함수의 본문 안에서 사용되지 않으면 함수의 건너뛰기 가능성을 판단하는 데 포함되지 않습니다.
대부분의 브레이킹 체인지는 다음과 같이 컴파일러가 직접 타겟팅하는 API로 인해 발생하며 Compose의 일반적인 사용에는 영향을 미치지 않습니다. 1. Composer::startExpr이 삭제되었습니다. 2. Composer::endExpr이 삭제되었습니다. 3. Composer::call이 지원 중단되었습니다. 4.
key
의 non-varargs 오버로드가 삭제되었습니다. 앞으로는vararg
버전을 사용하세요. 5. Pivotal 주석이 지원 중단되었습니다. 대신key
를 사용하세요. 6. ScopeUpdateScope::updateScope가 함수 1이 아닌 함수 3을 예상하도록 변경되었습니다. 7. restartableFunction 및 restartableFunctionN이 추가 컴파일 시간 매개변수를 포함하도록 업데이트되었습니다. (I60756, b/143464846)sortWith와 removeRange가 MutableVector에 추가되었습니다. (Icccf7)
CompositionLifecycleObserver의 기본 메서드 구현이 추가되었습니다. (I24289)
이제 Applier에 구성을 폐기하기 위한 clear() 메서드가 필요합니다. (Ibe697)
전체 목록을 복사하지 않고도 asMutableList()를 공개 API에 전달할 수 있도록 asMutableList()를 MutableVector에 추가했습니다. (I298df)
이벤트에 대한 응답으로 작업을 실행할 때 컴포지션에서 관리되는 CoroutineScope를 가져올 수 있도록 rememberCoroutineScope()를 추가했습니다. (I0e264)
MutableVector는 어떠한 표준 Collection 인터페이스도 구현하지 않는 새로운 컬렉션입니다. 이 컬렉션은 여타 요구사항보다 높은 속도를 제공하며 내부 구현에만 사용하도록 설계되었습니다. (I8ebd6)
Compose에 필요한 Kotlin 버전에서 문제가 발생하지 않도록
StableMutableList
및StableMutableMap
을 일시적으로 삭제했습니다. 이러한 인터페이스는 문제가 없는 Kotlin 버전으로 Compose가 업데이트되면 다시 도입될 예정입니다.SnapshotStateList
및SnapshotStateMap
이 이제 공개되지만StableMutableList
및StableMutableMap
이 복원되면 지원이 중단될 예정입니다. (Ia7769)애니메이션 타이밍을 위한 최상위 withFrameNanos 함수가 추가됩니다. (Ie34c5)
@Untracked 주석이 지원 중단되었습니다. @ComposableContract(tracked=false)로 대체했습니다. (Id211e)
RestartableFunction 및 관련 API의 이름이 ComposableLambda 등으로 변경되었습니다. 이러한 API는 컴파일러를 통해서만 타겟팅되었으므로 대개 소스 수준 호환성에는 영향을 미치지 않습니다. 이름 변경의 주된 이유는 이 클래스가 스택 트레이스에 표시될 때 더 나은 항목과 통신하도록 하기 위함입니다. (I7eb25)
@Composable 주석이 클래스에서 더 이상 유효하지 않습니다. (Ia5f02)
Ambient<T>
는 이제 @Immutable이 아닌 @Stable입니다. (I0b4bb)이 변경 전에 Compose 컴파일러 플러그인은 @Composable 함수 내에 있는 생성자 호출(있는 경우)을 특별한 방식으로 가로챘습니다. (I5205a, b/158123804)
Recompose 컴포저블은 더 이상 유용한 추상화가 아닙니다. 대부분의 재구성은 MutableState 할당의 결과로 발생해야 합니다. 그 외의 경우에는
invalidate
함수를 사용하여 현재 범위의 재구성을 트리거하는 것이 좋습니다. (Ifc992)관찰은 더 이상 유용한 추상화가 아닙니다. 관찰을 복제해야 한다면 구성 가능한 람다 매개변수를 실행하는 구성 가능한 함수를 만들기만 하면 관찰의 구현을 복제할 수 있습니다. 예:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct가 지원 중단되고 @ComposableContract(restartable=false)로 대체되었습니다. (If4708)
최근 도입된 StateFlow를 위한 어댑터가 추가되었습니다. StateFlow는 초깃값을 미리 채워 반환된 State가 null이 허용되지 않는 항목이 되도록 합니다. (I61dd8, b/156233789)
흐름용 어댑터가 추가되었습니다. 사용 예: val value by flow.collectAsState() (If2198, b/153375923)
[변경 가능] 주 속성 위임 연산자가 Kotlin 1.4 속성 위임 최적화를 지원하기 위해 확장 프로그램으로 이동했습니다.
by state { ... }
또는by mutableStateOf(...)
를 계속 사용하려면 호출자가 가져오기를 추가해야 합니다. (I5312c)androidx.compose.ViewComposer가 androidx.ui.node.UiComposer로 이동했습니다. androidx.compose.Emittable은 삭제되었습니다. 이 항목은 ComponentNode와 중복되었습니다. androidx.compose.ViewAdapters는 삭제되었습니다. 더 이상 지원되지 않는 사용 사례입니다. Compose.composeInto가 지원 중단되었습니다. 대신
setContent
또는setViewContent
를 사용하세요. Compose.disposeComposition이 지원 중단되었습니다. 대신setContent
에서 반환되는Composition
에서dispose
메서드를 사용하세요. androidx.compose.Compose.subcomposeInto는 androidx.ui.core.subcomposeInto로 이동했습니다. ComponentNode#emitInsertAt의 이름이 ComponentNode#insertAt으로 바뀌었습니다. ComponentNode#emitRemoveAt의 이름이 ComponentNode#removeAt으로 바뀌었습니다. ComponentNode#emitMode의 이름이 ComponentNode#move로 바뀌었습니다. (Idef00)ComposeFlags.COMPOSER_PARAM
플래그를true
로 업데이트했습니다. 이는 작성 플러그인의 코드 생성 전략을 변경합니다. 높은 수준에서 이는 @Composable 함수가 추가 합성 매개변수와 함께 생성되어 후속 @Composable 호출로 전달되도록 합니다. 이는 실행을 적절히 관리하기 위한 런타임을 확보하기 위함입니다. 그러나 이 기능은 중요한 바이너리 브레이킹 체인지이므로 승인된 모든 Compose 사용 시 소스 수준의 호환성을 유지해야 합니다. (I7971c)ambients API에 브레이킹 체인지가 있습니다. 자세한 내용은 로그와
Ambient<T>
문서를 참고하세요. (I4c7ee, b/143769776)LiveData용 어댑터가 있는 새로운 아티팩트인 ui-livedata를 추가했습니다. 사용 예: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
명시적 초기 값이 없는 Rx 어댑터가 지원이 중단되었습니다. null을 사용하는 것이 항상 최적의 기본값은 아닙니다. 예를 들어 List가 있는 경우 emptyList() 또는 기타 합당한 기본값으로 시작하는 것이 더 좋습니다. (I00025, b/161348384)
RxJava2용 어댑터가 있는 새 아티팩트인 ui-rxjava2를 추가했습니다. 사용 예: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
이제 null을 허용하는 유형과 함께
savedInstanceState()
를 사용할 수 있습니다. (I6847f, b/153532190)맞춤 Saver 객체를 더 쉽게 작성할 수 있도록 새 listSaver() 및 mapSaver()가 추가되었습니다. (I8cf68, b/152331508)
새 함수 savedInstanceState()와 rememberSavedInstanceState()는 state() 및 remember()와 유사하지만 저장된 인스턴스 상태 지원이 내장되어 있습니다. (If1987, b/152025209)
버그 수정
runOnIdleCompose
이름을runOnIdle
로 바꿨습니다. (I83607)- LayoutNode 실험용 API를 제작했습니다. (I4f2e9)
- androidx.ui.foundation.TextFieldValue 및 androidx.ui.input.EditorValue는 지원 중단되었습니다. 이 유형을 사용하는 TextField, FilledTextField, CoreTextField 컴포저블도 지원 중단되었습니다. 대신 androidx.ui.input.TextFieldValue를 사용하세요. (I4066d, b/155211005)
- 지원 중단된 DrawBackground API를 삭제하고 수정자의 drawBackground 확장 API로 대체했습니다. 코드 경로를 줄이고 수정자를 구성의 일부로 생성할 필요가 없도록 색상, 브러시 및 페인트 drawBackground 구현을 리팩터링했습니다. (I0343a)
- 캔버스를 노출하여 CanvasScope를 대신 노출하는 상위 수준 Compose API를 업데이트했습니다. 따라서 소비자가 자체 Paint 객체를 유지하지 않아도 됩니다. 캔버스에 계속 액세스해야 하는 소비자의 경우 콜백을 제공하여 기본 캔버스에서 그리기 명령어를 실행하는 drawCanvas 확장 메서드를 사용하면 됩니다. (I80afd)
- 람다 API 후행 WithConstraints가 변경되었습니다. 이제 두 매개변수 대신 제약 조건 및 layoutDirection 외에도 Dp에서 minWidth, maxWidth, minHeight 및 maxHeight 속성을 제공하는 수신기 범위가 있습니다. (I91b9a, b/149979702)
- 대칭 패딩 수정자를 추가했습니다. (I39840)
- 임의의 Alignment가 아닌 세로 또는 가로 Alignment를 예상하도록 wrapContentWidth 및 wrapContentHeight를 업데이트했습니다. 중력 수정자가 세로 또는 가로 Alignment를 허용하도록 업데이트되었습니다. 맞춤 연속 Alignment를 지원하기 위해 Row, Column, Stack이 업데이트되었습니다. (Ib0728)
- ui-text 모듈 이름이 ui-text-core로 바뀌었습니다. (I57dec)
- 다음과 같이 DrawModifier API가 개선됩니다.
- 수신기 범위를 draw() ContentDrawScope로 설정했습니다.
- draw()의 모든 매개변수를 삭제했습니다.
- DrawScope는 이전 CanvasScope와 동일한 인터페이스를 사용합니다.
- ContentDrawScope에 drawContent() 메서드가 있습니다. (Ibaced, b/152919067)
- ColoredRect가 지원 중단되었습니다. 대신
Box(Modifier.preferredSize(width, height).drawBackground(color))
를 사용하세요. (I499fa, b/152753731) - 수정자와 연산자를 팩토리 확장 함수로 대체했습니다. (I225e4)
- 행 및 열 외부에서 RowScope 및 ColumnScope 멤버에 액세스할 수 있습니다. (I3a641)
- LayoutFlexible을 LayoutWeight로 이름을 변경했습니다. 채우기 위해 긴 매개변수의 이름을 변경했습니다. (If4738)
- withConstraints에 LayoutDirection 매개변수가 있습니다. (I6d6f7)
- 자연스럽게 기억할 수 있도록background의 이름을 DrawBackground로 변경했습니다. (Ia0bd3)
- ButtonStyle을 고유 함수로 대체했으며 텍스트(문자열) 오버로드를 삭제했습니다. 사용량 정보는 업데이트된 샘플을 참고하세요. (If63ab, b/146478620, b/146482131)
- 이제
runOnIdleCompose
및runOnUiThread
는 ComposeTestRule의 메서드가 아닌 전역 함수입니다. (Icbe8f)
외부 기여
- Compose Runtime 포팅 레이어에서 Looper, Handle 같은 불필요한 API를 삭제했습니다. (I6847d)
- 초깃값이 없는
Flow<T>.collectAsState()
가 지원 중단되었습니다. 대신StateFlow<T>
를 사용하거나 명시적인 초기 값을 전달하세요. (I63f98, b/157674865)