Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Compose Runtime

Compose のプログラミング モデルと状態管理の基本ビルディング ブロックと、Compose コンパイラ プラグインがターゲットとするコアランタイム。
最新の更新 現在の安定版リリース 次のリリース候補 ベータ版リリース アルファ版リリース
2020 年 11 月 11 日 - - - 1.0.0-alpha07

構造

Compose は、androidx 内の 7 つの Maven Group ID を組み合わせたものです。各グループには対象とする機能のサブセットが含まれ、それぞれに固有のリリースノートがあります。

次の表に、各グループの説明と、それぞれのリリースノートのリンクを示します。

グループ説明
compose.animationJetpack Compose アプリ内でアニメーションを作成して、ユーザー エクスペリエンスを拡充します。
compose.compiler@Composable 関数を変換し、Kotlin コンパイラ プラグインで最適化を有効にします。
compose.foundationすぐに使用できるビルディング ブロックで Jetpack Compose アプリを作成し、独自のデザイン システム要素を構築する基盤を拡張します。
compose.materialすぐに使用できるマテリアル デザイン コンポーネントで Jetpack Compose UI を構築します。Compose の上位レベルのエントリ ポイントであり、www.material.io のガイドラインと適合するコンポーネントを提供するように設計されています。
compose.runtimeCompose のプログラミング モデルと状態管理の基本ビルディング ブロックと、Compose コンパイラ プラグインがターゲットとするコアランタイム。
compose.uiレイアウト、描画、入力など、デバイスの操作に必要な Compose UI の基本コンポーネント。
uiJetpack Compose ライブラリを操作します。

依存関係の宣言

Compose への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

dependencies {
    implementation "androidx.compose.runtime:runtime:1.0.0-alpha03"
    implementation "androidx.compose.runtime:runtime-livedata:1.0.0-alpha03"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.0.0-alpha03"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha03"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.0.0

バージョン 1.0.0-alpha07

2020 年 11 月 11 日

androidx.compose.runtime:runtime-*:1.0.0-alpha07 がリリースされました。バージョン 1.0.0-alpha07 に含まれるコミットについては、こちらをご覧ください。

新機能

API の変更

  • @UnionType アノテーションのサポートが終了しました(I57cde
  • アンビエントを提供する代替手段として provideDefault が追加されました。アンビエント値がまだ提供されていない場合にのみ設定されるアンビエント値を指定するために使用できます。(Id6635b/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 に移動しました。(I0fa98b/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 が必要です。
    • 再コンポジションから進行中または長期のプロセス(DisposableEffects や LaunchedTasks などの)にデータをパブリッシュする rememberUpdatedState API を追加しました。
    • Id50b9
  • MutableVector に RandomAccess が実装されました(I85d73b/170461551
  • コンポジションによって管理されるオブジェクトにコンポジションの副作用を適用するために、SideEffect コンポーザブルを追加しました。SideEffect は、onCommit コンポーザブルを置き換えることを目的としています。(Ia77c2
  • 新しい試験運用版 API RestorableStateHolder。これにより、[savedInstanceState] と [rememberSavedInstanceState] で定義されたサブツリーの状態を保存してから廃棄し、次回に復元された状態でコンポーズし直すことができます。(I66884b/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() という名前に変更されました(Ib2f32b/168293643b/167972292b/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 に含まれるコミットについては、こちらをご覧ください

API の変更

  • レイアウトや図形描画のモニタリング スコープを、有効でなくなった後に収集できるように、OwnerScope を追加しました。(Ic4cf8
  • 計算に基づいて状態オブジェクトを作成するための derivedStateOf API を追加し、他の状態オブジェクトを読み込んで(そこから導出して)状態オブジェクトを作成するようにしました。(If758b
  • SnapshotStateObserver 用の TestOnly API を追加しました。(I6e2a9

バグの修正

  • foundation.Box はサポートが終了しました。代わりに foundation.layout.Box を使用してください。(Ie5950b/167680279

バージョン 1.0.0-alpha03

2020 年 9 月 16 日

androidx.compose.runtime:runtime-*:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれるコミットについては、こちらをご覧ください

API の変更

  • CompositionCoroutineScopeMonotonicFrameClock を実装しなくなりました。withFrameNanos の呼び出し元は、トップレベル関数を明示的にインポートする必要があります。(Icb642b/166778123

バグの修正

  • onNodewaitForIdle などのグローバル テスト関数のサポートは終了しました。ComposeTestRule で定義されている新しい同等の関数に移行してください(I7f45a
  • launchInComposition がディスパッチされていないコルーチンを開始しないようになりました(Ief6afb/166486000

バージョン 1.0.0-alpha02

2020 年 9 月 2 日

androidx.compose.runtime:runtime-*:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれるコミットについては、こちらをご覧ください。

API の変更

  • Snapshot データの変更の消費および生成用に snapshotFlow および withMutableSnapshot API が追加されました。(I3e722
  • コンポーズ可能な関数の呼び出し規則が変更されました。これは互換性を破るバイナリの変更です。このバージョンの Compose コンパイラ プラグインで動作するには、すべてのライブラリを再コンパイルする必要があります。

    変更された API は明示的なオプトインがあるコンパイラ API だけであるため、ソースレベルで互換性を破る変更はありません。(I7afd2b/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 の変更

  • カスタム出力では、1 つ以上のセッターをスキップし、その出力とは関係なく再コンポーズできることを宣言できるようになりました。(Ibbd13
  • サポートが終了した FrameManager の呼び出しを削除しました。

    内部コンポーズ API が変更され、mutableStateof() などの状態オブジェクトを追跡するオーバーヘッドが減りました。(I80ba6

  • 明確化のため、state { ... } composable のサポートを終了し、remember { mutableStateOf(...) } の明示的な呼び出しに置き換えました。これにより、状態管理の API サーフェス全般とコンセプトの数が縮小され、クラス プロパティ委任の by mutableStateOf() パターンと一致するようになります。(Ia5727

  • Flow.collectAsState は、デフォルト ディスパッチャを Dispatchers.Main にせず、コンポジション自体から決定するようになりました。(I9c1d9

  • 状態を保存する何かが for ループ内で使用されたときにクラッシュする問題が修正されました。savedInstanceState() で同じキーを使用できるようになり、これに合わせて UiSavedStateRegistry の API が調整されました。(I4ab76b/160042650b/156853976b/159026663b/154920561

バグの修正

  • emitView のサポートが終了しました。Compose 内で View を出力する場合、可能であれば、代わりに AndroidView を使用してください。View と ViewGroup を直接コンポーズする方法は、将来サポートされなくなります。ただし、これらがコンポジション ツリーに残っていて、AndroidView を使用してコンポーズされる場合は除きます。(I29b1eb/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() をオーバーライドしないクラスを使用する場合など)、アプリに目立った影響はありません。

    equals() をオーバーライドするクラス(data クラスなど)では、パフォーマンスが低下する可能性があります。これは、mutableStateOf() に代入された場合にデフォルトで equals() メソッドが呼び出されるためです。

    mutableStateOf()ambientOf()savedInstanceStateOf() の呼び出しにポリシー パラメータ policy = referentialEqualityPolicy() を追加すると、以前の動作に戻ります。(Ic21a7

  • RowColumn をインライン関数にしました。これにより、使用する際のオーバーヘッドが大幅に削減されます。(I75c10

バグの修正

  • setViewContent のサポートが終了しました。代わりに setContent を使用してください。(I7e497b/160335130
  • MonotonicFrameAnimationClock を追加して、MonotonicFrameClock を AnimationClockObservable として使用できるようにしました。これにより、新しいコルーチン ベースのクロックと、従来のコールバック ベースのクロックを使用している API との隙間が埋まりました。

    ManualAnimationClock に相当する MonotonicFrameClock は ManualFrameClock になりました。(I111c7b/161247083

  • Modifier.stateDraggable は、全面的に書き直され、名前が Modifier.swipeable に変わりました。新しく SwipeableState クラスが導入され、DrawerState と BottomDrawerState が SwipeableState クラスを継承するようにリファクタリングされました。[Modal/Bottom]DrawerLayout が onStateChange パラメータを取らなくなりました。(I72332b/148023068

  • Modifier.plus のサポートが終了しました。代わりに Modifier.then を使用してください。then により、順序が明確化され、Modifier.padding().background() + anotherModifier と書いてチェーンを分断し可読性を下げることが防止されます。(Iedd58b/161529964

  • SubcomposeLayout を追加しました。これは、測定中に後にならないと使用できない値を使用してサブツリーをコンポーズする場合に、子をコンポーズできるようにする低レベル プリミティブです。たとえば、WithConstraints は SubcomposeLayout を使用せずに実装されています。(I25cc8

  • material の FilledTextField を TextField に、foundation の TextField を BaseTextField に名前変更し、シンプルで望ましい API を簡単に見つけて使用できるようにしました。(Ia6242b/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 に含まれるコミットについては、こちらをご覧ください

依存関係の更新

  • 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 }
     )
    }
    

    I409e8b/152050010b/146362815b/146342522b/143413369b/135715219b/143263925b/139653744

  • Compose のコンパイラにおけるコード生成の仕様を変更しました。変更前の Compose コンパイラでは、コンポーズ可能な関数の呼び出し部分を変換していました。変更後はコンポーズ可能な関数の本文を変換し、呼び出し部分での変換は一部を除いて行いません。

    つまり、Compose ランタイムとのロジック上のやり取りは、呼び出し部分ではなく関数本文の開始部分で発生します。

    この変更は Compose の使用方法に関わらずソース互換であり、Compose を使用していても通常はコードを更新する必要はありません。

    この処理をサポートするため、すべてのコンポーズ可能な関数の JVM の署名が変更されました。コンポーズ可能な関数でパラメータを 1 つ受け取る場合、3 つのパラメータを受け取る関数に変換されます。追加されるパラメータは Composer と「key」整数です。ビットマスク整数として、呼び出しを通じてメタデータを伝達する際に使用されます。

    なお、デフォルトの引数がコンポーズ可能な関数に変換されるようになっています。変換時に、関数の合成によるオーバーロードがデフォルトで行われることはないため、定義される関数の数は少なくなります。

    今回の変更による確認済みの意図的な動作変更は次のとおりです。

    1. 一部の呼び出しが、変更前にはスキップされなかった箇所でスキップされる。
    2. デフォルトの引数を含む式で、コンポーズ可能な式が正しく登録および処理される。

    最適化に関しては、次の内容が含まれます。 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 が更新され、コンパイル時パラメータが追加されました。(I60756b/143464846

  • sortWith と removeRange を MutableVector に追加しました。(Icccf7

  • CompositionLifecycleObserver のデフォルトのメソッド実装を追加しました。(I24289

  • Applier には、コンポジションを破棄するための clear() メソッドが必要になりました。(Ibe697

  • asMutableList() を MutableVector に追加しました。これにより、リスト全体をコピーしなくても公開 API に渡せるようになりました。(I298df

  • コンポジション内の管理対象の CoroutineScope を取得するための rememberCoroutineScope() を追加して、イベントに応じてジョブを起動できるようにしました。(I0e264

  • MutableVector は、標準の Collection インターフェースを実装しない新しいコレクションです。このコレクションは、他の要件を超える速度を提供し、内部実装でのみ使用されます。(I8ebd6

  • Compose が必要とする Kotlin のバージョンの問題を避けるために、StableMutableListStableMutableMap を一時的に削除しました。これらのインターフェースは、Compose が問題のないバージョンの Kotlin に更新され次第、再導入される予定です。

    SnapshotStateListSnapshotStateMap は現在公開されていますが、StableMutableListStableMutableMap が再導入され次第、サポート終了となります。(Ia7769

  • アニメーションのタイミングをサポートする最上位レベルの withFrameNanos 関数を追加しました。(Ie34c5

  • @Untracked アノテーションのサポートが終了しました。@ComposableContract(tracked=false) に置き換えます。(Id211e

  • RestartableFunction および関連する API の名前が ComposableLambda などに変更されました。これらの API をターゲットとしていたのはコンパイラのみのため、通常はこの名前変更がソースレベルの互換性に影響することはありません。この名前変更の主な目的は、このクラスがスタック トレースに表示されたときにその長所を伝えるためです。(I7eb25

  • @Composable アノテーションをクラスで使用できなくなりました。(Ia5f02

  • Ambient<T> が @Immutable ではなく @Stable になりました。(I0b4bb

  • この変更が行われる前、compose コンパイラ プラグインは、スコープ内の解決された「composer」に「emit 演算子」メソッドが見つかった場合、@Composable 関数内のコンストラクタの呼び出しに対して自明でないインターセプトを実行していました。(I5205ab/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 になることがないように、初期値を事前入力できます。(I61dd8b/156233789

  • Flow 用のアダプターを追加しました。使用例: val value by flow.collectAsState()(If2198b/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 が返す Compositiondispose メソッドを使用してください。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> のドキュメントをご覧ください。(I4c7eeb/143769776

  • ui-livedata(Live Data 用アダプターを含む新しいアーティファクト)を追加しました。使用例: val value by liveData.observeAsState()(Ie9e8cb/150465596

  • 明示的な初期値のない Rx アダプターが非推奨になりました。null を使用することは、必ずしも最適なデフォルトではありません。たとえば、List を使用する場合は、emptyList() などの妥当なデフォルトから始めることをおすすめします。(I00025b/161348384

  • ui-rxjava2(RxJava2 用アダプターを含む新しいアーティファクト)を追加しました。使用例: val value by observable.subscribeAsState()(Ifab4bb/153369097

  • savedInstanceState() で null 許容型を使用できるようになりました。(I6847fb/153532190

  • 新しい listSaver() と mapSaver() により、カスタムの Saver オブジェクトを簡単に記述できるようになりました。(I8cf68b/152331508

  • 新しい関数: savedInstanceState() および rememberSavedInstanceState()。これらは state() や remember() に似ていますが、保存されたインスタンスの状態のサポートが組み込まれています。(If1987b/152025209

バグの修正

  • runOnIdleCompose の名前が runOnIdle に変更されました。(I83607
  • LayoutNode API が試験運用版になりました。(I4f2e9
  • androidx.ui.foundation.TextFieldValue と androidx.ui.input.EditorValue のサポートが終了しました。この型を使用する TextField、FilledTextField、CoreTextField の各 composable もサポートが終了しました。代わりに androidx.ui.input.TextFieldValue を使用してください。(I4066db/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 プロパティが用意されました。(I91b9ab/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() メソッドを追加しました。(Ibacedb/152919067
  • ColoredRect のサポートが終了しました。代わりに Box(Modifier.preferredSize(width, height).drawBackground(color)) を使用してください。(I499fab/152753731
  • 修飾子と演算子を工場出荷時の拡張機能に置き換えました(I225e4
  • RowScope と ColumnScope のメンバーに、行と列の外部からアクセスできるようになりました。(I3a641
  • LayoutFlexible の名前を LayoutWeight に変更しました。このパラメータを補うために tight パラメータの名前を変更しました。(If4738
  • WithConstraints に LayoutDirection パラメータが追加されました。(I6d6f7
  • background の名前が DrawBackground に変更され、デフォルトで記憶されるようになりました。(Ia0bd3
  • ButtonStyle を別の関数に置き換え、テキスト(文字列)オーバーロードを削除しました。使用方法については、更新済みのサンプルをご覧ください。(If63abb/146478620b/146482131
  • runOnIdleComposerunOnUiThread が ComposeTestRule のメソッドではなくグローバル関数になりました。(Icbe8f

外部からの協力

  • Looper や Handler などの不要な API が Compose Runtime 移植レイヤから削除されました。(I6847d
  • 初期値のない Flow<T>.collectAsState() が非推奨になりました。代わりに StateFlow<T> を使用するか、明示的な初期値を渡してください。(I63f98b/157674865