Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(すべての Compose パッケージについては、API リファレンス ドキュメントをご覧ください)。
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2024 年 8 月 7 日 | 1.6.8 | - | 1.7.0-beta07 | - |
構造
Compose は、androidx
内の 7 つの Maven Group ID を組み合わせたものです。各グループにはそれぞれの目的に応じて Compose の機能のサブセットが含まれており、それぞれに固有のリリースノートがあります。
次の表に、各グループの説明と、それぞれのリリースノートのリンクを示します。
グループ | 説明 |
---|---|
compose.animation | Jetpack Compose アプリ内でアニメーションを作成して、ユーザー エクスペリエンスを高めます。 |
compose.compiler | @Composable 関数を変換し、Kotlin コンパイラ プラグインで最適化を有効にします。 |
compose.foundation | すぐに使用できるビルディング ブロックで Jetpack Compose アプリを作成し、基盤を拡張して独自のデザイン システム要素を構築します。 |
compose.material | すぐに使用できるマテリアル デザイン コンポーネントで Jetpack Compose UI を構築します。Compose の上位レベルのエントリ ポイントであり、www.material.io のガイドラインと適合するコンポーネントを提供するように設計されています。 |
compose.material3 | マテリアル デザインの進化版であるマテリアル デザイン 3 コンポーネントで Jetpack Compose UI を構築します。マテリアル 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.6.8" implementation "androidx.compose.runtime:runtime-livedata:1.6.8" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.8") implementation("androidx.compose.runtime:runtime-livedata:1.6.8") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
Runtime Tracing バージョン 1.0
バージョン 1.0.0-beta01
2023 年 11 月 29 日
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha05
2023 年 11 月 15 日
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
がリリースされました。バージョン 1.0.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- サポートされている最小の安定版(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 に含まれる commit については、こちらをご覧ください。
新機能
- 最新バージョンの Benchmark および Tracing Perfetto と互換性があるため、アプリ起動時(コールド スタート)時の Composition Tracing のサポートが可能にAndroidX Benchmark と Android Studio(Hedgehog ベータ版 2 以降)でリリースします。
API の変更
androidx.tracing.perfetto.Trace
の名前をandroidx.tracing.perfetto.PerfettoSdkTrace
に変更しました(I44af8)。- Tracing 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 に含まれる commit については、こちらをご覧ください。
新機能
- 機能の変更はありません。ダウンストリーム依存関係
androidx.tracing:tracing-perfetto*
でさまざまなパフォーマンス最適化が行われています。
バージョン 1.0.0-alpha01
2022 年 9 月 7 日
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
androidx.compose.runtime:runtime-tracing
は、Compose アプリで拡張トレースを実行可能なツール(近日リリース予定)が存在する場合に利用できるライブラリです。このライブラリの初回リリースは 1.0.0-alpha01 です。
バージョン 1.7
バージョン 1.7.0-beta07
2024 年 8 月 7 日
androidx.compose.runtime:runtime-*:1.7.0-beta07
がリリースされました。バージョン 1.7.0-beta07 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta06
2024 年 7 月 24 日
androidx.compose.runtime:runtime-*:1.7.0-beta06
がリリースされました。バージョン 1.7.0-beta06 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta05
2024 年 7 月 10 日
androidx.compose.runtime:runtime-*:1.7.0-beta05
がリリースされました。バージョン 1.7.0-beta05 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta04
2024 年 6 月 26 日
androidx.compose.runtime:runtime-*:1.7.0-beta04
がリリースされました。バージョン 1.7.0-beta04 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta03
2024 年 6 月 12 日
androidx.compose.runtime:runtime-*:1.7.0-beta03
がリリースされました。バージョン 1.7.0-beta03 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta02
2024 年 5 月 29 日
androidx.compose.runtime:runtime-*:1.7.0-beta02
がリリースされました。バージョン 1.7.0-beta02 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-beta01
2024 年 5 月 14 日
androidx.compose.runtime:runtime-*:1.7.0-beta01
がリリースされました。バージョン 1.7.0-beta01 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-alpha08
2024 年 5 月 1 日
androidx.compose.runtime:runtime-*:1.7.0-alpha08
がリリースされました。バージョン 1.7.0-alpha08 に含まれる commit については、こちらをご覧ください。
バージョン 1.7.0-alpha07
2024 年 4 月 17 日
androidx.compose.runtime:runtime-*:1.7.0-alpha07
がリリースされました。バージョン 1.7.0-alpha07 に含まれる commit については、こちらをご覧ください。
新機能
- デフォルトで
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 に含まれる commit については、こちらをご覧ください。
バグの修正
バージョン 1.7.0-alpha05
2024 年 3 月 20 日
androidx.compose.runtime:runtime-*:1.7.0-alpha05
がリリースされました。バージョン 1.7.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- 無効化されたコンポジションの遅れた変更を消去(5950bc)
バージョン 1.7.0-alpha04
2024 年 3 月 6 日
androidx.compose.runtime:runtime-*:1.7.0-alpha04
がリリースされました。バージョン 1.7.0-alpha04 に含まれる commit については、こちらをご覧ください。
パフォーマンスの改善
- 派生状態の評価ごとに
Snapshot.current
を 1 回呼び出し(ee7daf) - コンポジション内の観測項目ごとに
currentRecord
を 1 回読み取ります(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 に含まれる commit については、こちらをご覧ください。
API の変更
- 変更の検出を改善するために置換グループを導入(0941b5)
パフォーマンスの改善
- 変更検出時のメモリ割り当てを改善(53e7fd)
- Composer のメモリリークを修正(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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 同じフレームのサブコンポジション内のコンポーズ可能なラムダを無効にします。(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 に含まれる commit については、こちらをご覧ください。
パフォーマンスの最適化
バグの修正
- 組み込み関数 remember でデフォルト パラメータ meta に対応(096665)
- より多くのケースで
currentCompoundHashKey
を一意にする(d4a872) - インライン関数呼び出しの終了時にグループを認識(2a90fc)
バージョン 1.6
バージョン 1.6.8
2024 年 6 月 12 日
androidx.compose.runtime:runtime-*:1.6.8
がリリースされました。バージョン 1.6.8 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.7
2024 年 5 月 1 日
androidx.compose.runtime:runtime-*:1.6.7
がリリースされました。バージョン 1.6.7 に含まれる commit については、こちらをご覧ください。
バージョン 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 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.4
2024 年 3 月 20 日
androidx.compose.runtime:runtime-*:1.6.4
がリリースされました。バージョン 1.6.4 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.3
2024 年 3 月 6 日
androidx.compose.runtime:runtime-*:1.6.3
がリリースされました。バージョン 1.6.3 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.2
2024 年 2 月 21 日
androidx.compose.runtime:runtime-*:1.6.2
がリリースされました。バージョン 1.6.2 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.1
2024 年 2 月 7 日
androidx.compose.runtime:runtime-*:1.6.1
がリリースされました。バージョン 1.6.1 に含まれる commit については、こちらをご覧ください。
バグの修正
バージョン 1.6.0
2024 年 1 月 24 日
androidx.compose.runtime:runtime-*:1.6.0
がリリースされました。バージョン 1.6.0 に含まれる commit については、こちらをご覧ください。
1.5.0 以降の重要な変更
新機能
- 再コンポーズ ループ中に取り込まれる例外を再スローします。(4dff9a)
パフォーマンスの最適化
- スナップショット状態の変更の記録を最適化(28c3fe)
rememberSaveable
を最適化(f01d79)- 変更が記録されるまで派生状態の再読み取りを延期。(f38099)
- コンポジションのローカル値の指定を改善(a337ea)
バグの修正
- スロット テーブルのメモリリークを修正(73fcfe)
- 削除されるサブコンポジションの再コンポーズをスキップします。(Ieeb99、b/254645321)。
RememberObserver
ライフサイクルは、restore 計算に保存された場合にのみトリガーされます。(f6b4dc)。$dirty
のキャプチャをインライン ラムダに制限しました。(acfca0)- 移動可能なコンテンツが間違った楽曲ローカルを受け取ることがある問題を修正。(035cd6)。
バージョン 1.6.0-rc01
2024 年 1 月 10 日
androidx.compose.runtime:runtime-*:1.6.0-rc01
がリリースされました。バージョン 1.6.0-rc01 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.0-beta03
2023 年 12 月 13 日
androidx.compose.runtime:runtime-*:1.6.0-beta03
がリリースされました。バージョン 1.6.0-beta03 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.0-beta02
2023 年 11 月 29 日
androidx.compose.runtime:runtime-*:1.6.0-beta02
がリリースされました。バージョン 1.6.0-beta02 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.0-beta01
2023 年 11 月 15 日
androidx.compose.runtime:runtime-*:1.6.0-beta01
がリリースされました。バージョン 1.6.0-beta01 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バグの修正
RememberObserver
ライフサイクルは、restore 計算に保存された場合にのみトリガーされます。(f6b4dc)。- 無効化リストの並べ替えでの割り当てを改善。(954d63)。
SnapshotStateObserver
で新しい未割り当ての地図を使用。(4303ce)。- コンポジションが無効化されたときに無効化を明確にする。(e001be)。
バージョン 1.6.0-alpha07
2023 年 10 月 4 日
androidx.compose.runtime:runtime-*:1.6.0-alpha07
がリリースされました。バージョン 1.6.0-alpha07 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.0-alpha05
2023 年 9 月 6 日
androidx.compose.runtime:runtime-*:1.6.0-alpha05
がリリースされました。バージョン 1.6.0-alpha05 に含まれる commit については、こちらをご覧ください。
バージョン 1.6.0-alpha04
2023 年 8 月 23 日
androidx.compose.runtime:runtime-*:1.6.0-alpha04
がリリースされました。バージョン 1.6.0-alpha04 に含まれる commit については、こちらをご覧ください。
新機能
- 再コンポーズ ループ中に取り込まれる例外を再スローします。(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 に含まれる commit については、こちらをご覧ください。
バグの修正
バージョン 1.6.0-alpha02
2023 年 7 月 26 日
androidx.compose.runtime:runtime-*:1.6.0-alpha02
がリリースされました。バージョン 1.6.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能とパフォーマンスの強化
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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 削除されるサブコンポジションの再コンポーズをスキップします。(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 に含まれる commit については、こちらをご覧ください。
バージョン 1.5.3
2023 年 10 月 4 日
androidx.compose.runtime:runtime-*:1.5.3
がリリースされました。バージョン 1.5.3 に含まれる commit については、こちらをご覧ください。
バージョン 1.5.2
2023 年 9 月 27 日
androidx.compose.runtime:runtime-*:1.5.2
がリリースされました。バージョン 1.5.2 に含まれる commit については、こちらをご覧ください。
バージョン 1.5.1
2023 年 9 月 6 日
androidx.compose.runtime:runtime-*:1.5.1
がリリースされました。バージョン 1.5.1 に含まれる commit については、こちらをご覧ください。
バージョン 1.5.0
2023 年 8 月 9 日
androidx.compose.runtime:runtime-*:1.5.0
がリリースされました。バージョン 1.5.0 に含まれる commit については、こちらをご覧ください。
API の変更
- 再コンポーズ、カラー アニメーション、
AndroidComposeView
の割り当てを削除しました。(Ib2bfa)。 - 状態を作成し、
remember
呼び出しでラップする必要がある関数をマークするための@StateFactoryMarker
アノテーションを追加しました。(I64550)。 - State と
MutableState
のプリミティブ バージョンを追加しました(fb3d89) Snapshot.isApplyObserverNotificationPending
を追加しました(I672a5)。State
API のプリミティブ バージョンを追加し、自動ボックス化によるペナルティを発生させることなく、Int、Long、Float、Double の値をState
オブジェクトで追跡できるようにしました。これらを使用するには、新しいファクトリ メソッドmutableIntState(Int)
、mutableFloatStateOf(Float)
などを使用します。(I48e43)。
バグの修正
- 削除されるサブコンポジションの再コンポーズをスキップします。(Ieeb99、b/254645321)。
ComposerImpl
でスナップショット参照を保持しない(0206f7)- 合成を 2 回適用しない(f5791b)
- 初期化されていない派生状態値が無効になるようにしました。(aa2a92)
- コンポジションの破棄中に
onEndChanges
を呼び出します。(62cc8c)。 - コンテンツのサブコンポジションへの移動を修正(4beb41)
- 潜在的なデッドロックを修正(c1a425、8edce0)
- Android ウィンドウ用に作成された recomposer は、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)
- グループの実現時に正しいスコープの Composer を使用(9a5e5b6)
IdentityArraySet
を使用してスナップショットの無効化を保存(7f60cca)- スナップショット監視の割り当てを減らしました。(5bc535f)
バージョン 1.5.0-rc01
2023 年 7 月 26 日
androidx.compose.runtime:runtime-*:1.5.0-rc01
がリリースされました。バージョン 1.5.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
変更が記録されるまで派生状態の再読み取りを延期。(f38099)
mutableStateOf()
呼び出しをプリミティブの対応する専用タイプに移行することを推奨する、オプションの検査を利用できます。lint ID はAutoboxingStateCreation
です。これまで、この検査はすべてのプロジェクトでデフォルトで有効になっていました。Android Studio のエディタとプロジェクトの lint 出力でこの警告を表示するには、次に示すように、モジュールの 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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 削除されるサブコンポジションの再コンポーズをスキップします。(Ieeb99、b/254645321)。
バージョン 1.5.0-beta02
2023 年 6 月 7 日
androidx.compose.runtime:runtime-*:1.5.0-beta02
がリリースされました。バージョン 1.5.0-beta02 に含まれる commit については、こちらをご覧ください。
パフォーマンスの改善
- スナップショットが変更されていない場合は、
DerivedState
でreadableHash
を計算しないようにします。(307102)。
バージョン 1.5.0-beta01
2023 年 5 月 24 日
androidx.compose.runtime:runtime-*:1.5.0-beta01
がリリースされました。バージョン 1.5.0-beta01 に含まれる commit については、こちらをご覧ください。
API の変更
- 再コンポーズ、カラー アニメーション、
AndroidComposeView
の割り当てを削除しました(Ib2bfa)。 - 状態を作成し、
remember
呼び出しでラップする必要がある関数をマークするための@StateFactoryMarker
アノテーションを追加しました。(I64550)。 - State と
MutableState
のプリミティブ バージョンを追加しました(fb3d89) Snapshot.isApplyObserverNotificationPending
を追加しました(I672a5)。
バグの修正
- 割り当ての削減(I65c09、d7ea77、727974、445808)
ComposerImpl
でスナップショット参照を保持しない(0206f7)- Compose
CoroutineScopes
のクイック キャンセル(a55362、bd382f) - 合成を 2 回適用しない(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 に含まれる commit については、こちらをご覧ください。
API の変更
State
API のプリミティブ バージョンを追加し、自動ボックス化によるペナルティを発生させることなく、Int、Long、Float、Double の値をState
オブジェクトで追跡できるようにしました。これらを使用するには、新しいファクトリ メソッド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 に含まれる commit については、こちらをご覧ください。
API の変更
- Android ウィンドウ用に作成された recomposer は、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 に含まれる commit については、こちらをご覧ください。
新機能
- Kotlin の
getValue
演算子をコンポーザブルにできるようになりました(f174f6e)
バグの修正、パフォーマンスの改善
- アクセスできない状態レコードを持つ状態オブジェクトのレコードを上書きする(c986960)
- グループの実現時に正しいスコープの Composer を使用(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 に含まれる commit については、こちらをご覧ください。
新機能
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 に含まれる commit については、こちらをご覧ください。
バグの修正
スナップショット リストとマッピングの潜在的なデッドロックを修正(2eb6570)
SnapshotStateList
またはSnapshotStateMap
にコンテンツを追加すると、変更が状態レコードへの直接書き込みと同時に行われる場合、デッドロックが発生する可能性があります。これは、直接書き込みを使用して未使用のレコードを解放する 93fcae828b によって導入された変更で発生する可能性が大幅に高まりました。ロックの順序は、マップまたはリストのロックが保持されているときにスナップショット ロックが取得されないようにするようになりました。
バージョン 1.4.1
2023 年 4 月 5 日
androidx.compose.runtime:runtime-*:1.4.1
がリリースされました。バージョン 1.4.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- ノードグループの終了時の
endToMarker()
を修正。d71d980
バージョン 1.4.0
2023 年 3 月 22 日
androidx.compose.runtime:runtime-*:1.4.0
がリリースされました。バージョン 1.4.0 に含まれる commit については、こちらをご覧ください。
1.3.0 以降の重要な変更
- 最初のコンポジション 3680e25 で
LiveData
の初期化値を使用 ComposeNodeLifecycleCallback
を追加して Compose ノードのライフサイクルを監視します。8b6a258parameterTypes
プロパティをComposableMethod
に追加(7b6c7ad)
バグの修正とパフォーマンスの改善
SnapshotStateObserver
29f4a3e の両方のスコープ インデックスを消去します。- スキップ不可のラムダの本文に必要なグループを追加します 7d06752
- スナップショット状態のメモリ参照特性を改善 93fcae8
- コンポジション ローカル ルックアップでのボクシングの削除 0875717
- 再利用できないノードグループに正しいキーを使用 6388d8d
- 再帰適用と同時適用から
SnapshotStateObserver
を保護する 98cb6ba IdentityArraySet
の「get」に check-index-bounds のチェックを追加メソッド 35a77d3ViewTreeLifecycleOwner
拡張機能を使用するように Compose モジュールを更新(21c2122)- Recomposer がフレームを終了した後に適用通知を送信します。98f2641
- Recomposer 8f8656f をキャンセルしたときに境界外のインデックスがクラッシュする問題を修正
- Composition の親プロバイダが変更された場合、常に再コンポーズを強制する 9526fcc
- キャンセルされたジョブの Recomposer の許容度 a55f7ed
- 多数の Composer に対する無効化の処理を改善しました。9b7ed67
- ローカル以外の返品に対するクローズ グループの生成を修正(b6f590c)
バージョン 1.4.0-rc01
2023 年 3 月 8 日
androidx.compose.runtime:runtime-*:1.4.0-rc01
がリリースされました。バージョン 1.4.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
バージョン 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 に含まれる commit については、こちらをご覧ください。
バージョン 1.4.0-beta01
2023 年 2 月 8 日
androidx.compose.runtime:runtime-*:1.4.0-beta01
がリリースされました。バージョン 1.4.0-beta01 に含まれる commit については、こちらをご覧ください。
API の変更
ComposeNodeLifecycleCallback
が追加され、Compose ノードのライフサイクルを管理できるようになりました。(I3731b)Composer.disableSourceInformation()
はテストでの呼び出しにのみ安全であるため、@TestOnly
を追加しました。(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 に含まれる commit については、こちらをご覧ください。
API の変更
- インライン関数または非推奨になった非表示関数の型や null 可能性を拡大しました。(I24f91)
バージョン 1.4.0-alpha04
2023 年 1 月 11 日
androidx.compose.runtime:runtime-*:1.4.0-alpha04
がリリースされました。バージョン 1.4.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
TestMonotonicFrameClock
が正しい試験運用版アノテーションを使用するようになりました。(I95c9e)
バグの修正
- 再帰的な適用および同時実行の適用から
SnapshotStateObserver
を保護します。(d902fb)
バージョン 1.4.0-alpha03
2022 年 12 月 7 日
androidx.compose.runtime:runtime-*:1.4.0-alpha03
がリリースされました。バージョン 1.4.0-alpha03 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.4.0-alpha01
2022 年 10 月 24 日
androidx.compose.runtime:runtime-*:1.4.0-alpha01
がリリースされました。バージョン 1.4.0-alpha01 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
- 1.3.2 からの変更はありません。
バージョン 1.3.2
2022 年 12 月 7 日
androidx.compose.runtime:runtime-*:1.3.2
がリリースされました。バージョン 1.3.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- androidx.compose.ui 1.3.2 をサポートするように更新しました
バージョン 1.3.1
2022 年 11 月 9 日
androidx.compose.runtime:runtime-*:1.3.1
がリリースされました。バージョン 1.3.1 に含まれる commit については、こちらをご覧ください。
バージョン 1.3.0
2022 年 10 月 24 日
androidx.compose.runtime:runtime-*:1.3.0
がリリースされました。バージョン 1.3.0 に含まれる commit については、こちらをご覧ください。
1.2.0 以降の重要な変更
例外処理 / ライブ編集サポート
- ライブ編集を適切にサポートするために、コンポジション中に例外を処理できるように API を追加しました
- ホットリロードの構成エラー処理
- 保存 / 復元時のライブ編集エラーの処理
コンポジションのトレース
- 新しいコンポジション トレース ツールをサポートするために、ランタイム トレース API を追加しました
- コンポーズ可能なトレース イベントの開始 / 終了呼び出しを生成する
- ComposerKt.traceEventStart(Int, String) を再度追加
コンポーズ可能な Reflection API
- 新しい
ComposableMethod
API が追加されました。これにより、コンポーズ可能な API のより信頼性の高いリフレクション ベースの呼び出しが可能になります。 - ランタイムを構成するために invokeComposable を移動
- コンポーズ可能なメソッドを呼び出す API の変更
ランタイムの修正
- マーカーのスロット テーブル チェックの誤った範囲テストの修正
- 移動可能なコンテンツが SubcomposeLayout に出入りすることを許可
- サブコンポジションの新しいコンテンツへのコンテンツの移動を修正
スナップショット システム
- スナップショット システムでは、メモリ管理、パフォーマンス、正確性に関してさまざまな点が改善されました。
- 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 に含まれる commit については、こちらをご覧ください。
バグの修正
- スロット テーブルからの
ArrayIndexOutOfBoundsException
を修正しました(b/249076084)
バージョン 1.3.0-beta03
2022 年 9 月 21 日
androidx.compose.runtime:runtime-*:1.3.0-beta03
がリリースされました。バージョン 1.3.0-beta03 に含まれる commit については、こちらをご覧ください。
互換性を破る動作変更
remember
とrememberCoroutineScope
へのパラメータはcrossinline
に変更されました。これにより、後で内部エラーが報告される原因となる早期復帰を許可するのではなく、早期復帰のためにエラーを報告します。- この変更により、新しいコンパイラ エラーが報告され、これらの関数に渡されたラムダからローカル以外の戻り値の削除が必要になる可能性があります。(Ibea62)
バージョン 1.3.0-beta02
2022 年 9 月 7 日
androidx.compose.runtime:runtime-*:1.3.0-beta02
がリリースされました。バージョン 1.3.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
- API を更新しました。(I64ca0)
バージョン 1.3.0-beta01
2022 年 8 月 24 日
androidx.compose.runtime:runtime-*:1.3.0-beta01
がリリースされました。バージョン 1.3.0-beta01 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.3.0-alpha02
2022 年 7 月 27 日
androidx.compose.runtime:runtime-*:1.3.0-alpha02
がリリースされました。バージョン 1.3.0-alpha02 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
API の変更
- ユーティリティ機能をランタイムに移行。(I4f729)
バージョン 1.2
バージョン 1.2.1
2022 年 8 月 10 日
androidx.compose.runtime:runtime-*:1.2.1
がリリースされました。バージョン 1.2.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- メモリリークの修正: トランスペアレント スナップショットから作成された、ネストされたスナップショットを破棄。b/239603305
バージョン 1.2.0
2022 年 7 月 27 日
androidx.compose.runtime:runtime-*:1.2.0
がリリースされました。バージョン 1.2.0 に含まれる commit については、こちらをご覧ください。
1.1.0
以降の重要な変更
Compose Runtime には、1.2.0 で導入されたいくつかの機能と、安定化をもたらす多くのバグ修正が含まれています。新たに導入された最も重要な機能は、
movableContentOf
API です。この API を使用すると、共有要素の遷移などの複雑な UX を実現できます。movableContentOf
API は、コンポーザブル ラムダを別のラムダに変換します。変換されたラムダは、状態および対応するノードを呼び出された新しい場所に移動します。前の呼び出しがコンポジションから出ると状態は一時的に保持され、ラムダへの新しい呼び出しがコンポジションに入った場合、状態および関連付けられたノードが新しい呼び出しの場所に移動されます。新しい呼び出しが追加されない場合、状態は完全に削除され、オブザーバーに通知されます。movableContentOf
ラムダが同じコンポジションで複数回呼び出された場合、呼び出しごとに新しい状態とノードが作成されます。呼び出しがコンポジションを出て新しい呼び出しが入ると、状態は、呼び出しの順序で最初に出る呼び出しから入る呼び出しへと移動します。新しい呼び出しで宣言されていない状態はすべて完全に削除されます。この機能とその他のいくつかの新機能に加えて、ランタイムとスナップショットの状態システムの安定化に多くの時間が費やされました。各種のメモリリークを除去し、コードパスを最適化しました。
変更の概要については下記をご覧ください。
1.2
の新機能
- スナップショットの unsafeEnter / unsafeLeave(試験運用版)を追加
- 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 に含まれる commit については、こちらをご覧ください。
バグの修正
- これまでは、派生状態の監視が再コンポーズ スコープとコンポジションの両方から無条件で削除されてしまっており、派生状態をまだ観測している可能性がある他のスコープの破損が生じていました。今回の変更により、他のスコープで監視されていない派生状態のインスタンスだけが削除されるようになります。(b/236618362)
バージョン 1.2.0-rc02
2022 年 6 月 22 日
androidx.compose.runtime:runtime-*:1.2.0-rc02
がリリースされました。バージョン 1.2.0-rc02 に含まれる commit については、こちらをご覧ください。
バージョン 1.2.0-rc01
2022 年 6 月 15 日
androidx.compose.runtime:runtime-*:1.2.0-rc01
がリリースされました。バージョン 1.2.0-rc01 に含まれる commit については、こちらをご覧ください。
API の変更
- compose ライブラリのインターフェースが jdk8 デフォルト インターフェース メソッドを使ってビルドされるようになりました。(I5bcf1)
バージョン 1.2.0-beta03
2022 年 6 月 1 日
androidx.compose.runtime:runtime-*:1.2.0-beta03
がリリースされました。バージョン 1.2.0-beta03 に含まれる commit については、こちらをご覧ください。
バージョン 1.2.0-beta02
2022 年 5 月 18 日
androidx.compose.runtime:runtime-*:1.2.0-beta02
がリリースされました。バージョン 1.2.0-beta02 に含まれる commit については、こちらをご覧ください。
バージョン 1.2.0-beta01
2022 年 5 月 11 日
androidx.compose.runtime:runtime-*:1.2.0-beta01
がリリースされました。バージョン 1.2.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
- これは、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 に含まれる commit については、こちらをご覧ください。
API の変更
CompositionTracer
インターフェースにTracingInProgress
を追加しました。(Ic6f12)recomposeScopeIdentity
を Composer に追加しました。(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 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.2.0-alpha05
2022 年 3 月 9 日
androidx.compose.runtime:runtime-*:1.2.0-alpha05
がリリースされました。バージョン 1.2.0-alpha05 に含まれる commit については、こちらをご覧ください。
外部からの協力
- Kotlinx コルーチン 1.6.0 を使用するように更新されました(I3366d)
バージョン 1.2.0-alpha04
2022 年 2 月 23 日
androidx.compose.runtime:runtime-*:1.2.0-alpha04
がリリースされました。バージョン 1.2.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
ComposableTarget
、ComposableTargetMarker
、ComposableOpenTarget
を追加しました。使用が想定されていない Applier を対象としてコンポーズ可能な関数を呼び出した場合について、コンパイル時のレポートが可能になります。ほとんどの場合、アノテーションは Compose コンパイラ プラグインによって推定されます。そのため、これらのアノテーションを直接使用することはめったにありません。推定できないケースとしては、カスタム Applier、コンポーズ可能な抽象関数(インターフェース メソッドなど)、コンポーズ可能なラムダであるフィールドまたはグローバル変数(ローカル変数とパラメータは推定される)を作成および使用する場合や、
ComposeNode
または関連するコンポーズ可能な関数を使用する場合が挙げられます。カスタム Applier の場合は、
ComposeNode
またはReusableComposeNode
を呼び出すコンポーズ可能な関数が、関数に対してCompoableTarget
アノテーションとコンポーズ可能なラムダのパラメータ型を追加する必要があります。ただし、ComposableTargetMarker
を付けてアノテーションを作成し、ComposableTarget
を直接使用する代わりに、そのマークされたアノテーションを使用することをおすすめします。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 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.2.0-alpha01
2022 年 1 月 12 日
androidx.compose.runtime:runtime-*:1.2.0-alpha01
がリリースされました。バージョン 1.2.0-alpha01 に含まれる commit については、こちらをご覧ください。
API の変更
- Layout Inspector で不変の ID を生成するために、
identity
フィールドをCompositionData
に追加しました。(Ic116e)
依存関係の更新
- Kotlin
1.6.10
に依存するようになりました。
バージョン 1.1
バージョン 1.1.1
2022 年 2 月 23 日
androidx.compose.runtime:runtime-*:1.1.1
がリリースされました。バージョン 1.1.1 に含まれる commit については、こちらをご覧ください。
バグの修正
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 に含まれる commit については、こちらをご覧ください。
1.0.0 以降の重要な変更
- Android 12 のオーバースクロール効果の安定版サポートを追加
- タップ ターゲットのサイズ調整を改善
- Compose 1.0 では、マテリアル ユーザー補助ガイドラインのタップ ターゲットのサイズに合わせるために、マテリアル コンポーネントのレイアウト スペースが拡張されることに注意してください。たとえば、ボタンのサイズをいくら小さく設定しても、ボタンのタップ ターゲットは最小サイズの
48x48dp
に拡張されます。これにより、Compose Material とマテリアル デザイン コンポーネントの動作が一致し、View と Compose を混在させても動作の一貫性を保持できます。また、Compose Material コンポーネントを使用して UI を作成する際に、タップ ターゲットに関するユーザー補助の最小要件が確実に満たされます。 - ナビゲーション レールの安定版のサポートを追加
- 試験運用版であったいくつかの API を安定版に移行
- 新しいバージョンの Kotlin のサポート
バージョン 1.1.0-rc03
2022 年 1 月 26 日
androidx.compose.runtime:runtime-*:1.1.0-rc03
がリリースされました。バージョン 1.1.0-rc03 に含まれる commit については、こちらをご覧ください。
バグの修正
- 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 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-beta04
2021 年 12 月 1 日
androidx.compose.runtime:runtime-*:1.1.0-beta04
がリリースされました。バージョン 1.1.0-beta04 に含まれる commit については、こちらをご覧ください。
新機能
- Kotlin
1.6.0
との互換性を確保するために更新しました
バージョン 1.1.0-beta03
2021 年 11 月 17 日
androidx.compose.runtime:runtime-*:1.1.0-beta03
がリリースされました。バージョン 1.1.0-beta03 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-beta02
2021 年 11 月 3 日
androidx.compose.runtime:runtime-*:1.1.0-beta02
がリリースされました。バージョン 1.1.0-beta02 に含まれる commit については、こちらをご覧ください。
API の変更
- スナップショット コードが複数のファイルに分割されましたが、すべて同じ JVM クラス内にあります。(Ic6c98)
バージョン 1.1.0-beta01
2021 年 10 月 27 日
androidx.compose.runtime:runtime-*:1.1.0-beta01
がリリースされました。バージョン 1.1.0-beta01 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-alpha06
2021 年 10 月 13 日
androidx.compose.runtime:runtime-*:1.1.0-alpha06
がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください。
API の変更
- モジュール間で呼び出す必要がある Composer メソッドから
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 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-alpha04
2021 年 9 月 15 日
androidx.compose.runtime:runtime-*:1.1.0-alpha04
がリリースされました。バージョン 1.1.0-alpha04 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-alpha03
2021 年 9 月 1 日
androidx.compose.runtime:runtime-*:1.1.0-alpha03
がリリースされました。バージョン 1.1.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
- Compose Compiler は、古いバージョンの Compose Runtime(1.0)をサポートするようになりました。この変更の前、Compose Compiler は同じバージョン以降の Compose Runtime とのみ互換性がありました。この変更の後、Compose Compiler は古いバージョンの 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 に含まれる commit については、こちらをご覧ください。
バージョン 1.1.0-alpha01
2021 年 8 月 4 日
androidx.compose.runtime:runtime-*:1.1.0-alpha01
がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください。
バージョン 1.0
バージョン 1.0.5
2021 年 11 月 3 日
androidx.compose.runtime:runtime-*:1.0.5
がリリースされました。バージョン 1.0.5 に含まれる commit については、こちらをご覧ください。
バグの修正
- derivedStateOf インスタンスをトラッキングするクラッシュを修正しました。(aosp/1792247)
バージョン 1.0.4
2021 年 10 月 13 日
androidx.compose.runtime:runtime-*:1.0.4
がリリースされました。バージョン 1.0.4 に含まれる commit については、こちらをご覧ください。
依存関係の更新
- Kotlin
1.5.31
に依存するように更新しました。
バージョン 1.0.3
2021 年 9 月 29 日
androidx.compose.runtime:runtime-*:1.0.3
がリリースされました。バージョン 1.0.3 に含まれる commit については、こちらをご覧ください。
依存関係の更新
- Kotlin
1.5.30
に依存するように更新しました。
バージョン 1.0.2
2021 年 9 月 1 日
androidx.compose.runtime:runtime-*:1.0.2
がリリースされました。バージョン 1.0.2 に含まれる commit については、こちらをご覧ください。
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 に含まれる含まれる commit については、こちらをご覧ください。
依存関係の更新
- Kotlin
1.5.21
に依存するように更新しました。
バージョン 1.0.0
2021 年 7 月 28 日
androidx.compose.runtime:runtime-*:1.0.0
がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください。
1.0.0 の主な機能
これは Compose の最初の安定版リリースです。詳細については、Compose リリースの公式ブログをご覧ください。
既知の問題
Android Studio 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 Studio Bumblebee と AGP7.1
で修正される予定です。(b/194289155)
バージョン 1.0.0-rc02
2021 年 7 月 14 日
androidx.compose.runtime:runtime-*:1.0.0-rc02
がリリースされました。バージョン 1.0.0-rc02 に含まれる commit については、こちらをご覧ください。
- NullPointerExceptions を散発的に発生させる SnapshotStateObserver の競合状態を修正しました。(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 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-beta09
2021 年 6 月 16 日
androidx.compose.runtime:runtime-*:1.0.0-beta09
がリリースされました。バージョン 1.0.0-beta09 に含まれる commit については、こちらをご覧ください。
プロファイル ルールの追加
このリリースでは、以下の 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
で指定します。このファイルでは、1 行に 1 つずつルールを指定します。ここでのルールは、ライブラリ内のメソッドまたはクラスと合致するパターンです。ルールの構文は、人が読める ART プロファイル形式のスーパーセットで、adb shell profman --dump-classes-and-methods ...
を使用する際に使用されます。ルールは、メソッドまたはクラスをターゲットとする 2 つの形式のいずれかを使用します。メソッドルールのパターンは次のようになります。
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
クラスルールのパターンは次のようになります。
<CLASS_DESCRIPTOR>
上記の
<FLAGS>
には、このメソッドに「ホット」、「起動」、または「起動後」のフラグを付ける場合にそれぞれ文字H
、S
、P
(1 つまたは複数)を入力します。<CLASS_DESCRIPTOR>
は、ターゲットとなるメソッドが属するクラスの記述子です。たとえば、クラスandroidx.compose.runtime.SlotTable
の記述子は、Landroidx/compose/runtime/SlotTable;
です。<METHOD_SIGNATURE>
はメソッドのシグネチャで、メソッドの名前、パラメータの型、戻り値の型を含みます。たとえば、LayoutNode
のメソッドfun isPlaced(): Boolean
のシグネチャは、isPlaced()Z
です。1 つのルールに複数のメソッドまたはクラスを含める場合は、これらのパターンにワイルドカード(
**
、*
、?
)を使用できます。
ルールの機能
フラグ
H
が付いているメソッドは、このメソッドが「ホット」メソッドであり、事前コンパイルが必要であることを示します。S
フラグが付いているメソッドは、このメソッドが起動時に呼び出されるメソッドであり、コンパイルのコストと起動時にメソッドを解釈するコストを回避するために事前コンパイルが必要であることを示します。P
フラグが付いているメソッドは、このメソッドが起動後に呼び出されることを示します。このファイルに存在するクラスは、このクラスが起動時に使用されるクラスであり、クラス読み込みのコストを回避するためにヒープで事前割り当てする必要があることを示しています。
ルールの仕組み
- ライブラリは、AAR アーティファクトにパッケージするルールを定義できます。それらのアーティファクトを含むアプリがビルドされると、ルールが結合されます。結合されたルールは、アプリに固有のコンパクト バイナリ ART プロファイルをビルドするために使用されます。ART では、アプリがデバイスにインストールされた際にこのプロファイルを利用して、アプリの特定の部分を事前にコンパイルし、アプリのパフォーマンス(特に初回実行時)を改善できます。なお、これはデバッグ可能なアプリには影響しません。
バージョン 1.0.0-beta08
2021 年 6 月 2 日
androidx.compose.runtime:runtime-*:1.0.0-beta08
がリリースされました。バージョン 1.0.0-beta08 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
API の変更
- ソース圧縮時にコンパイラで生成されたソース情報を削除できる、新しい Compose コンパイラ API を追加しました。(Ia34e6)
ReusableContent
を導入したことで、キーが変更されたときにノードを置き換えるのではなく、コンテンツ内のノードの再利用を試みるようになりました。キーが変更されると、生成されたノードとノードの更新に使用される値を除き、コンテンツのスロット テーブル内の以前の値は無視されます。ReusableComposeNode
が導入されたことで、ComposeNode
のようにノードを置き換えるのではなく、生成されたノードが再利用されるようになりました。(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 に含まれる commit については、こちらをご覧ください。
API の変更
@ComposeCompilerApi
が@RequiresOptIn
ではなくなりました。(Iab690)
バージョン 1.0.0-beta05
2021 年 4 月 21 日
androidx.compose.runtime:runtime-*:1.0.0-beta05
がリリースされました。バージョン 1.0.0-beta05 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バグの修正
この変更以前は、ローカルのコンポーズ可能な関数はパラメータに基づいてスキップ可能でした。この変更以降は、ローカルのコンポーズ可能な関数はスキップされなくなります。ローカル関数が親からパラメータを取得するのが想定される一般的な動作であり、バグのよくある理由がスキップであるため、この変更が行われました。
以下の例を参照してください。
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
この変更以前は、
count
のパラメータが更新された後も、ShowCount
のコンポーズ可能な関数は常にスキップされていました。この認証バッジの取り消しは実施されないことになりました。(I5648a)rememberSaveable()
で入力パラメータを使用した場合に、古い値が復元される問題を修正しました。(I1b110、b/182403380)
バージョン 1.0.0-beta03
2021 年 3 月 24 日
androidx.compose.runtime:runtime-*:1.0.0-beta03
がリリースされました。バージョン 1.0.0-beta03 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 試験運用版 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 に含まれる commit については、こちらをご覧ください。
これは、Compose 1.0.0 ベータ版の最初のリリースです。
API の変更
- 無効化されたコンポジションをメインフレーム ループから除外するように再コンポーズする、試験運用版 API
Recomposer.runRecomposeConcurrentlyAndApplyChanges
を追加しました。(I342d0) - @ReadOnlyComposable としてマークされたコンポーザブルは、他の @ReadOnlyComposable だけを呼び出すように、コンパイル時に検証されるようになりました。(I58961)
compositionLocalOf
とstaticCompositionLocalOf
のdefaultFactory
は、オプションではなく必須になりました。この変更により、null 値非許容型(デフォルト ファクトリが提供されていない)で発生する可能性のある型エラーを解消しました。これまでは、null 値非許容型に対して null 参照を指定していました。
null 値許容型の場合は、
{ null }
をデフォルト ファクトリとして提供することを検討してください。null 値許容型を持たないローカル変数は、有効なデフォルト値を指定しない限り、使用しないことをおすすめします。有効なデフォルトが存在しない場合、
defaultFactory
ラムダは例外をスローします。ただし、例外がスローされると、ローカル変数のユーザーは、その変数が型システムで適用されないという前提で、その変数に暗黙的に依存することになります。(Ifbd2a)サポートが終了したシンボルを Compose Runtime から削除しました。(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 変更を加えました。
- Top / BottomAppBar に contentPadding パラメータを追加し、デフォルトのパディングをカスタマイズできるようにしました。
- API ガイドラインに沿って必須のパラメータがオプションのパラメータの前になるよう、BackdropScaffold 内のパラメータの順序を変更しました。
- BottomNavigationItem の
icon
パラメータをselected
とonClick
の後ろになるよう移動しました。 - BottomNavigationItem の
alwaysShowLabels
パラメータの名前をalwaysShowLabel
に変更しました。 - 一部のコンポーネントの
bodyContent
パラメータの名前をcontent
のみに変更しました。 ButtonDefaults.buttonColors()
のパラメータの順序を変更しました。パラメータの型は変更されないため、これによりコードでエラーは発生しません。名前付きパラメータを使用するか、順序を手動で更新してください。そうしないと、コードは以前と同じように動作しません。darkColors()
にsecondaryVariant
パラメータを追加しました。通常、このカラーはダークテーマのsecondary
と同じですが、整合性とカスタマイズ性向上のために追加しました。- ElevationDefaults と animateElevation() はあまり使用されず、役に立っていないため、公開 API のサーフェスから削除しました。
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 に含まれる commit については、こちらをご覧ください。
API の変更
- ViewGroup は UiApprier でサポートされなくなりました。非推奨の emitView コンポーザブルを削除しました。(Ifb214)
- CompositionReference の名前を CompositionContext に変更しました(I53fcb)
- ComponentActivity.setContent を androidx.activity:activity-compose モジュールの androidx.activity.compose.setContent に移動しました。(Icf416)
- Snapshot API を API ガイドラインとの整合性を高め、内部実装クラスを公開 API から非表示にするように更新しました。(Id9e32)
- Ambient から CompositionLocal への名前変更に合わせて Ambient の名前を変更しました。AmbientFoo という名前の Ambient は、LocalFoo という名前の CompositionLocal になりました。(I2d55d)
- Ambient の名前を CompositionLocal に、ambientOf / staticAmbientOf の名前を compositionLocalOf / staticCompositionLocalOf にそれぞれ変更しました。この変更により、CompositionLocal の目的、つまりコンポジションのローカルな値を提供および取得するためのメカニズムがより明確化されました。CommercialLocal インスタンスには、
Local
のプレフィックス(たとえば、val LocalFoo = compositionLocalOf { Foo() })を付ける必要があります(Ia55b6) - takeMutableSnapshot と takeSnapshot は、スナップショットのコンパニオン メソッドに移動しました。(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 は、コンポジション子コルーチンが完了するまで再コンポジションを続けます。Recomposer.shutDown の名前を cancel に変更して close と対比させるようにしました。(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(ウィンドウの ViewTreeLifecycleLifecycle によって駆動される)になりました。ホスト ライフサイクルが停止すると、再コンポジションと withFrameNanos に基づくアニメーション ティックが一時停止します。(I38e11)
Recomposer.runningRecomposers は、プロセスで進行中のコンポジション状態を監視するための、読み取り専用 RecomposerInfo のグローバル StateFlow を提供するようになりました。この API は、現在非推奨の Recomposer.current() よりも優先されます。(If8ebe)
DisposableEffectDisposable の名前を DisposaleEffectResult に変更しました(I3ea68)
バージョン 1.0.0-alpha11
2021 年 1 月 28 日
androidx.compose.runtime:runtime-*:1.0.0-alpha11
がリリースされました。バージョン 1.0.0-alpha11 に含まれる commit については、こちらをご覧ください。
API の変更
- onCommit、onDispose、onActive を非推奨にし、SideEffect API と DisposableEffect API に置き換えました。(If760e)
- emit() API とすべてのオーバーロードのサポートが終了し、名前が ComposeNode に変更されました。API 自体は同じもので、Compose の命名規則に従うように名前だけが変更されています。(I4137b)
- invalidate と compositionReference() を非推奨にし、それぞれ currentRecomposeScope と rememberCompositionReference に置き換えました。(I583a8)
RememberObserver が CompositionLifecycleObserver に置き換わり、CompositionLifecycleObserver のサポートが終了しました。
RememberObserver
をCompositionLifecycleObserver
に置き換えました。セマンティクスを変更し、メソッドの名前を変更しました。新しい API への変更は、1 回だけ記憶されているオブジェクトに対しては機械的に行うことができます(引き続き、これがおすすめの方法です)。ただし、参照がコンポジション内で複数回記憶されている場合は、onEnter
が 1 回だけ呼び出される参照ごとにonRemembered
が呼び出されます。オブジェクトがWithConstraints
やScaffold
などのサブコンポジションで使用されていた場合、onEnter
が複数回呼び出されることで単一のonEnter
呼び出しの保証の信頼性が損なわれていましたが、RememberObserver
では削除されました。RememberObserver
は、remember
に渡されたコールバックからRememberObserver
インスタンスが返された場合に呼び出されるonAbandoned
を追加しますが、コンポジションの状態には記憶されないため、onRemembered
が呼び出されることはありません。これは、例外によってコンポジションが完了前に終了する場合や、コンポジションの生成状態が最新でなくなった、あるいは不要になったためにコンポジションが破棄された場合などに発生することがあります。上記の単一参照の推奨事項に沿ったRememberObserver
のインスタンスが外部リソースを追跡している場合、onForgotten
とonAbandoned
の両方が、リソースが不要になったことを示します。オブジェクトが、開始された処理またはonRemembered
に割り当てられたリソースを追跡する場合、onRemembered
が呼び出されてもonAbandoned
は呼び出されないため、onAbandoned は無視できます。(I02c36)collectAsState()
関数をインラインとしてマークしないでください。(Ia73e4)
バグの修正
- WithConstraints は BoxWithConstraints として再構築され、founds.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 に含まれる commit については、こちらをご覧ください。
互換性を破る変更
内部コンパイラ API の再構成により、コンポーズの結果として生成されたノードへの変更は、
@Composable
関数がすべて完了した後、コンポーズの「変更を適用」フェーズで一括適用されるようになりました。これは、動作面の互換性を破る変更です。この変更により、ノードは変更が適用されるまでの間、内部 API や試験運用版 API から使用できなくなるため、アプリコードの変更が必要になる可能性があります。通常この問題を回避するには、ノードが生成されて初期化されるまでコードの実行を遅らせるよう、
SideEffect
コンポーザブルの依存関係でコードを囲むようにします。(I018da)
API の変更
- Recomposer によって変更が適用されたかどうかをトラッキングする方法を追加しました。(I1b3e2)
[Abstract]ComposeView API を拡張することにより、コンポジションを破棄後に再作成して、Compose ベースのビューをリサイクルできるようにしました。子コンポジションを作成するためのウィンドウ スコープの Recomposer と ComposerReference をインストールおよび検出するための API を追加します。
[Abstract]ComposeViews のコンポジション破棄戦略を設定するための ViewCompositionStrategy を追加します。デフォルトでは、ウィンドウのデタッチ時に破棄されます。(I860ab)
バグの修正
- Recomposer の現時点における状態のフローが公開され、そのアクティビティおよび関連する効果のアクティビティをモニタリングできるようになりました。(Ifb2b9)
- ネイティブ keyEvent に keyEvent.nativeKeyEvent でアクセスできるようになりました。(I87c57、b/173086397)
バージョン 1.0.0-alpha09
2020 年 12 月 16 日
androidx.compose.runtime:runtime-*:1.0.0-alpha09
がリリースされました。バージョン 1.0.0-alpha09 に含まれる commit については、こちらをご覧ください。
API の変更
SlotTable、SlotReader、SlotWriter を公開 API から削除しました。これらは、以前 InternalComposeAPI としてマークされていました。現在は Compose モジュールの内部にあります。
コンポジション情報の抽出に使用するため、CompositionData と CompositionGroup が UI-Tooling 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 は、コンポーズ可能な呼び出しを行えるプロパティ ゲッターをサポートしています。このサポートは終了しませんが、プロパティ ゲッターを @Composable として宣言する構文が変更されます。
非推奨となった構文では、これを行うためにプロパティ自体にアノテーションを付けていました。
@Composable val someProperty: Int get() = ...
現在の適切な構文では、これを行うためにプロパティのゲッターにアノテーションを付けます。
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 に含まれる commit については、こちらをご覧ください。
API の変更
- Compose のガイドラインとの整合性を確認するため、コンポーズ可能なラムダ パラメータの名前と位置に対する lint チェックを追加しました。また、lint チェックおよびガイダンスに従って、後置ラムダの名前として
children
を使用する一部の API をcontent
に移行しました。(Iec48e) - Recomposer は EmbeddingContext を受け入れなくなりました。必要なスケジューリング依存関係は effectCoroutineContext から取得されます。FrameManager が非推奨になりました。プラットフォーム統合は、固有のグローバル スナップショット処理を初期化する必要があります。(I02369)
- RestorableStateHolder.withRestorableState 関数の名前が RestorableStateProvider に変更されました。(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 に含まれる commit については、こちらをご覧ください。
新機能
API の変更
@UnionType
アノテーションのサポートが終了しました(I57cde)- アンビエントを提供する代替手段として provideDefault が追加されました。アンビエント値がまだ提供されていない場合にのみ設定されるアンビエント値を指定するために使用できます。(Id6635、b/171024925)
- SideEffect API と 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 に含まれる commit については、こちらをご覧ください。
API の変更
- Recomposer が CompositionReference になり、有効なコンポジションの親になりました。明示的な Recomposer が必要な場面は少なくなりました。(I4036f)
- SideEffect に対応する DisposableEffect の API を追加しました。onCommit-with-params の役割を果たしますが、onDispose が必要です。
- 再コンポジションから進行中または長期のプロセス(DisposableEffects や LaunchedTasks などの)にデータをパブリッシュする 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 に含まれる commit については、こちらをご覧ください。
API の変更
- 試験運用版の Modifier.pointerInput 入力一時停止修飾子(Ia77d2)
- LazyColumn/Row のスクロール パフォーマンスが、スクロールごとのサブコンポジションでの作業を軽減することで改善されました。Composition クラス用の新しい hasInvalidations() メソッドが追加されました。Recomposer の hasPendingChanges() メソッドは hasInvalidations() という名前に変更されました(Ib2f32、b/168293643、b/167972292、b/165028371)
- 時間をかけて単一の
State<T>
値を更新するコンポジションからコルーチンを起動するために produceState API が追加されました(Id4a57) - Compose API ガイドラインに合わせて launchInComposition が LaunchedTask という名前に変更されました(I99a8e)
- カスタム Layouts での place() 呼び出しの順序で、子の描画順序を定義できるようになりました(Ibc9f6)
バージョン 1.0.0-alpha04
2020 年 10 月 1 日
androidx.compose.runtime:runtime-*:1.0.0-alpha04
がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
API の変更
CompositionCoroutineScope
はMonotonicFrameClock
を実装しなくなりました。withFrameNanos
の呼び出し元は、トップレベル関数を明示的にインポートする必要があります。(Icb642、b/166778123)
バグの修正
onNode
やwaitForIdle
などのグローバル テスト関数のサポートは終了しました。ComposeTestRule で定義されている新しい同等の関数に移行してください(I7f45a)launchInComposition
がディスパッチされていないコルーチンを開始しないようになりました(Ief6af、b/166486000)
バージョン 1.0.0-alpha02
2020 年 9 月 2 日
androidx.compose.runtime:runtime-*:1.0.0-alpha02
がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
API の変更
- Snapshot データの変更の消費および生成用に
snapshotFlow
およびwithMutableSnapshot
API が追加されました。(I3e722) コンポーズ可能な関数の呼び出し規則が変更されました。これは互換性を破るバイナリの変更です。このバージョンの Compose コンパイラ プラグインで動作するには、すべてのライブラリを再コンパイルする必要があります。
変更された API は明示的なオプトインがあるコンパイラ API だけであるため、ソースレベルで互換性を破る変更はありません。(I7afd2、b/158123185)
EmbeddingContext からスケジュール設定メソッドを削除しました。(I7b9be)
onPrecommit は非推奨です。onCommit で onPrecommit の動作がサポートされるようになりました。
onCommit と onActive は、次の Choreographer フレームの開始時点ではなく、構成要素の変更が commit された同じ Choreographer フレームで実行されるようになりました。(I70403)
バージョン 1.0.0-alpha01
2020 年 8 月 26 日
androidx.compose.runtime:runtime-*:1.0.0-alpha01
がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
バージョン 0.1.0-dev
バージョン 0.1.0-dev17
2020 年 8 月 19 日
androidx.compose.runtime:runtime-*:0.1.0-dev17
がリリースされました。バージョン 0.1.0-dev17 に含まれる commit については、こちらをご覧ください。
API の変更
- カスタム出力では、1 つ以上のセッターをスキップし、その出力とは関係なく再コンポーズできることを宣言できるようになりました。(Ibbd13)
サポートが終了した FrameManager の呼び出しを削除しました。
内部コンポーズ 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 内で View を出力する場合、可能であれば、代わりに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 に含まれる commit については、こちらをご覧ください。
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()
をオーバーライドしないクラスを使用する場合など)、アプリに目立った影響はありません。equals()
をオーバーライドするクラス(data
クラスなど)では、パフォーマンスが低下する可能性があります。これは、mutableStateOf()
に代入された場合にデフォルトでequals()
メソッドが呼び出されるためです。mutableStateOf()
、ambientOf()
、savedInstanceStateOf()
の呼び出しにポリシー パラメータpolicy = referentialEqualityPolicy()
を追加すると、以前の動作に戻ります。(Ic21a7)Row
とColumn
をインライン関数にしました。これにより、使用する際のオーバーヘッドが大幅に削減されます。(I75c10)
バグの修正
- setViewContent のサポートが終了しました。代わりに setContent を使用してください。(I7e497、b/160335130)
MonotonicFrameAnimationClock を追加して、MonotonicFrameClock を AnimationClockObservable として使用できるようにしました。これにより、新しいコルーチン ベースのクロックと、従来のコールバック ベースのクロックを使用している API との隙間が埋まりました。
ManualAnimationClock に相当する MonotonicFrameClock は ManualFrameClock になりました。(I111c7、b/161247083)
Modifier.stateDraggable は、全面的に書き直され、名前が Modifier.swipeable に変わりました。新しく SwipeableState クラスが導入され、DrawerState と BottomDrawerState が SwipeableState クラスを継承するようにリファクタリングされました。[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 に、foundation の 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 に含まれる commit については、こちらをご覧ください。
依存関係の更新
0.1.0-dev15
バージョンの Compose を使用するには、上記の依存関係の宣言で示されている新しいコード スニペットに従って、依存関係を更新する必要があります。
API の変更
@Model
アノテーションが非推奨になりました。代わりに state と mutableStateOf を使用してください。このサポート終了は、慎重に検討されたうえで決定されたものです。サポート終了の理由
主な理由を以下に示します。
- API に関する項目と概念について、指南が必要な内容を減らす。
- 他の同等のツールキット(Swift UI、React、Flutter)との連携をより緊密にする。
- サポート終了の判断を取り下げることができる。
@Model
はいつでも元に戻すことができます。 @Model
の構成に関して、以下のようなまれな使用例をなくし、回答の難しい質問が出ないようにする。@Model
データクラス、等式、ハッシュコードなど。- 一部のプロパティを監視対象とし、その他のプロパティは監視対象としない方法。
- 監視を行う際に使用する構造等価式と参照等価式の指定方法。
- システムへの「過度な期待」を減らす。システムの能力が過信されること(リストの差分取得の方法がすでにあると考えるなど)が少なくなるようにします。
- 監視の粒度をより直感的にする。
- リファクタリングにより、変数をクラスのプロパティにできる可能性を高める。
- State を個別に操作して最適化が行える可能性を高める。
- エコシステムの他の部分との連携をより緊密にし、State が変更不能であることによる曖昧さを軽減する(変更可能な State を活用する)。
移行メモ
@Model
の既存の使用例については、下の 2 つの方法のいずれかに、ほぼすべて容易に変換できます。以下に、2 つのプロパティを含み、コンポーズ可能な関数内で使用される@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 の値を割り当てます。このアプローチが機能するのは、
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 でのプロパティ委任と
mutableStateOf
API を使用することで簡単に実施できます。コンポジションの外部に MutableState インスタンスを作成することが可能です。基本的には、元のクラスのすべての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 の署名が変更されました。コンポーズ可能な関数でパラメータを 1 つ受け取る場合、3 つのパラメータを受け取る関数に変換されます。追加されるパラメータは Composer と「key」整数です。ビットマスク整数として、呼び出しを通じてメタデータを伝達する際に使用されます。
なお、デフォルトの引数がコンポーズ可能な関数に変換されるようになっています。変換時に、関数の合成によるオーバーロードがデフォルトで行われることはないため、定義される関数の数は少なくなります。
今回の変更による確認済みの意図的な動作変更は次のとおりです。
- 一部の呼び出しが、変更前にはスキップされなかった箇所でスキップされる。
- デフォルトの引数を含む式で、コンポーズ可能な式が正しく登録および処理される。
最適化に関しては、次の内容が含まれます。 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 が変更され、Function1 ではなく Function3 を想定するようになりました。7. restartableFunction と restartableFunctionN が更新され、コンパイル時パラメータが追加されました。(I60756、b/143464846)sortWith と removeRange を MutableVector に追加しました。(Icccf7)
CompositionLifecycleObserver のデフォルトのメソッド実装を追加しました。(I24289)
Applier には、コンポジションを破棄するための clear() メソッドが必要になりました。(Ibe697)
asMutableList() を MutableVector に追加しました。これにより、リスト全体をコピーしなくても公開 API に渡せるようになりました。(I298df)
コンポジション内の管理対象の CoroutineScope を取得するための rememberCoroutineScope() を追加して、イベントに応じてジョブを起動できるようにしました。(I0e264)
MutableVector は、標準の Collection インターフェースを実装しない新しいコレクションです。このコレクションは、他の要件を超える速度を提供し、内部実装でのみ使用されます。(I8ebd6)
Compose が必要とする Kotlin のバージョンの問題を避けるために、
StableMutableList
とStableMutableMap
を一時的に削除しました。これらのインターフェースは、Compose が問題のないバージョンの Kotlin に更新され次第、再導入される予定です。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 コンパイラ プラグインは、スコープ内の解決された「composer」に「emit 演算子」メソッドが見つかった場合、@Composable 関数内のコンストラクタの呼び出しに対して自明でないインターセプトを実行していました。(I5205a、b/158123804)
Recompose composable は、有用な抽象化ではなくなりました。ほとんどの場合、再コンポーズは、MutableState 割り当ての結果として生じます。それ以外の場合は、
invalidate
関数を使用して、現在のスコープの再コンポーズをトリガーすることをおすすめします。(Ifc992)Observe は有用な抽象化ではなくなりました。Observe を複製する必要がある場合は、コンポーズ可能なラムダ パラメータを実行するコンポーズ可能な関数を作成することにより、Observe の実装を複製できます。例:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct のサポートが終了し、@ComposableContract(restartable=false) に置き換えられました。(If4708)
最近導入された StateFlow 用のアダプタを追加しました。State が返される際に null になることがないように、初期値を事前入力できます(I61dd8、b/156233789)。
Flow 用のアダプタを追加しました。使用例: val value by flow.collectAsState()(If2198、b/153375923)
[Mutable] State プロパティ デリゲート演算子が、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
に更新しました。これにより、compose プラグインのコード生成方法が変更されます。概略としては、ランタイムが実行を適切に管理できるようにするため、@Composable 関数が追加の合成パラメータで生成され、このパラメータがその後の @Composable 呼び出しに渡されます。これは互換性を破る重大なバイナリの変更ですが、compose のすべての許可される使用方法でソースレベルの互換性が保持されます。(I7971c)アンビエント API を大幅に変更しました。詳細については、ログと
Ambient<T>
のドキュメントをご覧ください(I4c7ee、b/143769776)ui-livedata(LiveData 用アダプタを含む新しいアーティファクト)を追加しました。使用例: val value by liveData.observeAsState()(Ie9e8c、b/150465596)
明示的な初期値のない Rx アダプタが非推奨になりました。null を使用することは、必ずしも最適なデフォルトではありません。たとえば、List を使用する場合は、emptyList() などの妥当なデフォルトから始めることをおすすめします。(I00025、b/161348384)
ui-rxjava2(RxJava2 用アダプタを含む新しいアーティファクト)を追加しました。使用例: val value by observable.subscribeAsState()(Ifab4b、b/153369097)
savedInstanceState()
で null 許容型を使用できるようになりました。(I6847f、b/153532190)新しい listSaver() と mapSaver() により、カスタムの Saver オブジェクトを簡単に記述できるようになりました。(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 の各 composable も非推奨になりました。代わりに androidx.ui.input.TextFieldValue を使用してください。(I4066d、b/155211005)
- 非推奨となった DrawBackground API を削除し、Modifier の drawBackground 拡張機能 API に置き換えました。色、ブラシ、ペイントに関する drawBackground 実装をリファクタリングし、コードパスを削減するとともに、コンポジションの一部として Modifier を作成する必要をなくしました。(I0343a)
- キャンバスを公開するハイレベルの Compose API を更新して、代わりに CanvasScope を公開するようにしました。これにより、ユーザーが独自の Paint オブジェクトを維持管理する必要がなくなります。引き続きキャンバスの利用が必要なユーザーは、drawCanvas 拡張メソッドを使用できます。このメソッドにより、対象のキャンバスに対して Draw コマンドを実行するコールバックが行われます。(I80afd)
- WithConstraints 後置ラムダ API が変更されました。2 つのパラメータに代わってレシーバ スコープが設けられ、constraints と 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 に変更しました。このパラメータを補うために tight パラメータの名前を変更しました。(If4738)
- WithConstraint に LayoutDirection パラメータが追加されました(I6d6f7)
- background の名前が DrawBackground に変更され、デフォルトで記憶されるようになりました。(Ia0bd3)
- ButtonStyle を別の関数に置き換え、テキスト(文字列)オーバーロードを削除しました。使用方法については、更新済みのサンプルをご覧ください。(If63ab、b/146478620、b/146482131)
runOnIdleCompose
とrunOnUiThread
が ComposeTestRule のメソッドではなくグローバル関数になりました。(Icbe8f)
外部からの協力
- Looper や Handler などの不要な API が Compose Runtime 移植レイヤから削除されました。(I6847d)
- 初期値のない
Flow<T>.collectAsState()
が非推奨になりました。代わりにStateFlow<T>
を使用するか、明示的な初期値を渡してください。(I63f98、b/157674865)