Compose Runtime

Elemen penyusun yang penting untuk model pemrograman dan pengelolaan status Compose, serta runtime inti untuk ditargetkan oleh Plugin Compiler Compose.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
20 Maret 2024 1.6.4 - - 1.7.0-alpha05

Struktur

Compose adalah kombinasi 7 ID Grup Maven dalam androidx. Setiap Grup berisi subkumpulan fungsi yang ditargetkan, masing-masing dengan kumpulan catatan rilisnya sendiri.

Tabel ini menjelaskan grup tersebut dan disertai link ke setiap kumpulan catatan rilis.

GrupDeskripsi
compose.animationMem-build animasi di aplikasi Jetpack Compose untuk memperkaya pengalaman pengguna.
compose.compilerMentransformasi fungsi @Composable dan mengaktifkan pengoptimalan dengan plugin compiler Kotlin.
compose.foundationMenulis aplikasi Jetpack Compose dengan elemen penyusun siap pakai dan memperluas dasar untuk mem-build bagian sistem desain Anda sendiri.
compose.materialMem-build UI Jetpack Compose dengan Komponen Desain Material siap pakai. Ini adalah titik entri pada tingkat yang lebih tinggi untuk Compose, yang dirancang untuk menyediakan komponen yang cocok dengan yang dijelaskan di www.material.io.
compose.material3Mem-build UI Jetpack Compose dengan Komponen Desain Material 3, evolusi berikutnya dari Desain Material. Material 3 menyertakan tema dan komponen yang diperbarui serta fitur personalisasi Material You, seperti warna dinamis. Material 3 juga didesain agar selaras dengan gaya visual dan UI sistem Android 12 yang baru.
compose.runtimeElemen penyusun yang penting untuk model pemrograman dan pengelolaan status Compose, serta runtime inti untuk ditargetkan oleh Plugin Compose Compiler.
compose.uiKomponen dasar compose UI yang diperlukan untuk berinteraksi dengan perangkat, termasuk tata letak, gambar, dan input.

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Compose, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.6.4")
    implementation("androidx.compose.runtime:runtime-livedata:1.6.4")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.6.4")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Untuk informasi dependensi selengkapnya, lihat Menambahkan dependensi build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Runtime Tracing Versi 1.0

Versi 1.0.0-beta01

29 November 2023

androidx.compose.runtime:runtime-tracing:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Versi 1.0.0-alpha05

15 November 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Membatasi dependensi ke versi stabil paling rendah yang didukung (yaitu compose-runtime dan tracing-perfetto) - memperbaiki masalah saat pelacakan compose-runtime akan menghadirkan versi compose-runtime yang lebih baru ke dalam aplikasi.

Versi 1.0.0-alpha04

23 Agustus 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit ini.

Fitur Baru

  • Kompatibel dengan Benchmark dan Pelacakan Perfetto versi terbaru, memungkinkan dukungan untuk Pelacakan Komposisi saat memulai aplikasi (cold start) misalnya di AndroidX Benchmark dan Android Studio (mulai dari Hedgehog Beta 2).

Perubahan API

  • Mengganti nama androidx.tracing.perfetto.Trace menjadi androidx.tracing.perfetto.PerfettoSdkTrace. (I44af8)
  • Membuat Pelacakan Perfetto SDK API konsisten dengan android.os.Trace. (I73ba0, b/282199917)
  • Prasyarat untuk pelacakan saat memulai aplikasi. (Iad890)
  • Menggabungkan file API eksperimental dan publik (I0f2e1, b/278769092)

Versi 1.0.0-alpha02

8 Februari 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit ini.

Fitur Baru

  • Tidak ada perubahan fungsi. Beberapa pengoptimalan performa dalam dependensi downstream androidx.tracing:tracing-perfetto*.

Versi 1.0.0-alpha01

7 September 2022

androidx.compose.runtime:runtime-tracing:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit ini.

Fitur Baru

  • androidx.compose.runtime:runtime-tracing adalah library yang - dengan adanya alat yang mendukungnya (segera hadir) - memungkinkan pelacakan yang diperluas di aplikasi Compose. Rilis awal ini adalah 1.0.0-alpha01.

Versi 1.7

Versi 1.7.0-alpha05

20 Maret 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha05 dirilis. Versi 1.7.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Menghapus perubahan akhir pada komposisi yang dinonaktifkan (5950bc)

Versi 1.7.0-alpha04

6 Maret 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha04 dirilis. Versi 1.7.0-alpha04 berisi commit ini.

Peningkatan Performa

  • Memanggil Snapshot.current sekali per evaluasi status turunan (ee7daf)
  • Membaca currentRecord sekali per pengamatan dalam komposisi (b882b2)
  • Menghapus alokasi iterator yang tidak disengaja di snapshotFlow (231e56)
  • Mengaktifkan nonSkippingGroupOptimization untuk library Compose. Hal ini menyebabkan kode yang dihasilkan untuk semua fungsi composable yang tidak dapat dimulai ulang di androidx menjadi lebih efisien. Di masa mendatang, kami berencana untuk mengaktifkannya secara default. I(acbc08)

Versi 1.7.0-alpha03

21 Februari 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha03 dirilis. Versi 1.7.0-alpha03 berisi commit ini.

Perubahan API

  • Memperkenalkan grup penggantian untuk meningkatkan pendeteksian perubahan (0941b5)

Peningkatan Performa

  • Meningkatkan alokasi memori saat mendeteksi perubahan (53e7fd)
  • Memperbaiki kebocoran memori di composer (0e097d)
  • Menggunakan ScopeMap untuk meneruskan pembatalan validasi saat membuat ulang (e19a7e)
  • Optimalkan invalidasi dipetakan untuk hanya mempertahankan status turunan (f11c44)
  • Mengganti penggunaan IdentityArraySet dengan ScatterSet (db572e)
  • Mengoptimalkan removeScope di ScopeMap (bb0530)

Versi 1.7.0-alpha02

7 Februari 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha02 dirilis. Versi 1.7.0-alpha02 berisi commit ini.

Perbaikan Bug

  • Membatalkan lambda composable dalam subkomposisi pada frame yang sama. (98301c)
  • Panggil callback onRelease dengan urutan yang sama seperti onForgotten. (2cd790)
  • Filter status yang diubah yang tidak diamati di snapshotFlow. (796b80)

Peningkatan Performa

  • Mengubah observer snapshot saat sudah transparan. (f60f30)
  • Optimalkan SnapshotIdSet.lowest(). (7ae149)
  • Gunakan fold() bebas alokasi di SnapshotIdSet. (532b7d)
  • Menghapus alokasi iterator (83f96b)

Versi 1.7.0-alpha01

24 Januari 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha01 dirilis. Versi 1.7.0-alpha01 berisi commit ini.

Pengoptimalan Performa

  • Menambahkan kemampuan untuk membuat slot setelah grup turunan ditambahkan (b5960c)
  • Mengoptimalkan modifikasi perekaman status snapshot (28c3fe)
  • Mengaktifkan mode lewati yang kuat (ed1766)

Perbaikan Bug

  • Memperhitungkan meta parameter default di remember intrinsik (096665)
  • Membuat currentCompoundHashKey menjadi unik dalam lebih banyak kasus (d4a872)
  • Menyadari grup saat keluar dari panggilan fungsi inline (2a90fc)

Versi 1.6

Versi 1.6.4

20 Maret 2024

androidx.compose.runtime:runtime-*:1.6.4 dirilis. Versi 1.6.4 berisi commit ini.

Versi 1.6.3

6 Maret 2024

androidx.compose.runtime:runtime-*:1.6.3 dirilis. Versi 1.6.3 berisi commit ini.

Versi 1.6.2

21 Februari 2024

androidx.compose.runtime:runtime-*:1.6.2 dirilis. Versi 1.6.2 berisi commit ini.

Versi 1.6.1

7 Februari 2024

androidx.compose.runtime:runtime-*:1.6.1 dirilis. Versi 1.6.1 berisi commit ini.

Perbaikan Bug

  • Panggil callback onRelease dengan urutan yang sama seperti onForgotten. (2cd790)
  • Filter status yang diubah yang tidak diamati di snapshotFlow. (796b80)

Versi 1.6.0

24 Januari 2024

androidx.compose.runtime:runtime-*:1.6.0 dirilis. Versi 1.6.0 berisi commit ini.

Perubahan penting sejak versi 1.5.0

Fitur Baru

  • Menampilkan ulang pengecualian yang tertelan selama loop rekomposisi (4dff9a)

Pengoptimalan Performa

  • Mengoptimalkan modifikasi perekaman status snapshot (28c3fe)
  • Mengoptimalkan rememberSaveable (f01d79)
  • Tunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)
  • Meningkatkan kualitas pemberian nilai lokal komposisi (a337ea)

Perbaikan Bug

  • Memperbaiki kebocoran memori tabel slot (73fcfe)
  • Lewati rekomposisi subkomposisi yang akan dihapus. (Ieeb99, b/254645321)
  • Hanya picu siklus proses RememberObserver saat disimpan dalam penghitungan remember. (f6b4dc)
  • Batasi pengambilan gambar $dirty ke lambda inline. (acfca0)
  • Memperbaiki konten dapat dipindahkan yang terkadang menerima lokal komposisi yang salah. (035cd6)

Versi 1.6.0-rc01

10 Januari 2024

androidx.compose.runtime:runtime-*:1.6.0-rc01 dirilis. Versi 1.6.0-rc01 berisi commit ini.

Versi 1.6.0-beta03

13 Desember 2023

androidx.compose.runtime:runtime-*:1.6.0-beta03 dirilis. Versi 1.6.0-beta03 berisi commit ini.

Versi 1.6.0-beta02

29 November 2023

androidx.compose.runtime:runtime-*:1.6.0-beta02 dirilis. Versi 1.6.0-beta02 berisi commit ini.

Versi 1.6.0-beta01

15 November 2023

androidx.compose.runtime:runtime-*:1.6.0-beta01 dirilis. Versi 1.6.0-beta01 berisi commit ini.

Perubahan API

  • Menerapkan Nilai stabilitas tertentu dalam anotasi. (274a4c)

Perbaikan Bug

  • Gunakan kebijakan referensial untuk status cakupan lokal komposisi dalam konteks. (83361c)
  • Batasi pengambilan $dirty ke lambda inline. (acfca0)
  • Memperbaiki konten dapat dipindahkan yang terkadang menerima lokal komposisi yang salah. (035cd6)
  • Gunakan peta hash tanpa pengalokasian yang lebih cepat di RecomposeScopeImpl. (d79494)
  • Gunakan ObjectIntMap di DerivedState. (21862e)
  • Gunakan IntRef untuk int SnapshotThreadLocal di DerivedState. (04eaf4)

Versi 1.6.0-alpha08

18 Oktober 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha08 dirilis. Versi 1.6.0-alpha08 berisi commit ini.

Perbaikan Bug

  • Hanya picu siklus proses RememberObserver saat disimpan dalam penghitungan remember. (f6b4dc)
  • Meningkatkan alokasi dalam pengurutan daftar pembatalan validasi. (954d63)
  • Gunakan peta baru yang tidak mengalokasikan di SnapshotStateObserver. (4303ce)
  • Hapus pembatalan validasi saat komposisi dinonaktifkan. (e001be)

Versi 1.6.0-alpha07

4 Oktober 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha07 dirilis. Versi 1.6.0-alpha07 berisi commit ini.

Perubahan API

  • SnapshotStateList kini ditandai sebagai RandomAccess untuk memungkinkan versi pengindeksan langsung dari helper daftar digunakan. (I5210c, b/219554654)

Versi 1.6.0-alpha06

20 September 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha06 dirilis. Versi 1.6.0-alpha06 berisi commit ini.

Versi 1.6.0-alpha05

6 September 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha05 dirilis. Versi 1.6.0-alpha05 berisi commit ini.

Versi 1.6.0-alpha04

23 Agustus 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha04 dirilis. Versi 1.6.0-alpha04 berisi commit ini.

Fitur Baru

  • Menampilkan ulang pengecualian yang tertelan selama loop rekomposisi (4dff9a)

Perubahan API

  • Menambahkan metode untuk menonaktifkan ReusableComposition, menghapus pengamatan, tetapi mempertahankan node di tempatnya. Komposisi yang dinonaktifkan dapat diaktifkan lagi dengan memanggil setContent. (Ib7f31)
  • Menambahkan antarmuka ReusableComposition untuk mengelola siklus proses dan penggunaan kembali subkomposisi. (I812d1, b/252846775)

Versi 1.6.0-alpha03

9 Agustus 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha03 dirilis. Versi 1.6.0-alpha03 berisi commit ini.

Perbaikan Bug

  • Memperbaiki pengoptimalan CompositionLocalProvider baru (3118e88)
  • Memperbaiki cara membongkar node konten yang dapat dipindahkan. (5e3d59b)

Versi 1.6.0-alpha02

26 Juli 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha02 dirilis. Versi 1.6.0-alpha02 berisi commit ini.

Fitur Baru & Peningkatan Performa

  • Mengoptimalkan rememberSaveable (f01d79)
  • Tunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)
  • Meningkatkan kualitas pemberian nilai lokal komposisi (a337ea)
  • SideEffect ditandai sebagai @ExplicitGroupsComposable untuk menghindari pembuatan grup. (I74815)
  • Menghindari perbandingan peta lokal komposisi saat digunakan kembali (782071)

Perubahan API

  • Menambahkan overload kasus khusus untuk CompositionLocalProviders yang menghindari overhead yang digunakan untuk mempercepat penyediaan beberapa nilai, tetapi merupakan overhead saat memberikan satu nilai. (I6d640, b/288169379)

Perbaikan Bug

  • Memperbaiki kebocoran memori tabel slot (73fcfe)
  • Memperbaiki cara memulihkan rememberSaveable saat stateSaver menampilkan null (90748c)

Versi 1.6.0-alpha01

21 Juni 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha01 dirilis. Versi 1.6.0-alpha01 berisi commit ini.

Perbaikan Bug

  • Lewati rekomposisi subkomposisi yang akan dihapus. (Ieeb99, b/254645321)
  • Mengurangi alokasi saat menerapkan snapshot. (I65c09)
  • Menghindari penghitungan readableHash dalam DerivedState jika snapshot tidak diubah (68c565)

Versi 1.5

Versi 1.5.4

18 Oktober 2023

androidx.compose.runtime:runtime-*:1.5.4 dirilis. Versi 1.5.4 berisi commit ini.

Versi 1.5.3

4 Oktober 2023

androidx.compose.runtime:runtime-*:1.5.3 dirilis. Versi 1.5.3 berisi commit ini.

Versi 1.5.2

27 September 2023

androidx.compose.runtime:runtime-*:1.5.2 dirilis. Versi 1.5.2 berisi commit ini.

Versi 1.5.1

6 September 2023

androidx.compose.runtime:runtime-*:1.5.1 dirilis. Versi 1.5.1 berisi commit ini.

Versi 1.5.0

9 Agustus 2023

androidx.compose.runtime:runtime-*:1.5.0 dirilis. Versi 1.5.0 berisi commit ini.

Perubahan API

  • Menghapus alokasi dalam rekomposisi, animasi warna, dan AndroidComposeView. (Ib2bfa)
  • Menambahkan anotasi @StateFactoryMarker, untuk menandai fungsi yang membuat status dan harus digabungkan dalam panggilan remember. (I64550)
  • Menambahkan versi primitif Status dan MutableState (fb3d89)
  • Menambahkan Snapshot.isApplyObserverNotificationPending (I672a5)
  • Menambahkan versi primitif State API, yang memungkinkan nilai Int, Long, Float, dan Double dilacak dalam objek State tanpa menimbulkan penalti untuk autoboxing. Gunakan metode factory baru mutableIntState(Int), mutableFloatStateOf(Float), dll untuk menggunakannya. (I48e43)

Perbaikan Bug

  • Lewati rekomposisi subkomposisi yang akan dihapus. (Ieeb99, b/254645321)
  • Jangan mempertahankan referensi snapshot di ComposerImpl (0206f7)
  • Jangan terapkan komposisi dua kali (f5791b)
  • Memastikan pembatalan validasi untuk nilai status turunan yang tidak diinisialisasi (aa2a92)
  • Panggil onEndChanges selama pembuangan komposisi. (62cc8c)
  • Memperbaiki pemindahan konten ke subkomposisi (4beb41)
  • Memperbaiki potensi deadlock (c1a425 dan 8edce0)
  • Recomposer yang dibuat untuk jendela Android kini hanya akan memblokir panggilan ke withFrameNanos, bukan semua komposisi saat menerima notifikasi ON_STOP. Artinya, jendela yang terkait dengan aktivitas yang dihentikan akan terus merekomposisi untuk perubahan data, tetapi animasi, atau pemanggil withFrameNanos lainnya, akan diblokir. (Id9e7f, b/240975572)
  • Menjalankan callback penonaktifan untuk LayoutNode sebelum membuang efek 3784073
  • Memperbaiki flag yang diubah untuk lambda yang dimulai ulang ea81df9
  • Memperbaiki regresi edit langsung untuk Composable dengan node 73fd4d8
  • ON_STOP harus menjeda siaran clock frame, bukan komposisi ae276f1
  • Membatalkan cakupan SnapshotStateObserver untuk status turunan yang tidak berubah 84d9b1c
  • Memperbaiki potensi dead-lock saat membuang komposisi 28761fc
  • Memperbaiki pemindahan konten ke subkomposisi 92d4156
  • Memperbaiki flag yang diubah untuk lambda yang dimulai ulang (8a03e9)
  • Menjalankan callback penonaktifan untuk LayoutNode sebelum membuang efek (8b0fa4)
  • Memperbaiki endToMarker() saat mengakhiri grup node. (d71d980)
  • Menggunakan grup SlotWriter saat ini untuk memeriksa penonaktifan (a0b518b)
  • Hapus fill di SlotTable.moveSlotGapTo() dan pindahkan untuk menutup (81f9935)
  • Memperbaiki pembatalan validasi yang hilang saat konten yang dapat dipindahkan dipindahkan (1d7c024)
  • Memperbaiki pembatalan validasi langsung untuk konten yang dapat dipindahkan (8676618)

Peningkatan Performa

  • Hindari penghitungan readableHash di DerivedState jika snapshot tidak diubah. (307102)
  • Pengurangan alokasi (I65c09, d7ea77, 727974, dan 445808 )
  • Pembatalan cepat compose CoroutineScopes (a55362 dan bd382f)
  • Timpa data objek status dengan data status yang tidak dapat diakses (c986960)
  • Menggunakan komposer cakupan yang benar saat membuat grup (9a5e5b6)
  • Menggunakan IdentityArraySet untuk menyimpan pembatalan validasi snapshot (7f60cca)
  • Mengurangi alokasi untuk pengamatan snapshot (5bc535f)

Versi 1.5.0-rc01

26 Juli 2023

androidx.compose.runtime:runtime-*:1.5.0-rc01 dirilis. Versi 1.5.0-rc01 berisi commit ini.

Perbaikan Bug

  • Tunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)

  • Tersedia pemeriksaan opsional untuk merekomendasikan migrasi panggilan mutableStateOf() ke jenis khusus untuk primitif yang sesuai. ID lintnya adalah AutoboxingStateCreation. Sebelumnya, pemeriksaan ini diaktifkan secara default untuk semua project. Untuk melihat peringatan ini di editor Android Studio dan output lint project Anda, ubah tingkat keparahannya dari informasi menjadi peringatan (atau yang lebih tinggi) dengan mendeklarasikan warning "AutoboxingStateCreation" di dalam konfigurasi build.gradle atau build.gradle.kts modul Anda seperti yang ditampilkan (I34f7e):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

Versi 1.5.0-beta03

28 Juni 2023

androidx.compose.runtime:runtime-*:1.5.0-beta03 dirilis. Versi 1.5.0-beta03 berisi commit ini.

Perbaikan Bug

Versi 1.5.0-beta02

7 Juni 2023

androidx.compose.runtime:runtime-*:1.5.0-beta02 dirilis. Versi 1.5.0-beta02 berisi commit ini.

Peningkatan Performa

  • Hindari penghitungan readableHash di DerivedState jika snapshot tidak diubah. (307102)

Versi 1.5.0-beta01

24 Mei 2023

androidx.compose.runtime:runtime-*:1.5.0-beta01 dirilis. Versi 1.5.0-beta01 berisi commit ini.

Perubahan API

  • Menghapus alokasi dalam rekomposisi, animasi warna, dan AndroidComposeView (Ib2bfa)
  • Menambahkan anotasi @StateFactoryMarker, untuk menandai fungsi yang membuat status dan harus digabungkan dalam panggilan remember. (I64550)
  • Menambahkan versi primitif Status dan MutableState (fb3d89)
  • Menambahkan Snapshot.isApplyObserverNotificationPending (I672a5)

Perbaikan Bug

  • Pengurangan alokasi (I65c09, d7ea77, 727974, dan 445808 )
  • Jangan mempertahankan referensi snapshot di ComposerImpl (0206f7)
  • Pembatalan cepat compose CoroutineScopes (a55362 dan bd382f)
  • Jangan terapkan komposisi dua kali (f5791b)
  • Memastikan pembatalan validasi untuk nilai status turunan yang tidak diinisialisasi (aa2a92)
  • Panggil onEndChanges selama pembuangan komposisi. (62cc8c)
  • Memperbaiki pemindahan konten ke subkomposisi (4beb41)
  • Memperbaiki potensi deadlock (c1a425
  • ON_STOP harus menjeda siaran jam frame, bukan komposisi (f4a2d1)
  • Memperbaiki flag yang diubah untuk lambda yang dimulai ulang (8a03e9)
  • Menjalankan callback penonaktifan untuk LayoutNode sebelum membuang efek (8b0fa4)

Kontribusi Eksternal

  • Menambahkan Snapshot.isApplyObserverNotificationPending (I672a5)

Versi 1.5.0-alpha04

10 Mei 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha04 dirilis. Versi 1.5.0-alpha04 berisi commit ini.

Perubahan API

  • Menambahkan versi primitif State API, yang memungkinkan nilai Int, Long, Float, dan Double dilacak dalam objek State tanpa menimbulkan penalti untuk autoboxing. Gunakan metode factory baru mutableIntState(Int), mutableFloatStateOf(Float), dll untuk menggunakannya. (I48e43)

Perbaikan Bug

  • Panggil onEndChanges selama pembuangan komposisi. Node fokus yang dihapus selama Composition.dispose berlangganan onEndChanges untuk mereset fokus.(03d4a47)

  • Memastikan pembatalan validasi untuk nilai status turunan yang tidak diinisialisasi. Setiap status turunan dikaitkan dengan daftar dependensinya di SnapshotStateObserver, yang digunakan untuk membatalkan cakupan yang terkait dengan status turunan setiap kali dependensi berubah. Perubahan dependensi didaftarkan di muka snapshot, yang dapat terjadi setelah status turunan dibaca (karena panggilan ke Snapshot.notifyObjectsInitialized()).

    Logika pengamatan status turunan sebelumnya di SnapshotStateObserver adalah membersihkan dependensi lama, lalu membaca nilai baru. Hal ini mengakibatkan kondisi race dengan pembatalan validasi yang terjadi dalam status dibersihkan, dengan pembatalan dependensi tidak terdaftar.

    Perubahan ini mengurutkan ulang pembacaan status turunan dan pembersihan dependensi, yang memastikan bahwa pembatalan validasi selalu terjadi dalam status valid. (c472be6)

Versi 1.5.0-alpha03

19 April 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha03 dirilis. Versi 1.5.0-alpha03 berisi commit ini.

Perubahan API

  • Recomposer yang dibuat untuk jendela Android kini hanya akan memblokir panggilan ke withFrameNanos, bukan semua komposisi saat menerima notifikasi ON_STOP. Artinya, jendela yang terkait dengan aktivitas yang dihentikan akan terus merekomposisi untuk perubahan data, tetapi animasi, atau pemanggil withFrameNanos lainnya, akan diblokir. (Id9e7f, b/240975572)

Perbaikan Bug

  • Memperbaiki potensi deadlock dalam daftar snapshot dan peta 5c1a425
  • Menjalankan callback penonaktifan untuk LayoutNode sebelum membuang efek 3784073
  • Memperbaiki flag yang diubah untuk lambda yang dimulai ulang ea81df9
  • Memperbaiki regresi edit langsung untuk Composable dengan node 73fd4d8
  • ON_STOP harus menjeda siaran clock frame, bukan komposisi ae276f1
  • Membatalkan cakupan SnapshotStateObserver untuk status turunan yang tidak berubah 84d9b1c
  • Memperbaiki potensi dead-lock saat membuang komposisi 28761fc
  • Memperbaiki pemindahan konten ke subkomposisi 92d4156

Versi 1.5.0-alpha02

5 April 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha02 dirilis. Versi 1.5.0-alpha02 berisi commit ini.

Fitur Baru

  • Operator getValue Kotlin kini dapat berupa composable (f174f6e)

Perbaikan Bug, Peningkatan Performa

  • Timpa data objek status dengan data status yang tidak dapat diakses (c986960)
  • Menggunakan komposer cakupan yang benar saat membuat grup (9a5e5b6)
  • Memperbaiki endToMarker() saat mengakhiri grup node. (d71d980)
  • Menggunakan grup SlotWriter saat ini untuk memeriksa penonaktifan (a0b518b)
  • Menggunakan IdentityArraySet untuk menyimpan pembatalan validasi snapshot (7f60cca)
  • Hapus fill di SlotTable.moveSlotGapTo() dan pindahkan untuk menutup (81f9935)
  • Memperbaiki pembatalan validasi yang hilang saat konten yang dapat dipindahkan dipindahkan (1d7c024)
  • Memperbaiki pembatalan validasi langsung untuk konten yang dapat dipindahkan (8676618)
  • Mengurangi alokasi untuk pengamatan snapshot (5bc535f)

Versi 1.5.0-alpha01

22 Maret 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha01 dirilis. Versi 1.5.0-alpha01 berisi commit ini.

Fitur Baru

  • Menambahkan Modifier.Node#coroutineScope untuk memungkinkan Modifier.Nodes meluncurkan coroutine (I76ef9)
  • Izinkan Modifier.Nodes membaca CompositionLocals dengan mengimplementasikan antarmuka CompositionLocalConsumerModifierNode. (Ib44df)

Versi 1.4

Versi 1.4.3

3 Mei 2023

androidx.compose.runtime:runtime-*:1.4.3 dirilis tanpa perubahan.

Versi 1.4.2

19 April 2023

androidx.compose.runtime:runtime-*:1.4.2 dirilis. Versi 1.4.2 berisi commit ini.

Perbaikan Bug

  • Memperbaiki potensi deadlock dalam daftar snapshot dan peta 2eb6570

  • Menambahkan konten ke SnapshotStateList atau SnapshotStateMap dapat mengalami deadlock jika perubahan dilakukan bersamaan dengan penulisan langsung ke kumpulan data status. Hal ini secara signifikan lebih mungkin ditemukan dengan perubahan yang diperkenalkan oleh 93fcae828b yang menggunakan penulisan langsung untuk merilis kumpulan data yang tidak digunakan.

  • Kunci sekarang diurutkan, sehingga kunci snapshot tidak pernah dicoba diambil saat kunci peta atau daftar ditahan.

Versi 1.4.1

5 April 2023

androidx.compose.runtime:runtime-*:1.4.1 dirilis. Versi 1.4.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki endToMarker() saat mengakhiri grup node. d71d980

Versi 1.4.0

22 Maret 2023

androidx.compose.runtime:runtime-*:1.4.0 dirilis. Versi 1.4.0 berisi commit ini.

Perubahan penting sejak versi 1.3.0

  • Gunakan nilai yang diinisialisasi dari LiveData untuk komposisi pertama 3680e25
  • Menambahkan ComposeNodeLifecycleCallback untuk mengamati siklus proses node compose. 8b6a258
  • Menambahkan properti parameterTypes ke ComposableMethod 7b6c7ad

Perbaikan Bug & Peningkatan Performa

  • Menghapus kedua indeks cakupan di SnapshotStateObserver 29f4a3e
  • Menambahkan grup yang diperlukan dalam isi lambda yang tidak dapat dilewati 7d06752
  • Meningkatkan karakteristik referensi memori status Snapshot 93fcae8
  • Hapus pengotakan di pencarian lokal komposisi 0875717
  • Gunakan kunci yang benar untuk grup node yang tidak dapat digunakan kembali 6388d8d
  • Melindungi SnapshotStateObserver dari penerapan berulang dan serentak 98cb6ba
  • Menambahkan pemeriksaan batas indeks-periksa dalam metode "get" IdentityArraySet 35a77d3
  • Mengupdate modul compose untuk menggunakan ekstensi ViewTreeLifecycleOwner 21c2122
  • Kirim notifikasi penerapan setelah Recomposer menyelesaikan frame. 98f2641
  • Memperbaiki indeks di luar batas error saat membatalkan Recomposer 8f8656f
  • Selalu paksa rekomposisi jika penyedia induk Komposisi telah berubah 9526fcc
  • Toleransi rekomposisi untuk Tugas yang dibatalkan a55f7ed
  • Meningkatkan penanganan invalidasi untuk komposer dalam jumlah besar 9b7ed67
  • Memperbaiki pembuatan grup penutup untuk pengembalian non-lokal b6f590c

Versi 1.4.0-rc01

8 Maret 2023

androidx.compose.runtime:runtime-*:1.4.0-rc01 dirilis. Versi 1.4.0-rc01 berisi commit ini.

Perbaikan Bug

Versi 1.4.0-beta02

22 Februari 2023

androidx.compose.runtime:runtime:1.4.0-beta02 dan androidx.compose.runtime:runtime-saveable:1.4.0-beta02 dirilis. Versi 1.4.0-beta02 berisi commit ini.

Versi 1.4.0-beta01

8 Februari 2023

androidx.compose.runtime:runtime-*:1.4.0-beta01 dirilis. Versi 1.4.0-beta01 berisi commit ini.

Perubahan API

  • ComposeNodeLifecycleCallback ditambahkan yang memungkinkan untuk mengamati siklus proses node Compose (I3731b)
  • Menambahkan @TestOnly ke Composer.disableSourceInformation() karena fungsi ini hanya aman untuk dipanggil dalam pengujian. (I896c8)

Perbaikan Bug

  • Menghapus pengotakan di pencarian lokal komposisi (62f66a)
  • Meningkatkan karakteristik referensi memori status Snapshot (dfb451)

Versi 1.4.0-alpha05

25 Januari 2023

androidx.compose.runtime:runtime:1.4.0-alpha05 dan androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 dirilis. Versi 1.4.0-alpha05 berisi commit ini.

Perubahan API

  • Lebih banyak jenis/nullability dari fungsi inline/tersembunyi yang tidak digunakan lagi (I24f91)

Versi 1.4.0-alpha04

11 Januari 2023

androidx.compose.runtime:runtime-*:1.4.0-alpha04 dirilis. Versi 1.4.0-alpha04 berisi commit ini.

Perubahan API

  • TestMonotonicFrameClock kini menggunakan anotasi eksperimental yang benar. (I95c9e)

Perbaikan Bug

  • Melindungi SnapshotStateObserver dari penerapan berulang dan serentak (d902fb)

Versi 1.4.0-alpha03

7 Desember 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha03 dirilis. Versi 1.4.0-alpha03 berisi commit ini.

Perubahan API

  • menambahkan metode publik baru ke class ComposableMethod yang serupa dengan java.lang.reflect.Method#getParameterTypes() (Iab0c3)

Perbaikan Bug

  • Notifikasi penerapan snapshot sekarang dikirim setelah Recomposer selesai menerapkan perubahan. (Iad6c0, b/222093277)

Versi 1.4.0-alpha02

9 November 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha02 dirilis. Versi 1.4.0-alpha02 berisi commit ini.

Versi 1.4.0-alpha01

24 Oktober 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha01 dirilis. Versi 1.4.0-alpha01 berisi commit ini.

Perubahan API

  • SnapshotStateList dan SnapshotStateMap kini memiliki penerapan eksplisit toList() dan toMap(), secara berurutan. Metode ini akan menampilkan kontennya saat ini tanpa harus membuat salinan karena menampilkan data internal yang tidak dapat diubah dan data ini digunakan untuk menyimpan kontennya. Nilai ini dapat digunakan, misalnya, untuk menghasilkan aliran nilai menggunakan snapshotFlow tanpa menyalin data. (Ica2bd)

Versi 1.3

Versi 1.3.3

11 Januari 2023

androidx.compose.runtime:runtime-*:1.3.3 dirilis. Versi 1.3.3 berisi commit ini.

  • Tidak ada perubahan sejak versi 1.3.2

Versi 1.3.2

7 Desember 2022

androidx.compose.runtime:runtime-*:1.3.2 dirilis. Versi 1.3.2 berisi commit berikut ini.

Perbaikan Bug

  • Diupdate agar mendukung androidx.compose.ui 1.3.2

Versi 1.3.1

9 November 2022

androidx.compose.runtime:runtime-*:1.3.1 dirilis. Versi 1.3.1 berisi commit ini.

Versi 1.3.0

24 Oktober 2022

androidx.compose.runtime:runtime-*:1.3.0 dirilis. Versi 1.3.0 berisi commit berikut ini.

Perubahan penting sejak versi 1.2.0

Penanganan Pengecualian/Dukungan Edit Live

Pelacakan Komposisi

Reflection API untuk Composable

Perbaikan Runtime

Sistem Snapshot

Versi 1.3.0-rc01

5 Oktober 2022

androidx.compose.runtime:runtime-*:1.3.0-rc01 dirilis. Version 1.3.0-rc01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki ArrayIndexOutOfBoundsException yang berasal dari tabel slot (b/249076084)

Versi 1.3.0-beta03

21 September 2022

androidx.compose.runtime:runtime-*:1.3.0-beta03 dirilis. Versi 1.3.0-beta03 berisi commit ini.

Perubahan yang Dapat Menyebabkan Gangguan Perilaku

  • Parameter untuk remember dan rememberCoroutineScope yang diubah menjadi crossinline. Perubahan ini akan melaporkan error untuk pengembalian awal, bukan mengizinkan pengembalian awal yang akan menyebabkan pelaporan error internal di lain waktu.
  • Perubahan ini berpotensi menyebabkan error compiler baru dilaporkan sehingga pengembalian non-lokal harus dihapus dari lambda yang diteruskan ke fungsi ini. (Ibea62)

Versi 1.3.0-beta02

7 September 2022

androidx.compose.runtime:runtime-*:1.3.0-beta02 dirilis. Versi 1.3.0-beta02 berisi commit ini.

Perbaikan Bug

Versi 1.3.0-beta01

24 Agustus 2022

androidx.compose.runtime:runtime-*:1.3.0-beta01 dirilis. Versi 1.3.0-beta01 berisi commit ini.

Perubahan API

  • Metode find telah ditambahkan ke CompositionData untuk memungkinkan alat developer yang menggunakan API ini bisa menemukan subgrup komposisi dengan cepat menggunakan identitasnya. (I5794f)

Versi 1.3.0-alpha03

10 Agustus 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha03 dirilis. Versi 1.3.0-alpha03 berisi commit ini.

Versi 1.3.0-alpha02

27 Juli 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Perubahan API

  • Menambahkan kembali ComposerKt.traceEventStart(Int, String) untuk kompatibilitas mundur (I6e6de)

Versi 1.3.0-alpha01

29 Juni 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Perubahan API

  • Memindahkan fungsi utilitas ke runtime (I4f729)

Versi 1.2

Versi 1.2.1

10 Agustus 2022

androidx.compose.runtime:runtime-*:1.2.1 dirilis. Versi 1.2.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki kebocoran memori: membuang snapshot bertingkat yang dibuat dari snapshot transparan b/239603305

Versi 1.2.0

27 Juli 2022

androidx.compose.runtime:runtime-*:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak versi 1.1.0

  • Compose Runtime memiliki beberapa fitur yang diperkenalkan di versi 1.2.0, beserta banyak penstabilan perbaikan bug. Fitur baru yang paling signifikan adalah pengantar movableContentOf API, yang dapat digunakan untuk mengaktifkan UX kompleks seperti transisi elemen bersama. movableContentOf API mengonversi lambda composable menjadi lambda yang memindahkan statusnya, dan node yang sesuai, ke lokasi baru yang memanggilnya. Saat panggilan sebelumnya meninggalkan komposisi, status dipertahankan untuk sementara. Jika panggilan baru ke lambda memasuki komposisi, status dan Node terkait akan dipindahkan ke lokasi panggilan baru. Jika tidak ada panggilan baru yang ditambahkan, status akan dihapus secara permanen dan ingat bahwa observer akan diberi tahu.

  • Jika lambda movableContentOf dipanggil beberapa kali dalam komposisi yang sama, status dan node baru akan dibuat untuk setiap panggilan. Saat panggilan meninggalkan komposisi dan panggilan baru masuk, status akan dipindahkan dari panggilan keluar pertama ke panggilan masuk sesuai urutan pemanggilan. Semua status yang tidak diklaim oleh panggilan baru akan dihapus secara permanen.

  • Selain fitur tersebut dan beberapa fitur baru lainnya, banyak waktu yang dihabiskan untuk menstabilkan runtime dan sistem status Snapshot. Berbagai kebocoran memori telah dihapus dan jalur kode telah dioptimalkan.

  • Daftar ringkasan perubahan dapat ditemukan di bawah:

Fitur Baru di 1.2

Performa di 1.2

Perbaikan Bug di 1.2

Versi 1.2.0-rc03

29 Juni 2022

androidx.compose.runtime:runtime-*:1.2.0-rc03 dirilis. Versi 1.2.0-rc03 berisi commit ini.

Perbaikan Bug

  • Pengamatan status turunan sebelumnya dihapus tanpa syarat dari cakupan rekomposisi dan komposisi, yang merusak cakupan lain yang mungkin masih mengamati status turunan. Perubahan ini hanya menghapus instance status turunan jika tidak lagi diamati oleh cakupan lain. (b/236618362)

Versi 1.2.0-rc02

22 Juni 2022

androidx.compose.runtime:runtime-*:1.2.0-rc02 dirilis. Versi 1.2.0-rc02 berisi commit ini.

Versi 1.2.0-rc01

15 Juni 2022

androidx.compose.runtime:runtime-*:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

Perubahan API

  • Antarmuka di library Compose kini dibuat menggunakan metode antarmuka default jdk8 (I5bcf1)

Versi 1.2.0-beta03

1 Juni 2022

androidx.compose.runtime:runtime-*:1.2.0-beta03 dirilis. Versi 1.2.0-beta03 berisi commit ini.

Versi 1.2.0-beta02

18 Mei 2022

androidx.compose.runtime:runtime-*:1.2.0-beta02 dirilis. Versi 1.2.0-beta02 berisi commit ini.

Versi 1.2.0-beta01

11 Mei 2022

androidx.compose.runtime:runtime-*:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit ini.

Fitur Baru

  • Ini adalah rilis beta pertama 1.2.

Perubahan API

  • Menambahkan Snapshot.unsafeEnter/unsafeLeave eksperimental (I108f3)
  • Menambahkan Snapshot.asContextElement() API eksperimental (Iff072)
  • Anotasi @ComposableTarget dan anotasi yang ditandai dengan @ComposableTargetMarker kini dapat digunakan pada cakupan file menggunakan awalan @file. Menggunakan anotasi target pada cakupan file akan menyebabkan compiler menganggap semua fungsi composable dalam file tersebut ditujukan untuk menargetkan applier terkait. Misalnya, penggunaan @file:UiComposable akan mendeklarasikan bahwa semua fungsi @Composable menargetkan applier Compose UI. Fungsi yang perlu menargetkan applier lain harus secara eksplisit menyediakan anotasi penanda target untuk applier yang diinginkan. (I40804)

Versi 1.2.0-alpha08

20 April 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha08 dirilis. Versi 1.2.0-alpha08 berisi commit ini.

Perubahan API

  • Menambahkan TracingInProgress ke antarmuka CompositionTracer. (Ic6f12)
  • Menambahkan recomposeScopeIdentity ke Composer (I0c873)
  • Membatasi API perekaman aktivitas (Composer.setTracer) ke OptIn(InternalComposeTracingApi). (I9187f)
  • Menambahkan ResuableContentHost yang memungkinkan kontrol yang lebih baik sepanjang waktu status yang dibuat untuk konten yang dapat digunakan kembali. Misalnya, jika suatu subkomposisi tidak digunakan untuk sementara, konten dapat dinonaktifkan. Hal ini menyebabkan semua status yang diingat dalam komposisi tersebut dilupakan dan memicu, misalnya, semua efek sekali pakai. (I2c0f2, b/220322704)

Versi 1.2.0-alpha07

6 April 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha07 dirilis. Versi 1.2.0-alpha07 berisi commit ini.

Perubahan API

  • Fungsi baru Snapshot.withoutReadObservation { ... } telah ditambahkan. Fungsi ini memungkinkan pengguna menjalankan lambda yang diteruskan tanpa mengikuti perubahan nilai status yang dibaca selama blok ini. Anda dapat merasakan manfaatnya dalam kasus penggunaan saat Anda ingin memanfaatkan proses tulis/baca thread berbasis snapshot, tetapi ingin dapat membaca nilainya tanpa menyebabkan rekomposisi atau pengukuran ulang yang tidak perlu. (I9f365, b/214054486)

Versi 1.2.0-alpha06

23 Maret 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha06 dirilis. Versi 1.2.0-alpha06 berisi commit ini.

Versi 1.2.0-alpha05

9 Maret 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha05 dirilis. Versi 1.2.0-alpha05 berisi commit ini.

Kontribusi Eksternal

  • Diupdate untuk menggunakan coroutine Kotlinx 1.6.0 (I3366d)

Versi 1.2.0-alpha04

23 Februari 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha04 dirilis. Versi 1.2.0-alpha04 berisi commit ini.

Perubahan API

  • Menambahkan ComposableTarget, ComposableTargetMarker, dan ComposableOpenTarget yang memungkinkan pelaporan waktu kompilasi saat fungsi composable dipanggil, menargetkan applier yang tidak dirancang untuk digunakan.

    Dalam sebagian besar kasus, anotasi dapat ditentukan oleh plugin compiler Compose, sehingga penggunaan anotasi ini secara langsung seharusnya jarang terjadi. Kasus yang tidak dapat ditentukan mencakup pembuatan dan penggunaan applier kustom, fungsi composable abstrak (seperti metode antarmuka), kolom, atau variabel global yang merupakan lambda composable (variabel dan parameter lokal ditentukan), atau saat menggunakan ComposeNode atau fungsi composable terkait.

    Untuk applier kustom, fungsi composable yang memanggil ComposeNode atau ReusableComposeNode perlu menambahkan anotasi CompoableTarget untuk fungsi dan jenis parameter lambda composable. Namun, sebaiknya buat anotasi yang dianotasikan dengan ComposableTargetMarker, lalu anotasi yang ditandai akan digunakan sebagai ganti ComposableTarget secara langsung. Anotasi composable yang ditandai dengan ComposableTargetMarker setara dengan ComposbleTarget dengan nama class atribut yang sepenuhnya memenuhi syarat sebagai parameter applier. Untuk contoh penggunaan ComposableTargetMarker, lihat anroidx.compose.ui.UiComposable. (I38f11)

Versi 1.2.0-alpha03

9 Februari 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha03 dirilis. Versi 1.2.0-alpha03 berisi commit ini.

Perubahan API

  • Menambahkan movableContentOf yang mengonversi lambda composable menjadi lambda yang memindahkan statusnya, dan node yang sesuai, ke lokasi baru yang memanggilnya. Saat panggilan sebelumnya meninggalkan komposisi, status dipertahankan untuk sementara. Jika panggilan baru ke lambda memasuki komposisi, status dan node terkait akan dipindahkan ke lokasi panggilan baru. Jika tidak ada panggilan baru yang ditambahkan, status akan dihapus secara permanen dan ingat bahwa observer akan diberi tahu.

    Jika lambda movableContentOf dipanggil beberapa kali dalam komposisi yang sama, status dan node baru akan dibuat untuk setiap panggilan. Saat panggilan meninggalkan komposisi dan panggilan baru masuk, status akan dipindahkan dari panggilan keluar pertama ke panggilan masuk sesuai urutan pemanggilan. Semua status yang tidak diklaim oleh panggilan baru akan dihapus secara permanen. (Ib4850)

  • Menambahkan API perekaman aktivitas ke komposisi guna memungkinkan alat untuk memberikan perekaman aktivitas fungsi composable yang lebih mendetail. Kini compiler ini menghasilkan panggilan ke API perekaman aktivitas yang menyertakan informasi sumber. (Ib0eb5)

    Untuk menghapus panggilan ini dan informasi sumber terkait dari build rilis, tambahkan aturan Proguard berikut:

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • Menambahkan InternalComposeScope yang memungkinkan alat mengidentifikasi composable selama rekomposisi. (I07a3f)

Versi 1.2.0-alpha02

26 Januari 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Versi 1.2.0-alpha01

12 Januari 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Perubahan API

  • Menambahkan kolom identity ke CompositionData untuk menghasilkan ID invarian di Layout Inspector. (Ic116e)

Update Dependensi

  • Sekarang bergantung pada Kotlin 1.6.10.

Versi 1.1

Versi 1.1.1

23 Februari 2022

androidx.compose.runtime:runtime-*:1.1.1 dirilis. Versi 1.1.1 berisi commit ini.

Perbaikan Bug

Versi 1.1.0

9 Februari 2022

androidx.compose.runtime:runtime-*:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Perubahan penting sejak versi 1.0.0

  • Dukungan yang stabil untuk Efek overscroll Android 12
  • Peningkatan penentuan ukuran target sentuh
  • Perhatikan bahwa, sehubungan dengan Compose 1.0, komponen Material akan memperluas ruang tata letaknya untuk memenuhi panduan aksesibilitas Material terkait ukuran target sentuh. Misalnya, target sentuh Button akan diperluas hingga ukuran minimum 48x48dp, meskipun Anda menyetel ukuran Button menjadi lebih kecil. Tindakan ini akan menyelaraskan Compose Material ke perilaku Komponen Desain Material yang sama, sehingga memberikan perilaku yang konsisten jika Anda menggabungkan Views dan Compose. Perubahan ini juga memastikan bahwa saat Anda membuat UI menggunakan komponen Compose Material, persyaratan minimum untuk aksesibilitas target sentuh akan terpenuhi.
  • Dukungan yang stabil untuk Navigation Rail
  • Menstabilkan sejumlah API yang sebelumnya masih eksperimental
  • Dukungan untuk versi Kotlin yang lebih baru

Versi 1.1.0-rc03

26 Januari 2022

androidx.compose.runtime:runtime-*:1.1.0-rc03 dirilis. Versi 1.1.0-rc03 berisi commit ini.

Perbaikan Bug

  • Diupdate untuk mendukung Compose Material 1.1.0-rc03

Versi 1.1.0-rc01

15 Desember 2021

androidx.compose.runtime:runtime-*:1.1.0-rc01 dirilis. Versi 1.1.0-rc01 berisi commit ini.

Versi 1.1.0-beta04

1 Desember 2021

androidx.compose.runtime:runtime-*:1.1.0-beta04 dirilis. Versi 1.1.0-beta04 berisi commit ini.

Fitur Baru

  • Diupdate agar kompatibel dengan Kotlin 1.6.0

Versi 1.1.0-beta03

17 November 2021

androidx.compose.runtime:runtime-*:1.1.0-beta03 dirilis. Versi 1.1.0-beta03 berisi commit ini.

Versi 1.1.0-beta02

3 November 2021

androidx.compose.runtime:runtime-*:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perubahan API

  • Kode snapshot dibagi menjadi beberapa file, tetapi semuanya masih berada dalam class JVM yang sama. (Ic6c98)

Versi 1.1.0-beta01

27 Oktober 2021

androidx.compose.runtime:runtime-*:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

Versi 1.1.0-alpha06

13 Oktober 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha06 dirilis. Versi 1.1.0-alpha06 berisi commit ini.

Perubahan API

  • Menghapus InternalCompilerApi dari metode Composer yang harus dipanggil lintas modul (I1aa0b)
  • Recomposer.state tidak digunakan lagi dan diganti dengan Recomposer.currentState untuk mengubah jenisnya menjadi StateFlow (Ic2ab3, b/197773820)

Versi 1.1.0-alpha05

29 September 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

Versi 1.1.0-alpha04

15 September 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha04 dirilis. Versi 1.1.0-alpha04 berisi commit ini.

Versi 1.1.0-alpha03

1 September 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha03 dirilis. Versi 1.1.0-alpha03 berisi commit ini.

Fitur Baru

  • Compose Compiler kini mendukung versi Compose Runtime yang lebih lama (1.0). Sebelum perubahan ini, Compose Compiler hanya kompatibel dengan Compose Runtime versi yang sama atau yang lebih baru. Setelah perubahan ini, Compose Compiler kompatibel dengan versi Compose Runtime yang lebih lama (1.0). (aosp/1796968)
  • Mengupdate Compose 1.1.0-alpha03 agar bergantung pada Kotlin 1.5.30. (I74545)

Versi 1.1.0-alpha02

18 Agustus 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Versi 1.1.0-alpha01

4 Agustus 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Versi 1.0

Versi 1.0.5

3 November 2021

androidx.compose.runtime:runtime-*:1.0.5 dirilis. Versi 1.0.5 berisi commit ini.

Perbaikan Bug

  • Memperbaiki instance derivedStateOf pelacakan error. (aosp/1792247)

Versi 1.0.4

13 Oktober 2021

androidx.compose.runtime:runtime-*:1.0.4 dirilis. Versi 1.0.4 berisi commit ini.

Update Dependensi

  • Diupdate agar bergantung pada Kotlin 1.5.31

Versi 1.0.3

29 September 2021

androidx.compose.runtime:runtime-*:1.0.3 dirilis. Versi 1.0.3 berisi commit ini.

Update Dependensi

  • Diupdate agar bergantung pada Kotlin 1.5.30

Versi 1.0.2

1 September 2021

androidx.compose.runtime:runtime-*:1.0.2 dirilis. Versi 1.0.2 berisi commit ini.

Diupdate untuk mendukung rilis Compose 1.0.2. Compose 1.0.2 masih kompatibel dengan Kotlin 1.5.21.

Versi 1.0.1

4 Agustus 2021

androidx.compose.runtime:runtime-*:1.0.1 dirilis. Versi 1.0.1 berisi commit ini.

Update Dependensi

  • Diupdate agar bergantung pada Kotlin 1.5.21.

Versi 1.0.0

28 Juli 2021

androidx.compose.runtime:runtime-*:1.0.0 dirilis. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0

Ini adalah rilis stabil pertama Compose. Lihat blog Rilis Compose resmi untuk mengetahui detail selengkapnya.

Masalah Umum

  • Jika menggunakan Android Studio Bumblebee Canary 4 atau AGP 7.1.0-alpha04/7.1.0-alpha05, Anda mungkin mengalami error berikut:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Untuk memperbaikinya, tingkatkan minSdkVersion Anda sementara waktu ke 24+ di file build.gradle. Masalah ini akan diperbaiki di versi Android Studio Bumblebee berikutnya dan AGP 7.1. (b/194289155)

Versi 1.0.0-rc02

14 Juli 2021

androidx.compose.runtime:runtime-*:1.0.0-rc02 dirilis. Versi 1.0.0-rc02 berisi commit ini.

  • Memperbaiki kondisi race di SnapshotStateObserver yang menyebabkan NullPointerExceptions sporadis. (aosp/1763445, aosp/1758105, b/192677711)
  • Memperbaiki masalah snapshot runtime yang menyebabkan error 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)

Versi 1.0.0-rc01

1 Juli 2021

androidx.compose.runtime:runtime-*:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit ini.

Versi 1.0.0-beta09

16 Juni 2021

androidx.compose.runtime:runtime-*:1.0.0-beta09 dirilis. Versi 1.0.0-beta09 berisi commit ini.

Aturan Profil yang Ditambahkan

Rilis ini menambahkan aturan profil ke modul Compose berikut (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

Apa itu aturan profil?

  • Aturan profil untuk library ditentukan dalam file teks baseline-prof.txt yang berada di src/main atau direktori yang setara. File ini menetapkan aturan per baris. Dalam hal ini, aturan adalah pola untuk pencocokan dengan metode atau class dalam library. Sintaksis untuk aturan ini adalah superset dari format profil ART yang dapat dibaca manusia yang digunakan saat menggunakan adb shell profman --dump-classes-and-methods .... Aturan ini menggunakan salah satu dari dua bentuk untuk ditarget, yaitu metode atau class.

  • Aturan metode akan memiliki pola berikut:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Dan aturan class akan memiliki pola berikut:

    <CLASS_DESCRIPTOR>
    
  • Di sini, <FLAGS> adalah satu atau beberapa karakter H, S, dan P untuk menunjukkan apakah metode ini harus ditandai sebagai "Hot", "Startup", atau "Post Startup".

  • <CLASS_DESCRIPTOR> adalah deskripsi untuk class tempat metode yang ditargetkan berada. Misalnya, class androidx.compose.runtime.SlotTable akan memiliki deskripsi Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> adalah tanda tangan metode, dan menyertakan nama, jenis parameter, serta jenis nilai yang ditampilkan metode. Misalnya, metode fun isPlaced(): Boolean pada LayoutNode memiliki tanda tangan isPlaced()Z.

  • Pola ini dapat memiliki karakter pengganti (**, *, dan ?) agar memiliki satu aturan yang mencakup beberapa metode atau class.

Apa fungsi aturan tersebut?

  • Metode yang memiliki flag H menunjukkan bahwa metode ini adalah metode "hot", dan harus dikompilasi sebelumnya.

  • Metode yang memiliki flag S menunjukkan bahwa ini adalah metode yang dipanggil saat memulai, dan harus dikompilasi terlebih dahulu untuk menghindari biaya kompilasi dan penafsiran metode tersebut pada waktu mulai.

  • Metode yang memiliki flag P menunjukkan bahwa ini adalah metode yang dipanggil setelah memulai.

  • Class yang ada dalam file ini menunjukkan bahwa class digunakan saat memulai dan harus dialokasikan sebelumnya di heap untuk menghindari biaya pemuatan class.

Bagaimana cara kerjanya?

  • Library dapat menentukan aturan ini yang akan dikemas dalam artefak AAR. Saat aplikasi kemudian dibuat dengan menyertakan artefak tersebut, aturan ini akan digabung menjadi satu dan aturan yang digabungkan akan digunakan untuk membuat profil ART biner ringkas yang khusus untuk aplikasi. ART kemudian dapat memanfaatkan profil ini jika aplikasi tersebut diinstal di perangkat untuk kompilasi awal subset tertentu dari aplikasi guna meningkatkan performa aplikasi, terutama saat pertama kali dijalankan. Perhatikan bahwa tindakan ini tidak akan berpengaruh pada aplikasi yang dapat di-debug.

Versi 1.0.0-beta08

2 Juni 2021

androidx.compose.runtime:runtime-*:1.0.0-beta08 dirilis. Versi 1.0.0-beta08 berisi commit ini.

Perubahan API

  • State<T> kini menjadi State<out T> (I69049)
  • Perubahan ControlledComposition API untuk mengaktifkan perubahan komposisi ulang dalam single pass yang dikomposisi ulang. (Iaafd1, b/184173932)

Versi 1.0.0-beta07

18 Mei 2021

androidx.compose.runtime:runtime-*:1.0.0-beta07 dirilis. Versi 1.0.0-beta07 berisi commit ini.

Perubahan API

  • Menambahkan API compiler compose baru yang memungkinkan informasi sumber yang dihasilkan oleh compiler dihapus saat minifikasi sumber berlangsung. (Ia34e6)
  • Memperkenalkan ReusableContent yang akan mencoba menggunakan kembali node dalam kontennya, bukan menggantinya saat kunci diubah. Jika kunci diubah, nilai sebelumnya dalam tabel slot untuk konten akan diabaikan, kecuali untuk node yang dihasilkan dan nilai yang digunakan untuk memperbarui node.

    Memperkenalkan ReusableComposeNode yang akan menggunakan kembali node yang ditampilkan, bukan menggantinya seperti yang dilakukan untuk ComposeNode. (I1dd86)

  • @ComposeCompilerApi tidak lagi @RequiresOptIn (Iab690)

Perbaikan Bug

  • LazyColumn/Row sekarang akan mempertahankan hingga 2 item yang sebelumnya terlihat aktif (tidak dibuang) meskipun item tersebut ter-scroll. Ini memungkinkan komponen untuk menggunakan kembali subkomposisi yang aktif ketika kita perlu membuat item baru yang meningkatkan performa scroll. (Ie5555)

Versi 1.0.0-beta06

5 Mei 2021

androidx.compose.runtime:runtime-*:1.0.0-beta06 dirilis. Versi 1.0.0-beta06 berisi commit ini.

Perubahan API

  • @ComposeCompilerApi tidak lagi @RequiresOptIn (Iab690)

Versi 1.0.0-beta05

21 April 2021

androidx.compose.runtime:runtime-*:1.0.0-beta05 dirilis. Versi 1.0.0-beta05 berisi commit ini.

Perubahan API

  • Menghapus @InternalComposeApi untuk merekam pembacaan dan penulisan snapshot (Id134d)

Perbaikan Bug

  • File AndroidManifest dari ui-test-manifest dan ui-tooling-data kini kompatibel dengan Android 12 (I6f9de, b/184718994)

Versi 1.0.0-beta04

7 April 2021

androidx.compose.runtime:runtime-*:1.0.0-beta04 dirilis. Versi 1.0.0-beta04 berisi commit ini.

Perbaikan Bug

  • Sebelum perubahan ini, fungsi composable lokal dapat dilewati berdasarkan parameternya. Setelah perubahan ini, tidak ada fungsi composable lokal yang akan terlewat. Perubahan ini dilakukan karena fungsi lokal diharapkan dan umumnya mengambil parameter dari induk. Dilewatinya fungsi lokal juga merupakan sumber bug yang umum.

    Singkatnya, pertimbangkan contoh berikut:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    Sebelum perubahan ini, fungsi composable ShowCount akan selalu dilewati, bahkan setelah parameter count diperbarui. Namun, sekarang sudah tidak seperti itu lagi. (I5648a)

  • Memperbaiki masalah saat rememberSaveable() memulihkan nilai lama jika digunakan dengan parameter input (I1b110, b/182403380)

Versi 1.0.0-beta03

24 Maret 2021

androidx.compose.runtime:runtime-*:1.0.0-beta03 dirilis. Versi 1.0.0-beta03 berisi commit ini.

Perubahan API

  • DefaultMonotonicFrameClock tidak digunakan lagi. Memanggil withFrameNanos atau Recomposer.runRecomposeAndApplyChanges tanpa MonotonicFrameClock sekarang akan menampilkan IllegalStateException. (I4eb0d)

Versi 1.0.0-beta02

10 Maret 2021

androidx.compose.runtime:runtime-*:1.0.0-beta02 dirilis. Versi 1.0.0-beta02 berisi commit ini.

Perbaikan Bug

  • Menerapkan batasan pada penggunaan API eksperimental publik (I6aa29, b/174531520)
  • Memperbaiki rememberSaveable { mutableStateOf(0) } yang rusak saat digunakan di dalam tujuan navigation-compose. (I1312b, b/180042685, b/180701630)

Versi 1.0.0-beta01

24 Februari 2021

androidx.compose.runtime:runtime-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Ini adalah rilis pertama Compose 1.0.0 Beta.

Perubahan API

  • Menambahkan API Recomposer.runRecomposeConcurrentlyAndApplyChanges eksperimental untuk mengubah komposisi yang tidak valid dari loop bingkai utama. (I342d0)
  • Semua composable yang ditandai dengan @ReadOnlyComposable kini divalidasi pada waktu kompilasi untuk memastikan bahwa komponen tersebut hanya melakukan panggilan ke @ReadOnlyComposables lainnya (I58961)
  • defaultFactory untuk compositionLocalOf dan staticCompositionLocalOf sekarang bersifat wajib, bukan opsional.

    Perubahan ini menghapus error jenis potensial untuk jenis non-nullable jika tidak ada factory default yang tersedia. Sebelumnya, perubahan ini akan menyediakan referensi null untuk jenis non-nullable.

    Untuk jenis nullable, pertimbangkan untuk menyediakan { null } sebagai factory default.

    Sebaiknya jangan gunakan lokal dengan jenis non-nullable kecuali jika default yang logis tersedia. Jika tidak ada default yang logis, lambda defaultFactory akan memunculkan pengecualian. Namun, memunculkan pengecualian berarti bahwa konsumen lokal akan memiliki dependensi implisit yang diberikan yang tidak diterapkan oleh sistem jenis. (Ifbd2a)

  • Simbol yang tidak digunakan lagi dihapus dari runtime compose (I3252c)

  • emptyContent() yang tidak digunakan lagi dihapus. Sebagai gantinya, gunakan {}. (Idb33f, b/179432510)

  • Providers telah diganti namanya menjadi CompositionLocalProvider

    • Konstruktor Composition tidak lagi menerima parameter kunci, dan sudah tidak digunakan lagi.
    • currentCompositeKeyHash telah diubah menjadi properti tingkat atas composable, bukan fungsi tingkat atas composable.
    • CompositionData dan CompositionGroup telah dipindahkan ke namespace androidx.compose.runtime.tooling
    • ComposableLambda telah dibuat sebagai antarmuka, bukan class konkret, dan tidak lagi memiliki parameter jenis.
    • ComposableLambdaN telah dibuat sebagai antarmuka, bukan class konkret, dan tidak lagi memiliki parameter jenis.
    • Fungsi snapshotFlow telah dipindahkan ke namespace androidx.compose.runtime
    • metode penggabungan SnapshotMutationPolicy tidak lagi bersifat eksperimental
    • Fungsi clearRoots level atas @TestOnly telah dihapus. Fungsi tersebut tidak diperlukan lagi.
    • Fungsi keySourceInfoOf dan resetSourceInfo telah dihapus. Fungsi tersebut tidak diperlukan lagi.
    • Composer.collectKeySourceInformation telah dihapus. Fungsi tersebut tidak diperlukan lagi.
    • Metode isJoinedKey, joinedKeyLeft, dan joinedKeyRight telah dihapus. Fungsi tersebut tidak diperlukan lagi.
    • Berbagai API tingkat atas telah dipindahkan dan diatur ulang menjadi file yang berbeda. Karena semantik class file Kotlin, ini akan memutus kompatibilitas biner, tetapi tidak dengan kompatibilitas sumber, sehingga tidak menjadi masalah bagi sebagian besar pengguna.
    • (I99b7d, b/177245490)
  • SnapshotStateObserver tidak lagi bersifat Eksperimental (Id2e6a)

  • Menghapus beberapa API sebelumnya yang tidak digunakan lagi (Ice5da, b/178633932)

  • Membuat perubahan Material API berikut:

    • Menambahkan parameter contentPadding ke Top/BottomAppBar untuk memungkinkan penyesuaian padding default.
    • Mengurutkan ulang parameter dalam BackdropScaffold untuk mengikuti panduan API bagi parameter wajib sebelum parameter opsional.
    • Memindahkan parameter icon di BottomNavigationItem ke setelah selected dan onClick.
    • Mengganti nama parameter alwaysShowLabels di BottomNavigationItem menjadi alwaysShowLabel.
    • Mengganti nama parameter bodyContent di beberapa komponen menjadi hanya content.
    • Mengurutkan ulang parameter di ButtonDefaults.buttonColors(). Harap perhatikan bahwa karena jenis parameter tidak berubah, hal ini tidak akan menyebabkan error di kode Anda. Pastikan Anda menggunakan parameter bernama atau memperbarui urutannya secara manual. Jika tidak, kode Anda tidak akan berfungsi sama seperti sebelumnya.
    • Menambahkan parameter secondaryVariant ke darkColors(). Warna ini biasanya sama dengan secondary dalam tema gelap, tetapi menambahkan konsistensi dan penyesuaian lebih lanjut.
    • Menghapus ElevationDefaults dan animateElevation() dari tampilan API publik karena tidak umum digunakan/berguna.
    • Mengganti nama onValueChangeEnd di Slider menjadi onValueChangeFinished dan membuatnya nullable.
    • Mengganti nama parameter text di Snackbar menjadi content untuk konsistensi.
    • Menambahkan parameter contentPadding ke DropdownMenuItem untuk memungkinkan penyesuaian padding default dan menjadikan content sebagai ekstensi di RowScope.
    • Mengganti nama ModalDrawerLayout menjadi ModalDrawer.
    • Mengganti nama BottomDrawerLayout menjadi BottomDrawer.
    • (I1cc66)

Versi 1.0.0-alpha12

10 Februari 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha12 dirilis. Versi 1.0.0-alpha12 berisi commit ini.

Perubahan API

  • Dukungan untuk ViewGroups telah dihapus dari UiApplier. Composable emitView yang tidak digunakan lagi telah dihapus. (Ifb214)
  • CompositionReference diganti namanya menjadi CompositionContext (I53fcb)
  • ComponentActivity.setContent telah dipindahkan ke androidx.activity.compose.setContent di dalam modul androidx.activity:activity-compose. (Icf416)
  • Snapshot API diupdate agar lebih konsisten dengan pedoman API serta menyembunyikan class implementasi internal dari API publik. (Id9e32)
  • Mengganti nama Ambients agar cocok dengan penggantian nama Ambient -> CompositionLocal. Ambients sebelumnya bernama AmbientFoo, dan sekarang CompositionLocals diberi nama LocalFoo. (I2d55d)
  • Mengganti nama Ambient menjadi CompositionLocal, dan ambientOf/staticAmbientOf masing-masing menjadi compositionLocalOf/staticCompositionLocalOf. Perubahan ini membantu memperjelas tujuan dari CompositionLocal: mekanisme untuk memberikan/mengambil nilai yang bersifat lokal di suatu komposisi. Instance CompositionLocal harus diawali dengan Local, seperti val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6)
  • takeMutableSnapshot dan takeSnapshot telah berpindah menjadi metode pendamping Snapshot. (I91f19)
  • @ComposableContract tidak digunakan lagi dan digantikan dengan tiga anotasi yang lebih spesifik.

    @ComposableContract(restartable = false) telah menjadi @NonRestartableComposable @ComposableContract(readonly = true) telah menjadi @ReadOnlyComposable @ComposableContract(preventCapture = true) telah menjadi @DisallowComposableCalls @ComposableContract(tracked = true) telah dihapus. (I60a9d)

  • Utilitas emptyContent() dan (@Composable () -> Unit).orEmpty() tidak digunakan lagi karena tidak lagi memiliki dampak atau nilai performa yang bagus (I0484d)

  • snapshotFlow dan withMutableSnapshot tidak lagi bersifat eksperimental (I6a45f)

  • Kini Recomposer dapat ditutup. Recomposer yang ditutup akan melanjutkan rekomposisi hingga coroutine turunan komposisi selesai. Recomposer.shutDown diganti namanya menjadi cancel untuk membedakannya dengan close. (Ib6d76)

  • Artefak compose:runtime-dispatch kini tidak digunakan lagi. MonotonicFrameClock kini dapat ditemukan di compose:runtime dan AndroidUiDispatcher dapat ditemukan di compose:ui. (Ib5c36)

  • API yang menjadi target plugin Compiler Compose telah difaktorkan ulang agar dapat menggunakan antarmuka, bukan class konkret. Antarmuka juga tidak lagi menggunakan parameter jenis.

    Perubahan internal ini seharusnya tidak memengaruhi kompatibilitas kode sumber, tetapi merupakan perubahan yang dapat menyebabkan gangguan biner. (I3b922, b/169406779)

  • SnapshotMutableState diperkenalkan (Icfd03)

  • DisposableEffectDisposable diganti namanya menjadi DisposaleEffectResult (Ica7c6)

  • Recomposer.current(). [Abstract]ComposeView yang dihapus kini ditetapkan secara default ke Recomposers dengan cakupan jendela yang dibuat secara lambat dan didorong oleh ViewTreeLifecycleOwner untuk jendela. Tick animasi berbasis Recomposition dan withFrameNanos dijeda selama Lifecycle host dihentikan. (I38e11)

  • Recomposer.runningRecomposers sekarang menawarkan StateFlow global dari RecomposerInfo yang hanya dapat dibaca untuk mengamati status komposisi yang sedang berlangsung dalam proses. Pilih API ini daripada Recomposer.current(), yang sekarang tidak digunakan lagi. (If8ebe)

  • DisposableEffectDisposable diganti namanya menjadi DisposaleEffectResult (I3ea68)

Versi 1.0.0-alpha11

28 Januari 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha11 dirilis. Versi 1.0.0-alpha11 berisi commit ini.

Perubahan API

  • onCommit, onDispos, dan onActive sudah tidak digunakan lagi dan digantikan dengan API SideEffect dan DisposableEffect (If760e)
  • API emit() dan semua overload tidak digunakan lagi dan diganti namanya menjadi ComposeNode. API identik, hanya nama yang berbeda untuk mengikuti konvensi penamaan Compose (I4137b)
  • invalidate dan compositionReference() sekarang tidak digunakan lagi dan masing-masing telah digantikan dengan currentRecomposeScope dan rememberCompositionReference. (I583a8)
  • RememberObserver menggantikan CompositionLifecycleObserver dan CompositionLifecycleObserver kini tidak digunakan lagi.

    RememberObserver adalah pengganti untuk CompositionLifecycleObserver dengan metode modifikasi semantik dan penggantian nama. Mengubah ke API baru dapat dilakukan secara mekanis untuk objek yang hanya diingat satu kali, dan terus menjadi, praktik yang direkomendasikan. Namun, jika referensi diingat lebih dari sekali dalam suatu komposisi, onRemembered dipanggil untuk setiap referensi saat onEnter hanya dipanggil sekali. onEnter dipanggil beberapa kali jika objek digunakan dalam subkomposisi, seperti WithConstraints dan Scaffold, yang membuat jaminan panggilan onEnter tunggal tidak dapat diandalkan dan telah dihapus untuk RememberObserver.

    RememberObserver menambahkan onAbandoned yang dipanggil jika instance RememberObserver ditampilkan dari callback yang diteruskan ke remember tetapi tidak diingat dalam status komposisi, dan, oleh karena itu, tidak akan pernah memanggil onRemembered. Hal ini dapat terjadi jika pengecualian menghentikan komposisi sebelum selesai atau komposisi dibuang karena status tujuan komposisi itu diproduksi tidak lagi aktif atau tidak diperlukan lagi. Jika instance RememberObserver yang mengikuti rekomendasi referensi tunggal di atas melacak resource eksternal onForgotten dan onAbandoned, masing-masing menunjukkan bahwa resource tidak lagi diperlukan. Jika objek sedang melacak pekerjaan yang dimulai atau resource yang dialokasikan di onRemembered, onAbandoned dapat diabaikan karena tidak akan dipanggil jika onRemembered dipanggil. (I02c36)

  • Jangan tandai fungsi collectAsState() sebagai inline (Ia73e4)

Perbaikan Bug

  • WithConstraints didesain ulang sebagai BoxWithConstraints dan dipindahkan ke foundation.layout. (I9420b, b/173387208)
  • Memanfaatkan TestCoroutineDispatcher dalam pengujian (I532b6)

Versi 1.0.0-alpha10

13 Januari 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha10 dirilis. Versi 1.0.0-alpha10 berisi commit ini.

Perubahan yang Dapat Menyebabkan Gangguan

  • Restrukturisasi API compiler internal memungkinkan perubahan batch pada node yang dihasilkan sebagai hasil komposisi ke dalam fase "terapkan perubahan" komposisi, setelah semua fungsi @Composable selesai.

    Ini adalah perubahan perilaku yang dapat menyebabkan gangguan yang memengaruhi kode aplikasi karena node tidak lagi tersedia dari API internal dan eksperimental hingga perubahan diterapkan. Hal ini biasanya dapat diatasi dengan mengelilingi kode dengan dependensi tersebut dalam composable SideEffect untuk menunda eksekusi kode hingga node dibuat dan diinisialisasi. (I018da)

Perubahan API

  • Menambahkan cara untuk melacak jika recomposer telah menerapkan perubahan. (I1b3e2)
  • Luaskan API [Abstract]ComposeView untuk memungkinkan pendaurulangan tampilan berbasis Compose, membuang komposisinya untuk dibuat kembali nanti. Tambahkan API untuk menginstal dan menemukan Recomposers dan CompositionReferences dengan cakupan jendela untuk membuat komposisi turunan.

    Tambahkan ViewCompositionStrategy untuk mengonfigurasi strategi penghapusan komposisi dari [Abstract]ComposeViews; perilaku default adalah membuang pada jendela yang dilepas. (I860ab)

Perbaikan Bug

  • Recomposer kini menampilkan Alur dari statusnya saat ini, memungkinkan pemantauan aktivitasnya dan aktivitas efek terkait. (Ifb2b9)
  • keyEvent native sekarang dapat diakses melalui keyEvent.nativeKeyEvent (I87c57, b/173086397)

Versi 1.0.0-alpha09

16 Desember 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha09 dirilis. Versi 1.0.0-alpha09 berisi commit ini.

Perubahan API

  • Menghapus SlotTable, SlotReader, dan SlotWriter dari API publik. Sebelumnya, ini ditandai sebagai InternalComposeAPI. Kini keduanya bersifat internal untuk modul compose.

    Menambahkan CompositionData dan CompositionGroup sebagai pengganti ui-tooling API yang digunakan untuk mengekstrak informasi komposisi. Ini bersifat publik tetapi tidak dimaksudkan untuk digunakan di luar ui-tooling API karena menyediakan informasi mentah yang ditafsirkan oleh ui-tooling API (I31a9c)

  • Class Applier tidak lagi dianggap sebagai API eksperimental. (Id85b0)

  • Antarmuka Applier telah diubah untuk menyederhanakan hierarki build dari bawah ke atas, bukan dari atas ke bawah.

    Metode insert() telah diganti namanya menjadi insertTopDown().

    Menambahkan metode baru, insertBottomUp().

    Applier akan memasukkan node ke hierarki yang sedang diedit menggunakan insertTopDown() atau insertBottomUp() bergantung mana yang berperforma lebih baik.

    Beberapa hierarki, seperti LayoutNode dan View, jauh lebih efisien untuk dibuat dari bawah ke atas daripada dari atas ke bawah. Sebelum perubahan ini, stack insert diperlukan untuk menerapkan konstruksi dari bawah ke atas yang perlu disalin ke setiap applier yang memerlukan konstruksi tersebut untuk performanya. Dengan perubahan ini, Applier akan menggantikan insertBottomUp() untuk membuat hierarki dari bawah ke atas dan insertTopDown() untuk membuat hierarki dari atas ke bawah. (Icbdc2)

  • Compose mendukung pengambil properti yang dapat membuat pemanggilan composable. Dukungan untuk ini tidak akan dihapus, tetapi sintaksis untuk mendeklarasikan pengambil properti sebagai @Composable akan berubah.

    Sintaksis yang kini tidak digunakan lagi untuk melakukan tindakan ini adalah dengan menganotasi properti itu sendiri:

        @Composable val someProperty: Int get() = ...
    

    Sintaksis yang sekarang benar untuk melakukan tindakan ini adalah dengan menganotasi pengambil properti:

       val someProperty: Int @Composable get() = ...
    

    Kedua sintaksis akan berfungsi selama beberapa waktu, tetapi sintaksis yang tidak digunakan lagi pada akhirnya akan menjadi error kompilasi. (Id9197)

Perbaikan Bug

Versi 1.0.0-alpha08

2 Desember 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit ini.

Perubahan API

  • Menambahkan pemeriksaan lint untuk penamaan dan posisi parameter lambda yang dapat dikomposisi, untuk memeriksa apakah konsisten dengan panduan Compose. Selain itu, memigrasikan beberapa API menggunakan children sebagai nama untuk lambda akhirnya ke content, sesuai dengan pemeriksaan lint dan panduan. (Iec48e)
  • Recomposer tidak lagi menerima EmbeddingContext; dependensi penjadwalan yang diperlukan diperoleh dari effectCoroutineContext. FrameManager tidak digunakan lagi; integrasi platform harus melakukan inisialisasi penanganan snapshot globalnya sendiri. (I02369)
  • Fungsi RestorableStateHolder.withRestorableState diganti namanya menjadi RestorableStateProvider (I66640)

Perbaikan Bug

  • Ambient yang tidak digunakan lagi dinamai dengan Ambient sebagai akhiran, dan menggantinya dengan properti baru yang diawali dengan Ambient, mengikuti pedoman Ambients API dan Compose API lainnya. (I33440)
  • Menghapus modul ui-test lama dan stub-nya (I3a7cb)

Versi 1.0.0-alpha07

11 November 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit ini.

Fitur Baru

Perubahan API

  • Anotasi @UnionType sudah tidak digunakan lagi (I57cde)
  • provideDefault ditambahkan sebagai alternatif untuk menyediakan ambient, dan dapat digunakan untuk menentukan nilai ambient yang hanya akan ditetapkan jika tidak ada nilai ambient yang telah disediakan. (Id6635, b/171024925)
  • LaunchedTask diganti namanya menjadi LaunchedEffect agar konsisten dengan SideEffect dan DisposableEffect API. LaunchedEffect tanpa parameter subjek tidak diizinkan agar mendorong praktik terbaik. (Ifd3d4)
  • Applier kini memiliki callback onBeginChanges/onEndChanges yang dipanggil saat Composer dimulai/selesai menerapkan perubahan ke hierarki. Ini dapat digunakan untuk mengelompokkan pengelolaan resource jika diperlukan. (Icf476)
  • Recomposer kini memerlukan CoroutineContext saat pembuatan (Ic4610)
  • Perubahan pada implementasi SlotTable internal yang tidak akan memengaruhi API publik. (If9828)
  • Adaptor rxjava2 yang tidak digunakan lagi dan tidak menggunakan nilai awal telah dihapus (Idb72f)

Perbaikan Bug

  • foundation.Text sudah tidak digunakan lagi dan diganti dengan material.Text. Untuk API teks dasar tidak terkonfigurasi yang tidak memakai nilai dari tema, lihat androidx.compose.foundation.BasicText. (If64cb)
  • BaseTextField sudah tidak digunakan lagi. BasicTextField digunakan sebagai gantinya. (I896eb)
  • Beberapa simbol terkait tata letak dipindahkan dari androidx.compose.ui ke androidx.compose.layout.ui. (I0fa98, b/170475424)

Kontribusi Eksternal

  • Menambahkan modul runtime-rxjava3 untuk Compose. Serupa dengan runtime-rxjava2 (I02cbf)

Versi 1.0.0-alpha06

28 Oktober 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.

Perubahan API

  • Recomposer kini menjadi CompositionReference dan merupakan induk komposisi yang valid. Recomposer eksplisit kini diperlukan di lebih sedikit tempat. (I4036f)
  • Menambahkan API pasangan DisposableEffect ke SideEffect, mengisi peran onCommit-with-params, tetapi dengan onDispose yang diperlukan.
    • Menambahkan rememberUpdatedState API untuk memublikasikan data dari rekomposisi ke proses yang sedang berlangsung atau berlangsung lama, seperti DisposableEffect atau LaunchedTask.
    • (Id50b9)
  • MutableVector kini mengimplementasikan RandomAccess (I85d73, b/170461551)
  • Menambahkan composable SideEffect untuk menerapkan efek samping komposisi ke objek yang dikelola oleh komposisi. SideEffect ditujukan untuk menggantikan composable onCommit. (Ia77c2)
  • API eksperimental baru, RestorableStateHolder. API ini memungkinkan penyimpanan status yang didefinisikan dengan [savedInstanceState] dan [rememberSavedInstanceState] untuk subhierarki sebelum membuangnya agar dapat ditulis kembali nanti dengan status yang dipulihkan. (I66884, b/166586419)

Perbaikan Bug

  • Mengaktifkan transisi di ComposeTestRule; menghapus opsi untuk mengaktifkan kursor yang berkedip dari ComposeTestRule. (If0de3)

Versi 1.0.0-alpha05

14 Oktober 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit ini.

Perubahan API

  • Pengubah input penangguhan Modifier.pointerInput eksperimental (Ia77d2)
  • Performa scroll LazyColumn/Row ditingkatkan dengan melakukan lebih sedikit pekerjaan dalam subkomposisi pada setiap scroll. Metode hasInvalidations() baru ditambahkan untuk class Composition. Metode hasPendingChanges() dari Recomposer diganti nama menjadi hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
  • Menambahkan API produceState untuk meluncurkan coroutine dari komposisi yang memperbarui satu nilai State<T> dari waktu ke waktu (Id4a57)
  • launchInComposition diganti namanya menjadi LaunchedTask agar sesuai dengan pedoman Compose API (I99a8e)
  • Urutan panggilan place() dalam Layouts kustom kini menentukan urutan gambar untuk turunan (Ibc9f6)

Versi 1.0.0-alpha04

1 Oktober 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit ini.

Perubahan API

  • Menambahkan OwnerScope untuk mengizinkan pengumpulan cakupan tata letak dan observasi gambar setelah tidak valid lagi. (Ic4cf8)
  • Menambahkan derivedStateOf API untuk membuat objek State berdasarkan penghitungan yang dapat membaca (dan mengambil dari) objek State lain (If758b)
  • Menambahkan TestOnly API untuk SnapshotStateObserver (I6e2a9)

Perbaikan Bug

  • foundation.Box sudah tidak digunakan lagi. Sebagai gantinya, gunakan foundation.layout.Box. (Ie5950, b/167680279)

Versi 1.0.0-alpha03

16 September 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit ini.

Perubahan API

  • CompositionCoroutineScope tidak lagi mengimplementasikan MonotonicFrameClock. Pemanggil withFrameNanos harus mengimpor fungsi tingkat atas secara eksplisit. (Icb642, b/166778123)

Perbaikan Bug

  • Fungsi pengujian global seperti onNode atau waitForIdle kini tidak digunakan lagi. Bermigrasilah ke fungsi versi baru yang ditetapkan di ComposeTestRule (I7f45a)
  • launchInComposition tidak lagi meluncurkan coroutine yang tidak dikirimkan (Ief6af, b/166486000)

Versi 1.0.0-alpha02

2 September 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit ini.

Perubahan API

  • Menambahkan API snapshotFlow dan withMutableSnapshot untuk menggunakan dan memproduksi perubahan data Snapshot. (I3e722)
  • Konvensi pemanggilan untuk fungsi composable telah berubah. Ini adalah perubahan yang dapat menyebabkan gangguan biner. Semua library harus dikompilasi ulang agar berfungsi dengan versi plugin compiler compose saat ini.

    Perubahan ini tidak membuat perubahan yang dapat menyebabkan gangguan tingkat sumber karena satu-satunya API yang telah berubah adalah API compiler yang memiliki keikutsertaan eksplisit. (I7afd2, b/158123185)

  • Menghapus metode penjadwalan dari EmbeddingContext (I7b9be)

  • onPreCommit sudah tidak digunakan lagi; onCommit kini memiliki perilaku onPreCommit.

    onCommit dan onActive kini dijalankan dalam frame choreographer yang sama dengan tempat perubahan komposisi dilakukan, bukan di awal frame choreographer berikutnya. (I70403)

Versi 1.0.0-alpha01

26 Agustus 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit ini.

Versi 0.1.0-dev

Versi 0.1.0-dev17

19 Agustus 2020

androidx.compose.runtime:runtime-*:0.1.0-dev17 dirilis. Versi 0.1.0-dev17 berisi commit berikut ini.

Perubahan API

  • Emit khusus kini dapat mendeklarasikan bahwa satu atau beberapa penyetelnya dapat dilewati dan dikomposisi ulang secara terpisah dari emit. (Ibbd13)
  • Menghapus panggilan FrameManager yang tidak digunakan lagi.

    API compose internal telah diubah guna mengurangi jumlah overhead untuk melacak objek status seperti mutableStateof() (I80ba6)

  • Composable state { ... } kini tidak lagi digunakan agar panggilan eksplisit ke remember { mutableStateOf(...) } menjadi lebih jelas. Ini mengurangi keseluruhan tampilan API dan jumlah konsep untuk pengelolaan status, serta mencocokkan pola by mutableStateOf() untuk delegasi properti class. (Ia5727)

  • Flow.collectAsState kini menentukan dispatcher default dari komposisi itu sendiri, bukan menetapkan Dispatchers.Main sebagai default. (I9c1d9)

  • Memperbaiki error saat sesuatu yang menyimpan status sebelumnya digunakan di dalam for loop. Kini, memiliki kunci yang sama di savedInstanceState() diizinkan, dan api UiSavedStateRegistry disesuaikan dengan persyaratan baru ini (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

Perbaikan Bug

  • emitView tidak digunakan lagi. Sebagai gantinya, gunakan AndroidView ketika memungkinkan untuk memunculkan Views di dalam Compose. Perlu diperhatikan bahwa pengomposisian langsung Views dan ViewGroups tidak akan dapat dilakukan di masa mendatang, kecuali keduanya merupakan daun dalam struktur pohon komposisi terkait dan tindakan itu dapat dilakukan menggunakan AndroidView. (I29b1e, b/163871221)

Versi 0.1.0-dev16

5 Agustus 2020

androidx.compose.runtime:runtime-*:0.1.0-dev16 dirilis. Versi 0.1.0-dev16 berisi commit berikut ini.

Perubahan API

  • Kebijakan mutasi default mutableStateOf(), ambientOf(), dan savedInstanceStateOf() telah diubah menjadi structuralEqualityPolicy(), bukan referentialEqualityPolicy().

    Untuk memutuskan apakah nilai baru yang ditetapkan ke instance mutableStateOf() akan dianggap perubahan, setelan default yang digunakan sekarang adalah ==, bukan ===.

    Lihat https://kotlinlang.org/docs/reference/equality.html

    ambientOf() dan savedInstanceStateOf() menggunakan mutableStateOf() dalam implementasinya sehingga menjadi konsisten dengan mutableStateOf().

    Menggunakan persamaan struktural secara lebih dekat akan sesuai dengan ekspektasi developer.

    Misalnya,

    val state = mutableStateOf(1f)
    

    diikuti dengan,

    state.value = 1f
    

    tidak akan dianggap lagi sebagai perubahan pada state dan penggunaan state selama komposisi tidak perlu lagi dikomposisi ulang.

    Ini adalah perubahan yang dapat menyebabkan gangguan. Namun, pada sebagian besar kasus (seperti saat menggunakan class yang tidak mengganti equals()), perubahan ini tidak akan berpengaruh nyata pada aplikasi.

    Class yang mengganti equals(), seperti class data, mungkin mengalami penurunan performa karena metode equals()-nya kini secara default dipanggil saat ditetapkan ke mutableStateOf().

    Perilaku sebelumnya dapat dipulihkan dengan menambahkan parameter kebijakan policy = referentialEqualityPolicy() ke panggilan untuk mutableStateOf(), ambientOf(), dan savedInstanceStateOf(). (Ic21a7)

  • Row dan Column kini berfungsi inline yang secara signifikan mengurangi overhead penggunaannya. (I75c10)

Perbaikan Bug

  • setViewContent tidak digunakan lagi. Sebagai gantinya, setContent harus digunakan. (I7e497, b/160335130)
  • Menambahkan MonotonicFrameAnimationClock yang memungkinkan Anda menggunakan MonotonicFrameClock sebagai AnimationClockObservable untuk menutup kesenjangan antara jam berbasis coroutine baru dan API yang masih menggunakan jam berbasis callback lama.

    MonotonicFrameClock yang setara dengan ManualAnimationClock kini menjadi ManualFrameClock. (I111c7, b/161247083)

  • Modifier.stateDraggable telah dikerjakan ulang sepenuhnya dan namanya diganti menjadi Modifier.swipeable. Class SwipeableState baru sudah diperkenalkan, serta DrawerState dan BottomDrawerState difaktorkan ulang untuk mewarisi class tersebut. [Modal/Bottom]DrawerLayout tidak lagi menggunakan parameter onStateChange. (I72332, b/148023068)

  • Modifier.plus tidak digunakan lagi. Sebagai gantinya, gunakan Modifier.then. 'Then' memiliki sinyal pengurutan yang lebih kuat, serta melarang pengetikan Modifier.padding().background() + anotherModifier yang memutus rantai dan lebih sulit dibaca (Iedd58, b/161529964)

  • SubcomposeLayout ditambahkan. Ini adalah primitif tingkat rendah yang memungkinkan komposisi pada turunan selama pengukuran. Hal itu terjadi jika kita ingin menggunakan beberapa nilai yang hanya tersedia selama pengukuran untuk komposisi sub-pohon. Misalnya, WithConstraints tidak diimplementasikan menggunakan SubcomposeLayout. (I25cc8)

  • Nama Material FillingTextField diganti menjadi TextField dan nama TextField dasar diganti menjadi BaseTextField, agar API paling sederhana yang diinginkan mudah ditemukan dan digunakan (Ia6242, b/155482676)

  • Nama Modifier.drawBackground telah diganti menjadi Modifier.background (I13677)

Versi 0.1.0-dev15

22 Juli 2020

androidx.compose.runtime:runtime-*:0.1.0-dev15 dirilis. Versi 0.1.0-dev15 berisi commit berikut.

Update Dependensi

  • Untuk menggunakan Compose versi 0.1.0-dev15, Anda harus mengupdate dependensi sesuai dengan cuplikan kode baru yang ditampilkan di atas dalam Mendeklarasikan dependensi.

Perubahan API

  • Anotasi @Model kini tidak digunakan lagi. Gunakan state dan mutableStateOf sebagai alternatif. Keputusan penghentian ini tercapai setelah diskusi yang dilakukan secara saksama.

    Pembenaran

    Alasan mencakup, tetapi tidak terbatas pada:

    • Mengurangi konsep dan area permukaan API yang perlu diajari
    • Lebih selaras dengan toolkit lainnya yang dapat dibandingkan (Swift UI, React, Flutter)
    • Keputusan yang reversibel. Kita selalu dapat mengembalikan @Model di lain waktu.
    • Meniadakan penggunaan corner-case dan pertanyaan yang sulit dijawab tentang mengonfigurasi @Model sebagai hal-hal yang perlu ditangani
    • Class data @Model, sama dengan, kode hash, dll.
    • Bagaimana cara membuat beberapa properti "diamati" dan yang lainnya tidak?
    • Bagaimana cara menentukan kesetaraan struktural vs. referensi untuk digunakan dalam pengamatan?
    • Mengurangi "magic" di dalam sistem. Akan mengurangi kemungkinan seseorang menganggap sistem lebih cerdas dari seharusnya (contoh, mengetahui cara membedakan daftar)
    • Membuat perincian pengamatan lebih intuitif.
    • Meningkatkan kemampuan pemfaktoran ulang dari variabel -> properti pada class
    • Berpotensi membuka kemungkinan untuk melakukan pengoptimalan khusus Status secara manual
    • Lebih selaras dengan bagian ekosistem lainnya dan mengurangi ambiguitas terhadap status yang tidak dapat diubah atau kami “menerapkan status yang dapat diubah”

    Catatan Migrasi

    Hampir semua penggunaan @Model yang sudah ada telah diubah dengan baik menggunakan salah satu dari dua cara. Contoh di bawah ini menampilkan class @Model dengan dua properti hanya untuk keperluan contoh, dan menunjukkan class tersebut saat sedang digunakan dalam composable.

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

    Alternatif 1: Gunakan State<OriginalClass> dan buat salinan.

    Pendekatan ini dibuat lebih mudah dengan class data Kotlin. Intinya, buat semua properti var sebelumnya menjadi properti val pada class data, kemudian gunakan state sebagai ganti dari remember, lalu tetapkan nilai status ke salinan clone aslinya menggunakan metode praktis copy(...) class data.

    Penting untuk diperhatikan bahwa pendekatan ini hanya berfungsi saat satu-satunya mutasi ke class tersebut dilakukan dalam cakupan yang sama tempat instance State dibuat. Jika class secara internal bermutasi sendiri di luar cakupan penggunaan tersebut, dan Anda mengandalkan pengamatannya, maka gunakan pendekatan berikutnya.

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

    Alternatif 2: Gunakan mutableStateOf dan delegasi properti

    Pendekatan ini dibuat lebih mudah dengan delegasi properti Kotlin dan mutableStateOf API yang memungkinkan Anda membuat instance MutableState di luar komposisi. Intinya, ganti semua properti var dari class asli menggunakan properti var dengan mutableStateOf sebagai delegasi propertinya. Hal ini memiliki keuntungan bahwa penggunaan class tidak akan berubah sama sekali, kecuali implementasi internalnya. Perilaku ini tidak sepenuhnya identik dengan contoh aslinya, karena setiap properti saat ini diamati/berlangganan satu per satu, sehingga rekomposisi yang Anda lihat setelah pemfaktoran ulang berikut dapat menjadi lebih sempit (hal yang baik).

    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)

  • Mengubah strategi pembuatan kode compiler Compose. Sebelum perubahan, compiler compose akan mengubah panggilan ke fungsi yang dapat dikomposisi. Dengan perubahan ini, sekarang kami mengubah isi fungsi yang dapat dikomposisi dan membiarkan callsite tidak berubah (sebagian besarnya).

    Artinya, sebagian besar logika yang digunakan untuk berkomunikasi dengan runtime compose terjadi di awal isi fungsi, bukan di callsite.

    Ini seharusnya menjadi perubahan yang kompatibel dengan sumber untuk semua penggunaan compose. Sebagian besar pengguna compose tidak perlu mengupdate kode apa pun karena perubahan ini.

    Untuk mendukung tugas ini, tanda tangan JVM dari semua fungsi yang dapat dikomposisi telah berubah. Fungsi yang dapat dikomposisi yang menerima satu parameter diubah menjadi fungsi yang menerima 3 parameter. Parameter tambahannya adalah Composer, bilangan bulat 'kunci', dan bilangan bulat bitmask yang digunakan untuk menyebarkan metadata melalui panggilan.

    Compose kini juga mengubah argumen default ke fungsi yang dapat dikomposisi. Hal ini dilakukan tanpa menimbulkan kelebihan beban default pada fungsi itu sendiri, sehingga perubahan ini akan menyebabkan lebih sedikit fungsi yang ditentukan.

    Perubahan perilaku disengaja dan diketahui yang dihasilkan dari tindakan berikut:

    1. Beberapa panggilan akan melewati bagian, di mana tidak pernah dilakukan sebelumnya
    2. Ekspresi composable dalam ekspresi argumen default kini berlangganan dan ditangani dengan benar

    Tugas ini mencakup beberapa pengoptimalan: 1. Hasil perbandingan parameter disebarkan melalui grafik panggilan ke fungsi yang dapat dikomposisi lainnya. Ini akan menyebabkan lebih sedikit perbandingan pada saat runtime, mengurangi ukuran tabel slot, serta lebih banyak melewatkan fungsi yang dapat dikomposisi yang sebelumnya tidak dilewati 2. Parameter yang ditetapkan sebagai "statis" pada waktu kompilasi tidak lagi dibandingkan atau disimpan di runtime. Hal ini mengurangi jumlah perbandingan dan mengurangi ukuran tabel slot. 3. Struktur alur kontrol pada bagian isi fungsi digunakan untuk meminimalkan jumlah kelompok yang dihasilkan. Tindakan ini mengurangi ukuran tabel slot dan menyebabkan lebih sedikit tugas untuk runtime 4. Parameter pengirim dan penerima ke fungsi yang tidak terpakai tidak akan disertakan dalam menentukan kemampuan melewati fungsi jika tidak digunakan di dalam bagian isi fungsi.

    Sebagian besar perubahan yang dapat menyebabkan gangguan terjadi pada API yang ditargetkan oleh compiler secara langsung, dan penggunaan compose biasanya tidak akan terpengaruh: 1. Composer::startExpr telah dihapus 2. Composer::endExpr telah dihapus 3. Composer::call tidak digunakan lagi 4. Kelebihan beban non-vararg pada key telah dihapus. Gunakan versi vararg ke depannya. 5. Anotasi Pivotal tidak digunakan lagi. Gunakan key sebagai pengganti. 6. ScopeUpdateScope::updateScope diubah untuk mengharapkan Function3, bukan Function1 7. restartableFunction dan restartableFunctionN diupdate untuk menyertakan parameter waktu kompilasi tambahan (I60756, b/143464846)

  • Menambahkan sortWith dan removeRange ke MutableVector (Icccf7)

  • Menambahkan implementasi metode default untuk CompositionLifecycleObserver (I24289)

  • Appier kini memerlukan metode clear() untuk memisahkan posisi (Ibe697)

  • Menambahkan asMutableList() ke MutableVector untuk memungkinkannya diteruskan ke API publik tanpa harus menyalin seluruh daftar. (I298df)

  • Menambahkan rememberCoroutineScope() untuk mendapatkan CoroutineScope dalam komposisi untuk meluncurkan tugas sebagai respons terhadap peristiwa. (I0e264)

  • MutableVector adalah koleksi baru yang tidak menerapkan antarmuka Collection standar apa pun. Collection ini menawarkan kecepatan di atas persyaratan lainnya dan ditujukan hanya untuk digunakan dalam implementasi internal. (I8ebd6)

  • Menghapus sementara StableMutableList dan StableMutableMap untuk menghindari masalah pada versi penulisan Kotlin diperlukan. Antarmuka ini akan diperkenalkan kembali setelah compose diupdate ke versi Kotlin yang tidak memiliki masalah.

    SnapshotStateList dan SnapshotStateMap kini bersifat publik, tetapi tidak akan digunakan lagi setelah StableMutableList dan StableMutableMap dipulihkan. (Ia7769)

  • menambahkan fungsi top-level withFrameNanos untuk pengaturan waktu animasi (Ie34c5)

  • Anotasi @Untracked sudah tidak digunakan lagi. Ganti dengan @ComposableContract(tracked=false) (Id211e)

  • Nama RestartableFunction dan API terkait telah diganti menjadi ComposableLambda, dll. API ini hanya ditargetkan oleh compiler sehingga seharusnya tidak memengaruhi kompatibilitas tingkat sumber secara normal. Penggantian nama dilakukan untuk mengomunikasikan class ini dengan lebih baik saat muncul dalam pelacakan tumpukan (I7eb25)

  • Anotasi @Composable tidak berlaku lagi di class (Ia5f02)

  • Ambient<T> kini menjadi @Stable, bukan @Immutable (I0b4bb)

  • Sebelum perubahan ini, plugin compiler tulis akan melakukan intersepsi panggilan terhadap konstruktor di dalam fungsi @Composable jika terdapat (I5205a, b/158123804)

  • Composable Recompose tidak lagi menjadi abstraksi yang berguna. Sebagian besar rekomposisi harus terjadi sebagai hasil penugasan MutableState. Untuk hal-hal selain itu, sebaiknya Anda menggunakan fungsi invalidate untuk memicu rekomposisi cakupan saat ini. (Ifc992)

  • Observe bukan lagi abstraksi yang berguna. Jika Anda perlu menggandakannya, implementasinya dapat direplikasi hanya dengan membuat fungsi yang dapat dikomposisi yang menjalankan parameter lambda composable. Misalnya, @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • @Direct tidak digunakan lagi dan digantikan dengan @ComposableContract(restartable=false) (If4708)

  • Menambahkan adapter untuk StateFlow yang diperkenalkan baru-baru ini yang memungkinkan untuk mengisi terlebih dahulu nilai awal sehingga Status yang ditampilkan tidak dapat null (I61dd8, b/156233789)

  • Menambahkan adapter untuk Flow. Contoh penggunaan: nilai value oleh flow.collectAsState() (If2198, b/153375923)

  • Operator delegasi properti [Mutable]State dipindahkan ke ekstensi untuk mendukung pengoptimalan delegasi properti Kotlin 1.4. Pemanggil harus menambahkan impor untuk terus menggunakan by state { ... } atau by mutableStateOf(...). (I5312c)

  • androidx.compose.ViewComposer telah dipindahkan ke androidx.ui.node.UiComposer androidx.compose.Emittable telah dihapus. Berlebihan dengan ComponentNode. androidx.compose.ViewAdapters telah dihapus. Kasus penggunaannya sudah tidak didukung. Compose.composeInto sudah tidak digunakan lagi. Sebagai gantinya, gunakan setContent atau setViewContent. Compose.disposeComposition sudah tidak digunakan lagi. Sebagai gantinya, gunakan metode dispose pada Composition yang ditampilkan oleh setContent. androidx.compose.Compose.subcomposeInto telah dipindahkan ke androidx.ui.core.subcomposeInto Nama ComponentNode#emitInsertAt telah diganti menjadi ComponentNode#insertAt Nama ComponentNode#emitRemoveAt telah diganti menjadi ComponentNode#removeAt Nama ComponentNode#emitMode telah diganti menjadi ComponentNode#move (Idef00)

  • Memperbarui flag ComposeFlags.COMPOSER_PARAM menjadi true, yang akan mengubah strategi pembuatan kode untuk plugin compose. Pada tingkat tinggi, hal ini menyebabkan fungsi @Composable dibuat dengan parameter sintetik tambahan, yang akan diteruskan ke panggilan @Composable berikutnya agar runtime dapat mengelola eksekusi dengan benar. Ini adalah perubahan yang dapat menyebabkan gangguan biner yang signifikan, tetapi semestinya dapat menjaga kompatibilitas tingkat sumber pada semua penggunaan compose yang disetujui. (I7971c)

  • Perubahan yang dapat menyebabkan gangguan pada API ambien. Lihat log dan dokumentasi Ambient<T> untuk detail selengkapnya (I4c7ee, b/143769776)

  • Menambahkan ui-livedata - artefak baru dengan adaptor untuk LiveData. Contoh penggunaan: nilai value oleh liveData.observeAsState() (Ie9e8c, b/150465596)

  • Adaptor Rx tanpa nilai awal eksplisit tidak digunakan lagi. Menggunakan null tidak selalu merupakan default terbaik, misalnya jika Anda memiliki List, akan lebih baik dimulai dengan emptyList() atau default lain yang wajar (I00025, b/161348384)

  • Menambahkan ui-rxjava2 - artefak baru dengan adaptor untuk RxJava2. Contoh penggunaan: nilai value oleh observasiable.subscribeAsState() (Ifab4b, b/153369097)

  • savedInstanceState() sekarang dapat digunakan dengan jenis nullable (I6847f, b/153532190)

  • ListSaver() dan mapSaver() baru untuk memudahkan penulisan objek Saver kustom (I8cf68, b/152331508)

  • Fungsi baru: savedInstanceState() dan rememberSavedInstanceState(). Keduanya mirip dengan state() dan remember(), tetapi memiliki dukungan status instance yang tersimpan di (If1987, b/152025209)

Perbaikan Bug

  • Nama runOnIdleCompose diganti menjadi runOnIdle (I83607)
  • Membuat API eksperimental LayoutNode (I4f2e9)
  • androidx.ui.foundation.TextFieldValue dan androidx.ui.input.EditorValue tidak digunakan lagi. Composable TextField, FilledTextField, dan CoreTextField yang menggunakan jenis tersebut juga tidak digunakan lagi. Sebagai gantinya, gunakan androidx.ui.input.TextFieldValue instead (I4066d, b/155211005)
  • Menghapus DrawBackground API yang tidak digunakan lagi dan digantikan dengan API ekstensi drawBackground di Pengubah. Memfaktorkan ulang implementasi drawBackground cat, kuas, dan warna untuk mengurangi jalur kode serta menghapus persyaratan agar Pengubah dibuat sebagai bagian dari komposisi. (I0343a)
  • Mengupdate API compose dengan level yang lebih tinggi yang mengekspos Canvas untuk mengekspos CanvasScope. Tindakan ini akan menghapus keperluan konsumen untuk mengelola objek Paint-nya. Bagi konsumen yang masih memerlukan akses ke Canvas, mereka dapat menggunakan metode ekstensi drawCanvas yang menyediakan callback untuk mengeluarkan perintah menggambar menggunakan Canvas yang mendasarinya. (I80afd)
  • API lambda akhir WithConstraints telah diubah. Sekarang, sebagai ganti dua parameter, API ini memiliki cakupan penerima yang merupakan tambahan untuk batasan dan layoutDirection menyediakan properti minWidth, maxWidth, minHeight, dan maxHeight di Dp (I91b9a, b/149979702)
  • Menambahkan pengubah padding simetris. (I39840)
  • Memperbarui wrapContentWidth dan wrapContentHeight untuk mengharapkan Alignment vertikal atau horizontal, bukan sembarang Alignment. Pengubah gravitasi diperbarui untuk menerima Alignment vertikal atau horizontal. Row, Column, dan Stack telah diperbarui untuk mendukung Alignment berkelanjutan khusus. (Ib0728)
  • Nama modul ui-text diganti menjadi ui-text-core (I57dec)
  • Meningkatkan kualitas DrawModifier API:
    • Membuat cakupan penerima untuk draw() ContentDrawScope
    • Menghapus semua parameter pada draw()
    • DrawScope memiliki antarmuka yang sama dengan CanvasScope
    • ContentDrawScope memiliki metode drawContent() (Ibaced, b/152919067)
  • ColoredRect tidak digunakan lagi. Sebagai gantinya, gunakan Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731)
  • Penggantian operator Modifier plus dengan fungsi ekstensi pabrik (I225e4)
  • Anggota RowScope dan ColumnScope kini dapat diakses dari luar Baris dan Kolom. (I3a641)
  • Mengganti nama LayoutFlexible menjadi LayoutWeight. Mengganti nama parameter tight menjadi fill. (If4738)
  • WithConstraints mendapatkan parameter LayoutDirection (I6d6f7)
  • Mengganti nama latar belakang menjadi DrawBackground dan menjadikannya agar dapat diingat secara default (Ia0bd3)
  • Mengganti ButtonStyle dengan fungsi yang berbeda dan penghapusan overload pada teks (string). Lihat contoh terbaru untuk informasi penggunaan. (If63ab, b/146478620, b/146482131)
  • Sekarang runOnIdleCompose dan runOnUiThread menjadi fungsi global, bukan metode di ComposeTestRule. (Icbe8f)

Kontribusi Eksternal

  • Hapus API yang tidak diperlukan seperti Looper dan Handler dari lapisan porting Compose Runtime (I6847d)
  • Tidak lagi menggunakan Flow<T>.collectAsState() tanpa nilai awal. Gunakan StateFlow<T> atau teruskan nilai awal eksplisit. (I63f98, b/157674865)