Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveables
androidx.compose.runtime.snapshots
(Lihat dokumen referensi API untuk semua paket compose )
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
11 Desember 2024 | 1.7.6 | - | - | 1.8.0-alpha07 |
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.
Grup | Deskripsi |
---|---|
compose.animation | Mem-build animasi di aplikasi Jetpack Compose untuk memperkaya pengalaman pengguna. |
compose.compiler | Mentransformasi fungsi @Composable dan mengaktifkan pengoptimalan dengan plugin compiler Kotlin. |
compose.foundation | Menulis aplikasi Jetpack Compose dengan elemen penyusun siap pakai dan memperluas dasar untuk mem-build bagian sistem desain Anda sendiri. |
compose.material | Mem-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.material3 | Mem-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.runtime | Elemen penyusun yang penting untuk model pemrograman dan pengelolaan status Compose, serta runtime inti untuk ditargetkan oleh Plugin Compose Compiler. |
compose.ui | Komponen 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.7.5" implementation "androidx.compose.runtime:runtime-livedata:1.7.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.5") implementation("androidx.compose.runtime:runtime-livedata:1.7.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.5") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } 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.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Runtime Tracing Versi 1.7
Versi 1.7.0-rc01
18 September 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
dirilis. Versi 1.7.0-rc01 berisi commit ini.
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
- Menempelkan dependensi ke versi stabil terendah yang didukung (yaitu compose-runtime dan tracing-perfetto) - memperbaiki masalah saat compose-runtime-tracing akan memasukkan compose-runtime versi 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 Tracing Perfetto versi terbaru, yang memungkinkan dukungan untuk Tracing Komposisi saat aplikasi dimulai (cold start), misalnya di AndroidX Benchmark dan Android Studio (mulai dari Hedgehog Beta 2).
Perubahan API
- Mengganti nama
androidx.tracing.perfetto.Trace
menjadiandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - Membuat API Perfetto SDK Pelacakan konsisten dengan
android.os.Trace
. (I73ba0, b/282199917) - Prasyarat untuk pelacakan saat startup 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.8
Versi 1.8.0-alpha07
11 Desember 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha07
dirilis. Versi 1.8.0-alpha07 berisi commit ini.
Perubahan API
- Menambahkan API alat yang membantu pemeriksa tata letak untuk mengaitkan subkomposisi dengan komposisi induk jika node tidak digunakan untuk menjembatani komposisi. (I4ce3d)
- Membuat konstanta aritmetika dan khusus untuk
SnapshotId
internal, bukan publik. Aritmetika dapat dilakukan padaSnasphotId
, jika perlu, dengan mengonversinya menjadiInt
atauLong
menggunakantoInt()
atautoLong()
. (Ic3a57)
Kontribusi Eksternal
- Mengoptimalkan penyimpanan untuk parameter
movableContentOf
. (ed87177)
Versi 1.8.0-alpha06
13 November 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
dirilis. Versi 1.8.0-alpha06 berisi commit ini.
Perubahan API
- Perubahan pada
PausableComposition
API. Perubahan yang dapat menyebabkan gangguan ini terkait dengan rilis 1.8.0-alpha sebelumnya (sejak 1.8.0-alpha02), tetapi karena ini adalah API baru di 1.8.0, kompatibilitas mundur tidak dipertahankan karena API masih dalam versi alfa. (I39819) - Menambahkan API alat untuk mengamati pembuatan komposisi baru dalam Recomposer (Iaeb7e)
- Menambahkan
snapshotId
, dari jenisLong
, keSnapshot
danid
yang tidak digunakan lagi. ID snapshot diubah dariInt
menjadiLong
untuk menghindari ID snapshot yang meluap pada sistem dengan kecepatan frame yang sangat tinggi dan animasi yang berjalan lama. Jenis ini dibuat expect/actual untuk memungkinkan jenis ini menjadiInt
, atau jenis lainnya, di platform yang tidak memiliki jenisLong
native. Platform yang tidak memilikiLong
native, seperti JavaScript, harus menghindari kecepatan frame tinggi (lebih dari 1.000 FPS) yang akan menyebabkan overflow untukInt
kira-kira setiap 24 hari. (I38ac3, b/374821679)
Perbaikan Bug
- Memperbaiki
providesDefault
untuk satuprovides
. (aosp/3318540 b/374263387) - Optimalkan
ChangeList
. (3318538)
Versi 1.8.0-alpha05
30 Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
dirilis. Versi 1.8.0-alpha05 berisi commit ini.
Perbaikan Bug
- Memperbaiki stack overflow yang menambahkan
Int.MAX_VALUE
keSnapshotIdSet
. (b/370536104, Ic4179f6) - Pengoptimalan mikro runtime (I50c60)
- Mengizinkan R8 menghapus panggilan runtimeCheck proses debug (I8c44)
- Membuat
compoundKeyOf
iteratif, bukan rekursif (I5817f)
Kontribusi Eksternal
- Mengimplementasikan stack dengan daftar koleksi (I7d47c)
Versi 1.8.0-alpha04
16 Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
dirilis. Versi 1.8.0-alpha04 berisi commit ini.
Peningkatan Performa
- Memberikan ID snapshot untuk data status dalam konstruktor (85c00f)
- Memfaktorkan ulang
SnapshotState***
untuk menghindari error verifikasi class (6ee4a6) - Memperbaiki aturan R8 untuk mencegah penyematan throw (5beb92)
- Mengoptimalkan Operasi secara mikro (d73c5c)
- Mengoptimalkan alokasi
SynchronizedObject
di JVM (2b043f)
Versi 1.8.0-alpha03
2 Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
dirilis. Versi 1.8.0-alpha03 berisi commit ini.
Peningkatan Performa
- Membuat konteks turunan secara lambat untuk
rememberCoroutineScope
(f61464)rememberCoroutineScope
biasanya digunakan untuk meluncurkan coroutine sebagai respons terhadap peristiwa yang terjadi setelah komposisi. Dalam beberapa skenario, peristiwa ini mungkin tidak pernah terjadi, sehingga menyebabkan biaya tambahan untuk pembuatan dan pembatalan Tugas tanpa manfaat apa pun.- Buat cakupan yang ditampilkan oleh
rememberCoroutineScope
membuatcoroutineContext
secara lambat saat diakses, sehingga menghindari pembuatan dan pembatalan tugas sepenuhnya jika cakupan tidak pernah digunakan.
Versi 1.8.0-alpha02
18 September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
dirilis. Versi 1.8.0-alpha02 berisi commit ini.
Fitur Baru
- Menambahkan
PausableComposition
yang memungkinkan pembuatan subkomposisi yang dapat dijeda selama komposisi dan diterapkan secara asinkron ke komposisi. Dukungan compiler diperlukan untuk jeda yang saat ini sedang dalam pengembangan. (I3394b)
Versi 1.8.0-alpha01
4 September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
dirilis. Versi 1.8.0-alpha01 berisi commit ini.
Versi 1.7
Versi 1.7.6
11 Desember 2024
androidx.compose.runtime:runtime-*:1.7.6
dirilis. Versi 1.7.6 berisi commit ini.
Versi 1.7.5
30 Oktober 2024
androidx.compose.runtime:runtime-*:1.7.5
dirilis. Versi 1.7.5 berisi commit ini.
Versi 1.7.4
16 Oktober 2024
androidx.compose.runtime:runtime-*:1.7.4
dirilis. Versi 1.7.4 berisi commit ini.
Versi 1.7.3
2 Oktober 2024
androidx.compose.runtime:runtime-*:1.7.3
dirilis. Versi 1.7.3 berisi commit ini.
Versi 1.7.2
18 September 2024
androidx.compose.runtime:runtime-*:1.7.2
dirilis. Versi 1.7.2 berisi commit ini.
Versi 1.7.1
10 September 2024
- Tidak ada perubahan pada artefak Android. Artefak
-desktop
dihapus dan artefak-jvmStubs
dan-linuxx64Stubs
ditambahkan. Tidak satu pun target ini yang dimaksudkan untuk digunakan, melainkan sebagai placeholder untuk membantu upaya Jetbrains Compose.
Versi 1.7.0
4 September 2024
androidx.compose.runtime:runtime-*:1.7.0
dirilis. Versi 1.7.0 berisi commit ini.
Perubahan penting sejak versi 1.6.0
- Menambahkan kemampuan untuk menyediakan komposisi lokal yang dihitung berdasarkan nilai komposisi lokal lainnya secara default, menggunakan
compositionLocalWithComputedDefault()
, atau dengan menyediakan lambda yang akan digunakan untuk menghitung nilai menggunakanprovidesComputed
, bukanprovides
. - Nilai lokal komposisi dapat diperoleh dengan menggunakan properti
currentValue
dari lokal komposisi yang dapat diakses dari dalam lambda yang menghitung nilai. Ini digunakan sebagai pengganticurrent
yang hanya dapat diakses dalam fungsi@Composable
. (Iadbc0) - Objek status yang baru dibuat dapat langsung diakses dari snapshot lain, termasuk snapshot global, dengan status awalnya. Setiap modifikasi berikutnya tidak akan terlihat hingga snapshot tempat objek dibuat diterapkan.
- Status awal
mutableStateOf()
, serta versi primitifnya, adalah nilai yang diteruskan sebagai parameter kemutableStateOf()
. Status awalmutableStateListOf()
danmutableStateMapOf()
kosong. - Menambahkan
Snapshot.isInSnapshot
danSnapshot.PreexistingSnapshotId
yang digunakan untuk mengaktifkan objek status agar dapat langsung diakses dari snapshot global setelah pembuatannya. - Objek status kustom dapat mendukung akses langsung dengan mengikuti pola perubahan yang dilakukan pada objek snapshot bawaan. (I84a17)
- Aktifkan
nonSkippingGroupOptimization
untuk library compose. Hal ini menyebabkan kode yang dihasilkan untuk semua fungsi composable yang tidak dapat dimulai ulang di androidx menjadi lebih efisien. Pada masa mendatang, kami berencana mengaktifkannya secara default. I(acbc08) - Membatalkan validasi lambda composable dalam subkomposisi pada frame yang sama. (98301c)
- Panggil callback
onRelease
dalam urutan yang sama denganonForgotten
. (2cd790) - Mengaktifkan mode skipping kuat (ed1766)
- Membuat
currentCompoundHashKey
unik dalam lebih banyak kasus (d4a872)
Versi 1.7.0-rc01
21 Agustus 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
dirilis. Versi 1.7.0-rc01 berisi commit ini.
Versi 1.7.0-beta07
7 Agustus 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
dirilis. Versi 1.7.0-beta07 berisi commit ini.
Versi 1.7.0-beta06
24 Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
dirilis. Versi 1.7.0-beta06 berisi commit ini.
Versi 1.7.0-beta05
10 Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
dirilis. Versi 1.7.0-beta05 berisi commit ini.
Versi 1.7.0-beta04
26 Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
dirilis. Versi 1.7.0-beta04 berisi commit ini.
Versi 1.7.0-beta03
12 Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
dirilis. Versi 1.7.0-beta03 berisi commit ini.
Versi 1.7.0-beta02
29 Mei 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
dirilis. Versi 1.7.0-beta02 berisi commit ini.
Versi 1.7.0-beta01
14 Mei 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
dirilis. Versi 1.7.0-beta01 berisi commit ini.
Versi 1.7.0-alpha08
1 Mei 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
dirilis. Versi 1.7.0-alpha08 berisi commit ini.
Versi 1.7.0-alpha07
17 April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
dirilis. Versi 1.7.0-alpha07 berisi commit ini.
Fitur Baru
- Menambahkan kemampuan untuk menyediakan komposisi lokal yang dihitung berdasarkan nilai komposisi lokal lainnya secara default, menggunakan
compositionLocalWithComputedDefault()
, atau dengan menyediakan lambda yang akan digunakan untuk menghitung nilai menggunakanprovidesComputed
, bukanprovides
. - Nilai lokal komposisi dapat diperoleh dengan menggunakan properti
currentValue
dari lokal komposisi yang dapat diakses dari dalam lambda yang menghitung nilai. Ini digunakan sebagai pengganticurrent
yang hanya dapat diakses dalam fungsi@Composable
. (Iadbc0)
Perubahan API
- Objek status yang baru dibuat dapat langsung diakses dari snapshot lain, termasuk snapshot global, dengan status awalnya. Setiap modifikasi berikutnya tidak akan terlihat hingga snapshot tempat objek dibuat diterapkan.
- Status awal
mutableStateOf()
, serta versi primitifnya, adalah nilai yang diteruskan sebagai parameter kemutableStateOf()
. Status awalmutableStateListOf()
danmutableStateMapOf()
kosong. - Menambahkan
Snapshot.isInSnapshot
danSnapshot.PreexistingSnapshotId
yang digunakan untuk mengaktifkan objek status agar dapat langsung diakses dari snapshot global setelah pembuatannya. - Objek status kustom dapat mendukung akses langsung dengan mengikuti pola perubahan yang dilakukan pada objek snapshot bawaan. (I84a17)
Perbaikan Bug
- Memperbaiki penggabungan
readObserver
dalam snapshot bertingkat. Hal ini menyebabkan status turunan bertingkat menjadi kurang valid saat digunakan di dalamsnapshotFlow
. (Idf138)
Versi 1.7.0-alpha06
3 April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
dirilis. Versi 1.7.0-alpha06 berisi commit ini.
Perbaikan Bug
- Memperbaiki penyediaan nilai tunggal yang menangani
providesDefault
(538f45) - Menghindari deadlock di Recomposer yang mengakses clock frame (07e5c6)
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 terlambat 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) - Aktifkan
nonSkippingGroupOptimization
untuk library compose. Hal ini menyebabkan kode yang dihasilkan untuk semua fungsi composable yang tidak dapat dimulai ulang di androidx menjadi lebih efisien. Pada masa mendatang, kami berencana 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 deteksi perubahan (0941b5)
Peningkatan Performa
- Meningkatkan alokasi memori saat mendeteksi perubahan (53e7fd)
- Memperbaiki kebocoran memori di composer (0e097d)
- Menggunakan
ScopeMap
untuk meneruskan pembatalan validasi saat merekomposisi (e19a7e) - Mengoptimalkan peta pembatalan validasi agar hanya menyimpan status turunan (f11c44)
- Mengganti penggunaan
IdentityArraySet
denganScatterSet
(db572e) - Mengoptimalkan
removeScope
diScopeMap
(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 validasi lambda composable dalam subkomposisi pada frame yang sama. (98301c)
- Panggil callback
onRelease
dalam urutan yang sama denganonForgotten
. (2cd790) - Memfilter status yang diubah yang tidak diamati di
snapshotFlow
. (796b80)
Peningkatan Performa
- Ubah observer snapshot di tempat saat sudah transparan. (f60f30)
- Optimalkan
SnapshotIdSet.lowest()
. (7ae149) - Gunakan
fold()
bebas alokasi diSnapshotIdSet
. (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 perekaman modifikasi status snapshot (28c3fe)
- Mengaktifkan mode skipping kuat (ed1766)
Perbaikan Bug
- Memperhitungkan meta parameter default dalam ingatan intrinsik (096665)
- Membuat
currentCompoundHashKey
unik dalam lebih banyak kasus (d4a872) - Mewujudkan grup saat keluar dari panggilan fungsi inline (2a90fc)
Versi 1.6
Versi 1.6.8
12 Juni 2024
androidx.compose.runtime:runtime-*:1.6.8
dirilis. Versi 1.6.8 berisi commit ini.
Versi 1.6.7
1 Mei 2024
androidx.compose.runtime:runtime-*:1.6.7
dirilis. Versi 1.6.7 berisi commit ini.
Versi 1.6.6
17 April 2024
androidx.compose.runtime:runtime-*:1.6.6
dirilis. Tidak ada perubahan sejak rilis terakhir.
Versi 1.6.5
3 April 2024
androidx.compose.runtime:runtime-*:1.6.5
dirilis. Versi 1.6.5 berisi commit ini.
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
dalam urutan yang sama denganonForgotten
. (2cd790) - Memfilter 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 ditelan selama loop rekomposisi (4dff9a)
Pengoptimalan Performa
- Mengoptimalkan perekaman modifikasi status snapshot (28c3fe)
- Mengoptimalkan
rememberSaveable
(f01d79) - Menunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)
- Meningkatkan penyediaan 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) - Membatasi pengambilan
$dirty
ke lambda inline. (acfca0) - Memperbaiki konten yang 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
- Memperluas nilai stabilitas tertentu dalam anotasi. (274a4c)
Perbaikan Bug
- Gunakan kebijakan referensi untuk status cakupan lokal komposisi dalam konteks. (83361c)
- Membatasi pengambilan $dirty ke lambda inline. (acfca0)
- Memperbaiki konten yang dapat dipindahkan yang terkadang menerima lokal komposisi yang salah. (035cd6)
- Gunakan hashmap non-alokasi yang lebih cepat di
RecomposeScopeImpl
. (d79494) - Gunakan
ObjectIntMap
diDerivedState
. (21862e) - Gunakan
IntRef
untuk intSnapshotThreadLocal
diDerivedState
. (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) - Menghapus 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 sebagaiRandomAccess
untuk memungkinkan penggunaan versi pengindeksan langsung dari helper daftar. (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 ditelan selama loop rekomposisi (4dff9a)
Perubahan API
- Menambahkan metode untuk menonaktifkan
ReusableComposition
, menghapus pengamatan, tetapi mempertahankan node. Komposisi yang dinonaktifkan dapat diaktifkan kembali dengan memanggilsetContent
. (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 node konten yang dapat dipindahkan dibongkar. (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) - Menunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)
- Meningkatkan penyediaan nilai lokal komposisi (a337ea)
SideEffect
ditandai sebagai@ExplicitGroupsComposable
untuk menghindari pembuatan grup. (I74815)- Hindari membandingkan peta lokal komposisi saat digunakan kembali (782071)
Perubahan API
- Menambahkan overload kasus khusus untuk
CompositionLocalProviders
yang menghindari overhead yang digunakan untuk membuat penyediaan beberapa nilai lebih cepat, tetapi merupakan overhead saat memberikan satu nilai. (I6d640, b/288169379)
Perbaikan Bug
- Memperbaiki kebocoran memori tabel slot (73fcfe)
- Memperbaiki cara kami memulihkan
rememberSaveable
saatstateSaver
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
diDerivedState
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 panggilanremember
. (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 objekState
tanpa menimbulkan penalti untuk autoboxing. Gunakan metode factory barumutableIntState(Int)
,mutableFloatStateOf(Float)
, dll. untuk menggunakannya. (I48e43)
Perbaikan Bug
- Lewati rekomposisi subkomposisi yang akan dihapus. (Ieeb99, b/254645321)
- Jangan simpan referensi snapshot di
ComposerImpl
(0206f7) - Jangan menerapkan 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 pemanggilwithFrameNanos
lainnya, akan diblokir. (Id9e7f, b/240975572) - Menjalankan callback penonaktifan untuk
LayoutNode
sebelum membuang efek 3784073 - Memperbaiki tanda yang diubah untuk lambda yang dimulai ulang ea81df9
- Memperbaiki regresi edit langsung untuk Composable dengan node 73fd4d8
- ON_STOP harus menjeda siaran jam frame, bukan komposisi ae276f1
- Membatalkan validasi cakupan
SnapshotStateObserver
untuk status turunan yang tidak berubah 84d9b1c - Memperbaiki potensi deadlock 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 pemeriksaan penonaktifan (a0b518b) - Menghapus
fill
diSlotTable.moveSlotGapTo()
dan memindahkannya untuk menutup (81f9935) - Memperbaiki pembatalan validasi yang tidak ada saat konten yang dapat dipindahkan sedang bergerak (1d7c024)
- Memperbaiki pembatalan validasi langsung untuk konten yang dapat dipindahkan yang dipindahkan (8676618)
Peningkatan Performa
- Hindari menghitung
readableHash
diDerivedState
jika snapshot tidak diubah. (307102) - Mengurangi alokasi (I65c09, d7ea77, 727974, dan 445808 )
- Pembatalan cepat compose
CoroutineScopes
(a55362 dan bd382f) - Menimpa data objek status dengan data status yang tidak dapat diakses (c986960)
- Menggunakan composer dari cakupan yang benar saat mewujudkan 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
Menunda pembacaan ulang status turunan hingga perubahan dicatat (f38099)
Inspeksi opsional untuk merekomendasikan migrasi panggilan
mutableStateOf()
ke jenis khusus yang sesuai untuk primitif tersedia. ID lint-nya adalahAutoboxingStateCreation
. Sebelumnya, inspeksi 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 lebih tinggi) dengan mendeklarasikanwarning "AutoboxingStateCreation"
di dalam konfigurasi build.gradle atau build.gradle.kts modul seperti yang ditunjukkan (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
- Lewati rekomposisi subkomposisi yang akan dihapus. (Ieeb99, b/254645321)
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 menghitung
readableHash
diDerivedState
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 panggilanremember
. (I64550) - Menambahkan versi primitif Status dan
MutableState
(fb3d89) - Menambahkan
Snapshot.isApplyObserverNotificationPending
(I672a5)
Perbaikan Bug
- Mengurangi alokasi (I65c09, d7ea77, 727974, dan 445808 )
- Jangan simpan referensi snapshot di
ComposerImpl
(0206f7) - Pembatalan cepat compose
CoroutineScopes
(a55362 dan bd382f) - Jangan menerapkan 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 clock 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 objekState
tanpa menimbulkan penalti untuk autoboxing. Gunakan metode factory barumutableIntState(Int)
,mutableFloatStateOf(Float)
, dll. untuk menggunakannya. (I48e43)
Perbaikan Bug
Panggil
onEndChanges
selama pembuangan komposisi. Node fokus yang dihapus selamaComposition.dispose
berlanggananonEndChanges
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 validasi cakupan yang terkait dengan status turunan setiap kali dependensi berubah. Perubahan dependensi didaftarkan pada kemajuan snapshot, yang dapat terjadi setelah status turunan dibaca (karena panggilan keSnapshot.notifyObjectsInitialized()
).Logika pengamatan status turunan sebelumnya di
SnapshotStateObserver
membersihkan dependensi lama, lalu membaca nilai baru. Hal ini menyebabkan kondisi race dengan pembatalan validasi yang terjadi dalam status yang dibersihkan, saat pembatalan validasi dependensi tidak terdaftar.Perubahan ini mengurutkan ulang pembersihan dependensi dan pembacaan status turunan, sehingga memastikan bahwa pembatalan validasi selalu terjadi dalam status yang 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 pemanggilwithFrameNanos
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 tanda yang diubah untuk lambda yang dimulai ulang ea81df9
- Memperbaiki regresi edit langsung untuk Composable dengan node 73fd4d8
- ON_STOP harus menjeda siaran jam frame, bukan komposisi ae276f1
- Membatalkan validasi cakupan
SnapshotStateObserver
untuk status turunan yang tidak berubah 84d9b1c - Memperbaiki potensi deadlock 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 menjadi composable (f174f6e)
Perbaikan Bug, Peningkatan Performa
- Menimpa data objek status dengan data status yang tidak dapat diakses (c986960)
- Menggunakan composer dari cakupan yang benar saat mewujudkan grup (9a5e5b6)
- Memperbaiki
endToMarker()
saat mengakhiri grup node. (d71d980) - Menggunakan grup
SlotWriter
saat ini untuk pemeriksaan penonaktifan (a0b518b) - Menggunakan
IdentityArraySet
untuk menyimpan pembatalan validasi snapshot (7f60cca) - Menghapus
fill
diSlotTable.moveSlotGapTo()
dan memindahkannya untuk menutup (81f9935) - Memperbaiki pembatalan validasi yang tidak ada saat konten yang dapat dipindahkan sedang bergerak (1d7c024)
- Memperbaiki pembatalan validasi langsung untuk konten yang dapat dipindahkan yang 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 mengizinkanModifier.Nodes
meluncurkan coroutine (I76ef9) - Izinkan
Modifier.Nodes
membacaCompositionLocals
dengan menerapkan antarmukaCompositionLocalConsumerModifierNode
. (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
atauSnapshotStateMap
dapat mengalami deadlock jika modifikasi terjadi secara serentak dengan penulisan langsung ke data status. Hal ini menjadi lebih mungkin terjadi dengan perubahan yang diperkenalkan oleh 93fcae828b yang menggunakan penulisan langsung untuk merilis data yang tidak digunakan.Kunci kini 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
- Menggunakan nilai yang diinisialisasi dari
LiveData
untuk komposisi pertama 3680e25 - Tambahkan
ComposeNodeLifecycleCallback
untuk mengamati siklus proses node compose. 8b6a258 - Menambahkan properti
parameterTypes
keComposableMethod
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
- Menghapus 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 pemeriksaan dalam metode "get"
IdentityArraySet
35a77d3 - Memperbarui modul compose untuk menggunakan ekstensi
ViewTreeLifecycleOwner
21c2122 - Kirim notifikasi penerapan setelah Recomposer menyelesaikan frame. 98f2641
- Memperbaiki error indeks di luar batas saat membatalkan Recomposer 8f8656f
- Selalu paksa rekomposisi jika penyedia induk Komposisi telah berubah 9526fcc
- Toleransi recomposer untuk Tugas yang dibatalkan a55f7ed
- Meningkatkan penanganan pembatalan validasi untuk sejumlah besar komposer 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
keComposer.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 denganjava.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
danSnapshotStateMap
kini memiliki penerapan eksplisittoList()
dantoMap()
, 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 menggunakansnapshotFlow
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
- Untuk memberikan dukungan pengeditan langsung yang lebih baik, API ditambahkan agar penanganan pengecualian selama komposisi dapat dilakukan
- Penanganan error komposisi untuk hot reload
- Menangani error pengeditan langsung di penyimpanan/pemulihan
Pelacakan Komposisi
- API pelacakan runtime ditambahkan untuk mendukung alat pelacakan komposisi baru
- Membuat panggilan awal/akhir untuk peristiwa rekaman aktivitas composable
- Penambahan kembali ComposerKt.traceEventStart(Int, String)
Reflection API untuk Composable
- API
ComposableMethod
baru telah ditambahkan untuk memungkinkan pemanggilan API composable berbasis refleksi yang lebih andal. - Memindahkan invokeComposable ke compose runtime
- Mengerjakan ulang API untuk memanggil metode composable
Perbaikan Runtime
- Memperbaiki pengujian rentang yang salah untuk pemeriksaan tabel slot di penanda
- Memungkinkan konten yang dapat dipindahkan untuk masuk dan keluar dari SubcomposeLayout
- Memperbaiki pemindahan konten ke konten baru dari subkomposisi
Sistem Snapshot
- Sistem snapshot mendapatkan berbagai peningkatan kualitas dalam pengelolaan memori, performa, dan ketepatan.
- Mengoptimalkan penghapusan cakupan di SnapshotStateObserver
- Menghapus snapshot bertingkat yang dibuat dari snapshot transparan
- Memperbaiki kondisi race saat membaca status dari snapshot global
- Mendukung DerivedState di SnapshotStateObserver
- Mencegah penghapusan status turunan dari komposisi saat dibaca dalam cakupan lain
- Menggunakan IdentityArrayMap, bukan HashMap di dalam DerivedState
- Memperbarui observer status turunan agar dapat menggunakan vektor yang dapat berubah
- Memperbarui pembersihan status SnapshotStateObserver
- Mengganti SnapshotStateObserver.invalidated dengan ArraySet
- Memperbaiki kondisi race saat membaca status dari snapshot global
- Memperbaiki penggunaan data yang tidak berlaku dalam penghitungan hash DerivedState
- Memperbaiki kondisi race saat memajukan snapshot global
- Mempercepat pembersihan observasi cakupan di SnapshotStateObserver
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
danrememberCoroutineScope
yang diubah menjadicrossinline
. 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
- Mengupdate API (I64ca0)
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 keCompositionData
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
- Menambahkan snapshot eksperimental unsafeEnter/Leave
- Menambahkan API eksperimental Snapshot.asContextElement
- Menghadirkan Snapshot.withoutReadObservation
- Mengizinkan status untuk berpindah dalam komposisi
- Perekaman Aktivitas Rekomposisi di Compose
Performa di 1.2
- Meningkatkan performa lokal komposisi
- Profil dasar pengukuran untuk compose harus berasal dari benchmark
Perbaikan Bug di 1.2
- Menghapus informasi pelacakan dari cakupan rekomposisi rilis
- Mencegah penghapusan status turunan dari komposisi saat dibaca dalam cakupan lain
- Menggunakan removeScope() yang lebih efisien di SnapshotStateObserver
- Membersihkan dependensi status turunan dalam komposisi
- Memperbaiki perubahan currentCompositeKeyHash berdasarkan rekomposisi dalam di konten yang dapat dipindahkan
- Membersihkan komposisi yang tidak tervalidasi selama pembuangan
- Memperbaiki pembacaan status turunan selama rekomposisi
- Memperbaiki kebocoran memori saat mengamati objek status turunan
- Memperbaiki kunci hash komposit movableContent agar konsisten
- Memperbaiki masalah corner case ketika komposer error
- Memastikan pembatalan paksa validasi rekomposisi paksa grup
- Memperbaiki bug saat rememberSaveable dengan input dipulihkan dalam urutan yang salah
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 antarmukaCompositionTracer
. (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
, danComposableOpenTarget
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
atauReusableComposeNode
perlu menambahkan anotasiCompoableTarget
untuk fungsi dan jenis parameter lambda composable. Namun, sebaiknya buat anotasi yang dianotasikan denganComposableTargetMarker
, lalu anotasi yang ditandai akan digunakan sebagai gantiComposableTarget
secara langsung. Anotasi composable yang ditandai denganComposableTargetMarker
setara denganComposbleTarget
dengan nama class atribut yang sepenuhnya memenuhi syarat sebagai parameter applier. Untuk contoh penggunaanComposableTargetMarker
, lihatanroidx.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
keCompositionData
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
- Memperbaiki
NullPointerException
diandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Memperbaiki error yang disebabkan oleh konten papan klip saat membaca dari papan klip di Android. (I06020, b/197769306)
- Memperbaiki RTL di
LazyVerticalGrid
(aosp/1931080, b/207510535)
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 denganRecomposer.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 Kotlin1.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 AGP7.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 disrc/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 menggunakanadb 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 karakterH
,S
, danP
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, classandroidx.compose.runtime.SlotTable
akan memiliki deskripsiLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
adalah tanda tangan metode, dan menyertakan nama, jenis parameter, serta jenis nilai yang ditampilkan metode. Misalnya, metodefun isPlaced(): Boolean
padaLayoutNode
memiliki tanda tanganisPlaced()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 menjadiState<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 untukComposeNode
. (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 parametercount
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. MemanggilwithFrameNanos
atauRecomposer.runRecomposeAndApplyChanges
tanpaMonotonicFrameClock
sekarang akan menampilkanIllegalStateException
. (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
untukcompositionLocalOf
danstaticCompositionLocalOf
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 setelahselected
danonClick
. - Mengganti nama parameter
alwaysShowLabels
di BottomNavigationItem menjadialwaysShowLabel
. - Mengganti nama parameter
bodyContent
di beberapa komponen menjadi hanyacontent
. - 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
kedarkColors()
. Warna ini biasanya sama dengansecondary
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
diSlider
menjadionValueChangeFinished
dan membuatnya nullable. - Mengganti nama parameter
text
diSnackbar
menjadicontent
untuk konsistensi. - Menambahkan parameter
contentPadding
keDropdownMenuItem
untuk memungkinkan penyesuaian padding default dan menjadikancontent
sebagai ekstensi diRowScope
. - Mengganti nama
ModalDrawerLayout
menjadiModalDrawer
. - Mengganti nama
BottomDrawerLayout
menjadiBottomDrawer
. - (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
danwithMutableSnapshot
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 untukCompositionLifecycleObserver
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 saatonEnter
hanya dipanggil sekali.onEnter
dipanggil beberapa kali jika objek digunakan dalam subkomposisi, sepertiWithConstraints
danScaffold
, yang membuat jaminan panggilanonEnter
tunggal tidak dapat diandalkan dan telah dihapus untukRememberObserver
.RememberObserver
menambahkanonAbandoned
yang dipanggil jika instanceRememberObserver
ditampilkan dari callback yang diteruskan keremember
tetapi tidak diingat dalam status komposisi, dan, oleh karena itu, tidak akan pernah memanggilonRemembered
. 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 instanceRememberObserver
yang mengikuti rekomendasi referensi tunggal di atas melacak resource eksternalonForgotten
danonAbandoned
, masing-masing menunjukkan bahwa resource tidak lagi diperlukan. Jika objek sedang melacak pekerjaan yang dimulai atau resource yang dialokasikan dionRemembered
,onAbandoned
dapat diabaikan karena tidak akan dipanggil jikaonRemembered
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 menjadiinsertTopDown()
.Menambahkan metode baru,
insertBottomUp()
.Applier akan memasukkan node ke hierarki yang sedang diedit menggunakan
insertTopDown()
atauinsertBottomUp()
bergantung mana yang berperforma lebih baik.Beberapa hierarki, seperti
LayoutNode
danView
, 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 menggantikaninsertBottomUp()
untuk membuat hierarki dari bawah ke atas daninsertTopDown()
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
- AndroidOwner dibuat internal (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) dibuat internal (Id724a)
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 kecontent
, 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 denganruntime-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 yang setara 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 mengimplementasikanMonotonicFrameClock
. PemanggilwithFrameNanos
harus mengimpor fungsi tingkat atas secara eksplisit. (Icb642, b/166778123)
Perbaikan Bug
- Fungsi pengujian global seperti
onNode
atauwaitForIdle
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
danwithMutableSnapshot
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 keremember { mutableStateOf(...) }
menjadi lebih jelas. Ini mengurangi keseluruhan tampilan API dan jumlah konsep untuk pengelolaan status, serta mencocokkan polaby 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, gunakanAndroidView
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()
, dansavedInstanceStateOf()
telah diubah menjadistructuralEqualityPolicy()
, bukanreferentialEqualityPolicy()
.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()
dansavedInstanceStateOf()
menggunakanmutableStateOf()
dalam implementasinya sehingga menjadi konsisten denganmutableStateOf()
.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 penggunaanstate
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 classdata
, mungkin mengalami penurunan performa karena metodeequals()
-nya kini secara default dipanggil saat ditetapkan kemutableStateOf()
.Perilaku sebelumnya dapat dipulihkan dengan menambahkan parameter kebijakan
policy = referentialEqualityPolicy()
ke panggilan untukmutableStateOf()
,ambientOf()
, dansavedInstanceStateOf()
. (Ic21a7)Row
danColumn
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 propertival
pada class data, kemudian gunakanstate
sebagai ganti dariremember
, lalu tetapkan nilai status ke salinan clone aslinya menggunakan metode praktiscopy(...)
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 propertivar
dari class asli menggunakan propertivar
denganmutableStateOf
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:
- Beberapa panggilan akan melewati bagian, di mana tidak pernah dilakukan sebelumnya
- 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 versivararg
ke depannya. 5. Anotasi Pivotal tidak digunakan lagi. Gunakankey
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
danStableMutableMap
untuk menghindari masalah pada versi penulisan Kotlin diperlukan. Antarmuka ini akan diperkenalkan kembali setelah compose diupdate ke versi Kotlin yang tidak memiliki masalah.SnapshotStateList
danSnapshotStateMap
kini bersifat publik, tetapi tidak akan digunakan lagi setelahStableMutableList
danStableMutableMap
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 { ... }
atauby 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
atausetViewContent
. Compose.disposeComposition sudah tidak digunakan lagi. Sebagai gantinya, gunakan metodedispose
padaComposition
yang ditampilkan olehsetContent
. 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
menjaditrue
, 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 menjadirunOnIdle
(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 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
danrunOnUiThread
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. GunakanStateFlow<T>
atau teruskan nilai awal eksplisit. (I63f98, b/157674865)