รันไทม์คอมโพสิท
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(ดูเอกสารอ้างอิง API สำหรับแพ็กเกจคอมโพสิททั้งหมด)
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
13 พฤศจิกายน 2024 | 1.7.5 | - | - | 1.8.0-alpha06 |
โครงสร้าง
คอมโพซเป็นชุดค่าผสมของรหัสกลุ่ม Maven 7 รายการภายใน androidx
กลุ่มแต่ละกลุ่มประกอบด้วยชุดฟังก์ชันการทำงานย่อยที่กำหนดเป้าหมายไว้ โดยแต่ละกลุ่มจะมีชุดหมายเหตุการเผยแพร่ของตัวเอง
ตารางนี้อธิบายกลุ่มและลิงก์ไปยังชุดบันทึกประจำรุ่นแต่ละชุด
กลุ่ม | คำอธิบาย |
---|---|
compose.animation | สร้างภาพเคลื่อนไหวในแอปพลิเคชัน Jetpack Compose เพื่อมอบประสบการณ์การใช้งานที่ดีขึ้นให้แก่ผู้ใช้ |
compose.compiler | เปลี่ยนรูปแบบฟังก์ชัน @Composable และเปิดใช้การเพิ่มประสิทธิภาพด้วยปลั๊กอินคอมไพเลอร์ Kotlin |
compose.foundation | เขียนแอปพลิเคชัน Jetpack Compose ด้วยองค์ประกอบพื้นฐานที่พร้อมใช้งานและขยายฐานรากเพื่อสร้างชิ้นส่วนระบบออกแบบของคุณเอง |
compose.material | สร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ Material Design ที่พร้อมใช้งาน นี่เป็นจุดแรกเข้าระดับที่สูงขึ้นของ Compose ซึ่งออกแบบมาเพื่อจัดหาคอมโพเนนต์ที่ตรงกับที่อธิบายไว้ใน www.material.io |
compose.material3 | สร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ Material Design 3 ซึ่งเป็นวิวัฒนาการขั้นถัดไปของ Material Design Material 3 ประกอบด้วยธีมและคอมโพเนนต์ที่อัปเดต รวมถึงฟีเจอร์การปรับแต่งในแบบของคุณของ Material You เช่น สีแบบไดนามิก และออกแบบมาให้สอดคล้องไปกับสไตล์ภาพและ UI ของระบบ Android 12 ใหม่ |
compose.runtime | องค์ประกอบพื้นฐานของรูปแบบการเขียนโปรแกรมและการจัดการสถานะของ Compose รวมถึงรันไทม์หลักสำหรับกำหนดเป้าหมายปลั๊กอินคอมไพเลอร์ Compose |
compose.ui | องค์ประกอบพื้นฐานของ UI การเขียนที่จำเป็นต่อการโต้ตอบกับอุปกรณ์ ซึ่งรวมถึงเลย์เอาต์ ภาพวาด และอินพุต |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Compose คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
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" } }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพิงบิวด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา
การติดตามรันไทม์เวอร์ชัน 1.7
เวอร์ชัน 1.7.0-rc01
18 กันยายน 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-rc01 มีการคอมมิตเหล่านี้
การติดตามรันไทม์เวอร์ชัน 1.0
เวอร์ชัน 1.0.0-beta01
29 พฤศจิกายน 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha05
15 พฤศจิกายน 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- กำหนดข้อกำหนดที่พินไว้เป็นเวอร์ชันที่เสถียรต่ำสุดที่รองรับ (เช่น compose-runtime และ tracing-perfetto) - แก้ไขปัญหาที่ compose-runtime-tracing จะนํา compose-runtime เวอร์ชันใหม่มาไว้ในแอป
เวอร์ชัน 1.0.0-alpha04
23 สิงหาคม 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เข้ากันได้กับ Perfetto เวอร์ชันล่าสุดสำหรับการเปรียบเทียบและการติดตาม ซึ่งจะรองรับการติดตามการคอมโพสิชันเมื่อแอปเริ่มต้น (การเริ่มต้นแบบ Cold Start) เช่น ใน AndroidX Benchmark และ Android Studio (ตั้งแต่ Hedgehog เบต้า 2 เป็นต้นไป)
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
androidx.tracing.perfetto.Trace
เป็นandroidx.tracing.perfetto.PerfettoSdkTrace
แล้ว (I44af8) - ทําให้ Tracing Perfetto SDK API สอดคล้องกับ
android.os.Trace
(I73ba0, b/282199917) - ข้อกําหนดเบื้องต้นในการติดตามเมื่อเริ่มต้นแอป (Iad890)
- ผสานไฟล์ API เวอร์ชันทดลองและเวอร์ชันสาธารณะ (I0f2e1, b/278769092)
เวอร์ชัน 1.0.0-alpha02
8 กุมภาพันธ์ 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ไม่มีการเปลี่ยนแปลงฟังก์ชันการทำงาน การเพิ่มประสิทธิภาพหลายรายการในรายการที่ขึ้นต่อกันในลำดับถัดไป
androidx.tracing:tracing-perfetto*
เวอร์ชัน 1.0.0-alpha01
7 กันยายน 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
androidx.compose.runtime:runtime-tracing
เป็นไลบรารีที่ช่วยให้สามารถติดตามเพิ่มเติมในแอป Compose ได้เมื่อมีเครื่องมือที่รองรับ (เร็วๆ นี้) เวอร์ชันเริ่มต้นนี้คือ 1.0.0-alpha01
เวอร์ชัน 1.8
เวอร์ชัน 1.8.0-alpha06
13 พฤศจิกายน 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงใน
PausableComposition
API การเปลี่ยนแปลงเหล่านี้เป็นการเปลี่ยนแปลงที่ส่งผลต่อรุ่นก่อนหน้าของ 1.8.0-alpha (ตั้งแต่ 1.8.0-alpha02) แต่เนื่องจากเป็น API ใหม่ใน 1.8.0 จึงไม่มีการรองรับการทำงานร่วมกันแบบย้อนหลังเนื่องจาก API ยังอยู่ในรุ่นอัลฟ่า (I39819) - เพิ่ม API เครื่องมือเพื่อสังเกตการสร้างการประพันธ์เพลงใหม่ภายใน Recomposer (Iaeb7e)
- เพิ่ม
snapshotId
ประเภทLong
ไปยังSnapshot
และเลิกใช้งานid
รหัสของสแนปชอตเปลี่ยนจากInt
เป็นLong
เพื่อไม่ให้รหัสสแนปชอตเกินขอบเขตในระบบที่มีอัตราเฟรมสูงมากและภาพเคลื่อนไหวที่ทำงานเป็นเวลานาน ประเภทนี้สร้างขึ้นเพื่อคาดหวัง/จริงเพื่อให้ประเภทนี้เป็นInt
หรือประเภทอื่นๆ ในแพลตฟอร์มที่ไม่มีประเภทLong
เนทีฟ แพลตฟอร์มที่ไม่มีLong
ดั้งเดิม เช่น JavaScript ควรหลีกเลี่ยงอัตราเฟรมที่สูง (มากกว่า 1,000 FPS) ซึ่งจะทำให้Int
ล้นทุกๆ 24 วันโดยประมาณ (I38ac3, b/374821679)
การแก้ไขข้อบกพร่อง
providesDefault
แบบคงที่สำหรับprovides
รายการเดียว (aosp/3318540 b/374263387)- เพิ่มประสิทธิภาพ
ChangeList
(3318538)
เวอร์ชัน 1.8.0-alpha05
30 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่หน่วยความจำสำรองไม่เพียงพอเมื่อเพิ่ม
Int.MAX_VALUE
ลงในSnapshotIdSet
(b/370536104, Ic4179f6) - การเพิ่มประสิทธิภาพแบบไมโครรันไทม์ (I50c60)
- อนุญาตให้ R8 นำการเรียกใช้ runtimeCheck สำหรับการแก้ไขข้อบกพร่องออก (I8c44)
- ทําให้
compoundKeyOf
เป็นแบบซ้ำแทนแบบเรียกซ้ำ (I5817f)
การมีส่วนร่วมจากภายนอก
- ใช้กองกับรายการคอลเล็กชัน (I7d47c)
เวอร์ชัน 1.8.0-alpha04
16 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha04 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- ระบุรหัสสแนปชอตสำหรับระเบียนสถานะในคอนสตรัคเตอร์ (85c00f)
- ปรับโครงสร้าง
SnapshotState***
เพื่อหลีกเลี่ยงข้อผิดพลาดในการยืนยันชั้นเรียน (6ee4a6) - แก้ไขกฎ R8 เพื่อป้องกันการจัดวางบรรทัดคำสั่ง Throw (5beb92)
- เพิ่มประสิทธิภาพการดำเนินการแบบละเอียด (d73c5c)
- เพิ่มประสิทธิภาพการจัดสรร
SynchronizedObject
ใน JVM (2b043f)
เวอร์ชัน 1.8.0-alpha03
2 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha03 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- สร้างบริบทย่อยสําหรับ
rememberCoroutineScope
(f61464) แบบล่าช้า- โดยทั่วไป
rememberCoroutineScope
จะใช้เพื่อเปิดใช้ coroutine เพื่อตอบสนองต่อเหตุการณ์ที่เกิดขึ้นหลังการคอมโพสิชัน ในบางสถานการณ์ เหตุการณ์เหล่านี้อาจไม่เกิดขึ้นเลย ซึ่งจะทำให้เกิดค่าใช้จ่ายเพิ่มเติมในการสร้างและการยกเลิกงานโดยไม่มีสิทธิประโยชน์ใดๆ - ทําให้ขอบเขตที่
rememberCoroutineScope
แสดงผลสร้างcoroutineContext
แบบล่าช้าเมื่อเข้าถึง ซึ่งจะหลีกเลี่ยงการสร้างและการยกเลิกงานโดยสิ้นเชิงหากไม่มีการใช้ขอบเขต
- โดยทั่วไป
เวอร์ชัน 1.8.0-alpha02
18 กันยายน 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
PausableComposition
ซึ่งช่วยให้สร้างการคอมโพสิตย่อยที่หยุดชั่วคราวระหว่างการคอมโพสิตได้ และนำไปใช้กับองค์ประกอบแบบไม่พร้อมกัน จำเป็นต้องมีการรองรับคอมไพเลอร์สำหรับการหยุดชั่วคราว ซึ่งอยู่ระหว่างการพัฒนา (I3394b)
เวอร์ชัน 1.8.0-alpha01
4 กันยายน 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7
เวอร์ชัน 1.7.5
30 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.7.5
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.5 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.4
16 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.7.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.4 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.3
2 ตุลาคม 2024
androidx.compose.runtime:runtime-*:1.7.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.3 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.2
18 กันยายน 2024
androidx.compose.runtime:runtime-*:1.7.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.2 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.1
10 กันยายน 2024
- ไม่มีการเปลี่ยนแปลงอาร์ติแฟกต์ Android นําอาร์ติแฟกต์
-desktop
รายการออกและเพิ่มอาร์ติแฟกต์-jvmStubs
และ-linuxx64Stubs
รายการ เป้าหมายเหล่านี้ไม่ได้มีไว้เพื่อใช้งาน แต่เป็นตัวยึดตําแหน่งเพื่อช่วยในการใช้งาน Jetbrains Compose
เวอร์ชัน 1.7.0
4 กันยายน 2024
androidx.compose.runtime:runtime-*:1.7.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.6.0
- เพิ่มความสามารถในการระบุองค์ประกอบในเครื่องที่คำนวณตามค่าขององค์ประกอบในเครื่องอื่นๆ โดยค่าเริ่มต้น โดยใช้
compositionLocalWithComputedDefault()
หรือโดยการระบุ Lambda เพื่อใช้คำนวณค่าโดยใช้providesComputed
แทนprovides
- คุณดูค่าของคอมโพสิชันภายในได้โดยใช้พร็อพเพอร์ตี้
currentValue
ของคอมโพสิชันภายในที่เข้าถึงได้จากภายใน lambda ที่คำนวณค่า ใช้แทนcurrent
ซึ่งเข้าถึงได้ในฟังก์ชัน@Composable
เท่านั้น (Iadbc0) - ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลางด้วยสถานะเริ่มต้น คุณจะไม่เห็นการแก้ไขใดๆ ในภายหลังจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
- สถานะเริ่มต้นของ
mutableStateOf()
รวมถึงเวอร์ชันพื้นฐานของmutableStateOf()
คือค่าที่ส่งเป็นพารามิเตอร์ไปยังmutableStateOf()
สถานะเริ่มต้นของmutableStateListOf()
และmutableStateMapOf()
ว่างเปล่า - เพิ่ม
Snapshot.isInSnapshot
และSnapshot.PreexistingSnapshotId
ที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้เข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้าง - ออบเจ็กต์สถานะที่กําหนดเองสามารถเข้าถึงได้ทันทีโดยทําตามรูปแบบการเปลี่ยนแปลงที่เกิดขึ้นกับออบเจ็กต์สแนปชอตในตัว (I84a17)
- เปิดใช้
nonSkippingGroupOptimization
สำหรับคลังการเขียน ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันคอมโพสิเบิลที่ไม่สามารถรีสตาร์ทได้ทั้งหมดใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08) - ทำให้ Lambda แบบคอมโพสิเบิลในคอมโพสิชันย่อยในเฟรมเดียวกันเป็นโมฆะ (98301c)
- โทรกลับ
onRelease
ตามลําดับเดียวกับonForgotten
(2cd790) - เปิดใช้โหมดข้ามที่มีประสิทธิภาพ (ed1766)
- ทําให้
currentCompoundHashKey
ไม่เหมือนใครในหลายๆ กรณี (d4a872)
เวอร์ชัน 1.7.0-rc01
21 สิงหาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta07
7 สิงหาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta07 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta06
24 กรกฎาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta06 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta05
10 กรกฎาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta05 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta04
26 มิถุนายน 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta04 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta03
12 มิถุนายน 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta02
29 พฤษภาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-beta01
14 พฤษภาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-alpha08
1 พฤษภาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha08 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-alpha07
17 เมษายน 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha07 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มความสามารถในการระบุองค์ประกอบในเครื่องที่คำนวณตามค่าขององค์ประกอบในเครื่องอื่นๆ โดยค่าเริ่มต้น โดยใช้
compositionLocalWithComputedDefault()
หรือโดยการระบุ Lambda เพื่อใช้คำนวณค่าโดยใช้providesComputed
แทนprovides
- คุณดูค่าของคอมโพสิชันภายในได้โดยใช้พร็อพเพอร์ตี้
currentValue
ของคอมโพสิชันภายในที่เข้าถึงได้จากภายใน lambda ที่คำนวณค่า ใช้แทนcurrent
ซึ่งเข้าถึงได้ในฟังก์ชัน@Composable
เท่านั้น (Iadbc0)
การเปลี่ยนแปลง API
- ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลางด้วยสถานะเริ่มต้น คุณจะไม่เห็นการแก้ไขใดๆ ในภายหลังจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
- สถานะเริ่มต้นของ
mutableStateOf()
รวมถึงเวอร์ชันพื้นฐานของmutableStateOf()
คือค่าที่ส่งเป็นพารามิเตอร์ไปยังmutableStateOf()
สถานะเริ่มต้นของmutableStateListOf()
และmutableStateMapOf()
ว่างเปล่า - เพิ่ม
Snapshot.isInSnapshot
และSnapshot.PreexistingSnapshotId
ที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้เข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้าง - ออบเจ็กต์สถานะที่กําหนดเองสามารถเข้าถึงได้ทันทีโดยทําตามรูปแบบการเปลี่ยนแปลงที่เกิดขึ้นกับออบเจ็กต์สแนปชอตในตัว (I84a17)
การแก้ไขข้อบกพร่อง
- แก้ไขการผสาน
readObserver
ในสแนปชอตที่ฝัง ซึ่งทําให้สถานะที่มาจากภายในซ้อนกันถูกทำให้เป็นโมฆะไม่เพียงพอเมื่อใช้ในsnapshotFlow
(Idf138)
เวอร์ชัน 1.7.0-alpha06
3 เมษายน 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha06 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการจัดการค่าเดี่ยว
providesDefault
(538f45) - หลีกเลี่ยงการล็อกตายใน Recomposer ที่เข้าถึงนาฬิกาเฟรม (07e5c6)
เวอร์ชัน 1.7.0-alpha05
20 มีนาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ล้างการเปลี่ยนแปลงล่าสุดในผลงานที่ปิดใช้งาน (5950bc)
เวอร์ชัน 1.7.0-alpha04
6 มีนาคม 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha04 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- เรียก
Snapshot.current
1 ครั้งต่อการประเมินสถานะที่ได้จากข้อมูล (ee7daf) - อ่าน
currentRecord
1 ครั้งต่อการตรวจสอบในองค์ประกอบ (b882b2) - นำการจัดสรรตัวนับโดยไม่ตั้งใจใน
snapshotFlow
(231e56) ออก - เปิดใช้
nonSkippingGroupOptimization
สำหรับคลังการเขียน ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันคอมโพสิเบิลที่ไม่สามารถรีสตาร์ทได้ทั้งหมดใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08)
เวอร์ชัน 1.7.0-alpha03
21 กุมภาพันธ์ 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปิดตัวกลุ่ม "แทนที่" เพื่อปรับปรุงการตรวจหาการเปลี่ยนแปลง (0941b5)
การปรับปรุงประสิทธิภาพ
- ปรับปรุงการจัดสรรหน่วยความจำเมื่อตรวจพบการเปลี่ยนแปลง (53e7fd)
- แก้ไขหน่วยความจำรั่วไหลในคอมโพเซอร์ (0e097d)
- ใช้
ScopeMap
เพื่อส่งการลบล้างเมื่อจัดเรียงใหม่ (e19a7e) - เพิ่มประสิทธิภาพแผนที่การระบุว่าไม่ถูกต้องเพื่อเก็บเฉพาะสถานะที่มาจากแหล่งที่มา (f11c44)
- แทนที่การใช้
IdentityArraySet
ด้วยScatterSet
(db572e) - เพิ่มประสิทธิภาพ
removeScope
ในScopeMap
(bb0530)
เวอร์ชัน 1.7.0-alpha02
7 กุมภาพันธ์ 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ทำให้ Lambda แบบคอมโพสิเบิลในคอมโพสิชันย่อยในเฟรมเดียวกันเป็นโมฆะ (98301c)
- โทรกลับ
onRelease
ตามลําดับเดียวกับonForgotten
(2cd790) - กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน
snapshotFlow
(796b80)
การปรับปรุงประสิทธิภาพ
- แก้ไขเครื่องมือสังเกตการณ์ภาพนิ่งในตำแหน่งเดิมเมื่อภาพนิ่งนั้นโปร่งใสอยู่แล้ว (f60f30)
- เพิ่มประสิทธิภาพ
SnapshotIdSet.lowest()
(7ae149) - ใช้
fold()
ที่ไม่มีการจัดสรรในSnapshotIdSet
(532b7d) - นําการจัดสรรตัวนับออก (83f96b)
เวอร์ชัน 1.7.0-alpha01
24 มกราคม 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha01 มีการคอมมิตเหล่านี้
การเพิ่มประสิทธิภาพ
- เพิ่มความสามารถในการสร้างช่องหลังจากที่เพิ่มกลุ่มย่อยแล้ว (b5960c)
- เพิ่มประสิทธิภาพการบันทึกการแก้ไขสถานะสแนปชอต (28c3fe)
- เปิดใช้โหมดข้ามที่มีประสิทธิภาพ (ed1766)
การแก้ไขข้อบกพร่อง
- พิจารณาเมตาพารามิเตอร์เริ่มต้นในการจดจําโดยปริยาย (096665)
- ทําให้
currentCompoundHashKey
ไม่เหมือนใครในหลายๆ กรณี (d4a872) - แสดงกลุ่มเมื่อออกจากการเรียกใช้ฟังก์ชันในบรรทัด (2a90fc)
เวอร์ชัน 1.6
เวอร์ชัน 1.6.8
12 มิถุนายน 2024
androidx.compose.runtime:runtime-*:1.6.8
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.8 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.7
1 พฤษภาคม 2024
androidx.compose.runtime:runtime-*:1.6.7
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.7 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.6
17 เมษายน 2024
androidx.compose.runtime:runtime-*:1.6.6
ได้รับการปล่อยแล้ว ไม่มีการเปลี่ยนแปลงนับตั้งแต่รุ่นล่าสุด
เวอร์ชัน 1.6.5
3 เมษายน 2024
androidx.compose.runtime:runtime-*:1.6.5
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.5 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.4
20 มีนาคม 2024
androidx.compose.runtime:runtime-*:1.6.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.4 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.3
6 มีนาคม 2024
androidx.compose.runtime:runtime-*:1.6.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.3 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.2
21 กุมภาพันธ์ 2024
androidx.compose.runtime:runtime-*:1.6.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้
เวอร์ชัน 1.6.1
7 กุมภาพันธ์ 2024
androidx.compose.runtime:runtime-*:1.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- โทรกลับ
onRelease
ตามลําดับเดียวกับonForgotten
(2cd790) - กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน
snapshotFlow
(796b80)
เวอร์ชัน 1.6.0
24 มกราคม 2024
androidx.compose.runtime:runtime-*:1.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.5.0
ฟีเจอร์ใหม่
- โยนข้อยกเว้นที่กลืนไประหว่างลูปการจัดองค์ประกอบใหม่อีกครั้ง (4dff9a)
การเพิ่มประสิทธิภาพ
- เพิ่มประสิทธิภาพการบันทึกการแก้ไขสถานะสแนปชอต (28c3fe)
- เพิ่มประสิทธิภาพ
rememberSaveable
(f01d79) - เลื่อนการอ่านสถานะที่มาจากแหล่งข้อมูลอีกครั้งจนกว่าจะมีการบันทึกการเปลี่ยนแปลง (f38099)
- ปรับปรุงการระบุค่าในภาษาท้องถิ่นขององค์ประกอบ (a337ea)
การแก้ไขข้อบกพร่อง
- แก้ไขการสูญเสียหน่วยความจำของตารางสล็อต (73fcfe)
- ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- ทริกเกอร์วงจร
RememberObserver
เฉพาะเมื่อจัดเก็บไว้ในการคํานวณการจดจําเท่านั้น (f6b4dc) - จำกัดการจับ
$dirty
ไว้สำหรับ Lambda ในบรรทัด (acfca0) - แก้ไขเนื้อหาที่ย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบในภาษาที่ไม่ถูกต้อง (035cd6)
เวอร์ชัน 1.6.0-rc01
10 มกราคม 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-beta03
13 ธันวาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-beta03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-beta02
29 พฤศจิกายน 2023
androidx.compose.runtime:runtime-*:1.6.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-beta02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-beta01
15 พฤศจิกายน 2023
androidx.compose.runtime:runtime-*:1.6.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เผยแพร่ค่าความเสถียรบางอย่างในการกำกับเนื้อหา (274a4c)
การแก้ไขข้อบกพร่อง
- ใช้นโยบายอ้างอิงสำหรับสถานะขอบเขตภายในขององค์ประกอบในบริบท (83361c)
- จำกัดการบันทึก $dirty ไว้สำหรับ Lambda ในบรรทัด (acfca0)
- แก้ไขเนื้อหาที่ย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบในภาษาที่ไม่ถูกต้อง (035cd6)
- ใช้แฮชแมปที่ไม่จัดสรรที่เร็วขึ้นใน
RecomposeScopeImpl
(d79494) - ใช้
ObjectIntMap
ในDerivedState
(21862e) - ใช้
IntRef
สำหรับ intSnapshotThreadLocal
ในDerivedState
(04eaf4)
เวอร์ชัน 1.6.0-alpha08
18 ตุลาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha08 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ทริกเกอร์วงจร
RememberObserver
เฉพาะเมื่อจัดเก็บไว้ในการคํานวณการจดจําเท่านั้น (f6b4dc) - ปรับปรุงการจัดสรรในการเรียงลำดับรายการการลบล้าง (954d63)
- ใช้แผนที่ใหม่ที่ไม่จัดสรรใน
SnapshotStateObserver
(4303ce) - ล้างการลบล้างเมื่อปิดใช้งานการเรียบเรียง (e001be)
เวอร์ชัน 1.6.0-alpha07
4 ตุลาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SnapshotStateList
มีสถานะเป็นRandomAccess
เพื่อให้ใช้ตัวช่วยรายการเวอร์ชันการจัดทําดัชนีโดยตรงได้ (I5210c, b/219554654)
เวอร์ชัน 1.6.0-alpha06
20 กันยายน 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha06 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-alpha05
6 กันยายน 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha05 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-alpha04
23 สิงหาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- โยนข้อยกเว้นที่กลืนไประหว่างลูปการจัดองค์ประกอบใหม่อีกครั้ง (4dff9a)
การเปลี่ยนแปลง API
- เพิ่มวิธีการปิดใช้งาน
ReusableComposition
ซึ่งจะนำการสังเกตการณ์ออก แต่จะเก็บโหนดไว้ คุณสามารถเปิดใช้งานการประพันธ์เพลงที่ปิดใช้งานแล้วอีกครั้งได้โดยโทรหาsetContent
(Ib7f31) - เพิ่มอินเทอร์เฟซ
ReusableComposition
สำหรับการจัดการวงจรและการใช้คอมโพสิชันย่อยซ้ำ (I812d1, b/252846775)
เวอร์ชัน 1.6.0-alpha03
9 สิงหาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการเพิ่มประสิทธิภาพ
CompositionLocalProvider
ใหม่ (3118e88) - แก้ไขวิธีแยกชิ้นส่วนโหนดเนื้อหาที่เคลื่อนย้ายได้ (5e3d59b)
เวอร์ชัน 1.6.0-alpha02
26 กรกฎาคม 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่และการเพิ่มประสิทธิภาพ
- เพิ่มประสิทธิภาพ
rememberSaveable
(f01d79) - เลื่อนการอ่านสถานะที่มาจากแหล่งข้อมูลอีกครั้งจนกว่าจะมีการบันทึกการเปลี่ยนแปลง (f38099)
- ปรับปรุงการระบุค่าในภาษาท้องถิ่นขององค์ประกอบ (a337ea)
SideEffect
มีการทำเครื่องหมายเป็น@ExplicitGroupsComposable
เพื่อหลีกเลี่ยงการสร้างกลุ่ม (I74815)- หลีกเลี่ยงการเปรียบเทียบแผนที่องค์ประกอบในท้องถิ่นเมื่อนำกลับมาใช้ใหม่ (782071)
การเปลี่ยนแปลง API
- เพิ่มการโอเวอร์โหลดกรณีพิเศษสำหรับ
CompositionLocalProviders
ซึ่งหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติมที่ใช้เพื่อให้ระบุค่าหลายค่าได้เร็วขึ้น แต่จะเป็นค่าใช้จ่ายเพิ่มเติมเมื่อระบุค่าเดียว (I6d640, b/288169379)
การแก้ไขข้อบกพร่อง
- แก้ไขการสูญเสียหน่วยความจำของตารางสล็อต (73fcfe)
- แก้ไขวิธีที่เรากู้คืน
rememberSaveable
เมื่อstateSaver
แสดงผลเป็น Null (90748c)
เวอร์ชัน 1.6.0-alpha01
21 มิถุนายน 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- ลดการจัดสรรเมื่อใช้สแนปชอต (I65c09)
- หลีกเลี่ยงการคำนวณ
readableHash
ในDerivedState
หากไม่ได้แก้ไขภาพรวม (68c565)
รุ่น 1.5
เวอร์ชัน 1.5.4
18 ตุลาคม 2023
androidx.compose.runtime:runtime-*:1.5.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้
เวอร์ชัน 1.5.3
4 ตุลาคม 2023
androidx.compose.runtime:runtime-*:1.5.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้
รุ่น 1.5.2
27 กันยายน 2023
androidx.compose.runtime:runtime-*:1.5.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.2 มีคอมมิตเหล่านี้
รุ่น 1.5.1
6 กันยายน 2023
androidx.compose.runtime:runtime-*:1.5.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้
เวอร์ชัน 1.5.0
9 สิงหาคม 2023
androidx.compose.runtime:runtime-*:1.5.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำการจัดสรรในการเปลี่ยนการจัดองค์ประกอบใหม่ ภาพเคลื่อนไหวสี และ
AndroidComposeView
ออกแล้ว (Ib2bfa) - เพิ่มคำอธิบายประกอบ
@StateFactoryMarker
เพื่อทําเครื่องหมายฟังก์ชันที่สร้างสถานะและต้องรวมไว้ในการเรียกremember
(I64550) - เพิ่มสถานะและ
MutableState
เวอร์ชันพื้นฐาน (fb3d89) - เพิ่ม
Snapshot.isApplyObserverNotificationPending
(I672a5) - เพิ่ม
State
API เวอร์ชันพื้นฐาน ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์State
ได้โดยไม่เสียค่าปรับสำหรับการแปลงค่าอัตโนมัติ ใช้เมธอดใหม่ของ Factory อย่างmutableIntState(Int)
,mutableFloatStateOf(Float)
เป็นต้น เพื่อใช้สิ่งเหล่านี้ (I48e43)
การแก้ไขข้อบกพร่อง
- ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน
ComposerImpl
(0206f7) - อย่าใช้การคอมโพสิชัน 2 ครั้ง (f5791b)
- ตรวจสอบการทำให้ค่าสถานะแบบอนุพันธ์ที่ยังไม่ได้เริ่มต้นใช้งานเป็นโมฆะ (aa2a92)
- โทรหา
onEndChanges
ระหว่างการทิ้งองค์ประกอบ (62cc8c) - แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
- แก้ไขการล็อกตายที่อาจเกิดขึ้น (c1a425 และ 8edce0)
- ตอนนี้ เครื่องมือจัดเรียงใหม่ที่สร้างสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียก
withFrameNanos
แทนการจัดเรียงทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดไว้จะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกใช้withFrameNanos
รายอื่นจะบล็อก (Id9e7f, b/240975572) - เรียกใช้การเรียกกลับเพื่อปิดใช้งานสำหรับ
LayoutNode
ก่อนทิ้งผลลัพธ์ 3784073 - แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
- แก้ไขการถดถอยของการแก้ไขแบบเรียลไทม์สําหรับ Composable ที่มีโหนด 73fd4d8
- ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพสิชัน ae276f1
- ทำให้ขอบเขต
SnapshotStateObserver
สำหรับสถานะแบบอนุมานที่ไม่มีการเปลี่ยนแปลงเป็นโมฆะ 84d9b1c - แก้ไขข้อขัดข้องที่เกิดขึ้นได้เมื่อกำจัดองค์ประกอบ 28761fc
- แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156
- แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
- เรียกใช้การเรียกกลับเพื่อปิดใช้งานสําหรับ
LayoutNode
ก่อนทิ้งผล (8b0fa4) - แก้ไข
endToMarker()
เมื่อสิ้นสุดกลุ่มโหนด (d71d980) - ใช้กลุ่ม
SlotWriter
ปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b) - นำ
fill
ในSlotTable.moveSlotGapTo()
ออกแล้วย้ายไปปิด (81f9935) - แก้ไขการลบล้างที่ขาดหายไปขณะที่เนื้อหาที่ย้ายได้กำลังย้าย (1d7c024)
- แก้ไขการทำให้เนื้อหาที่ย้ายได้เสียความถูกต้องทันที (8676618)
การปรับปรุงประสิทธิภาพ
- หลีกเลี่ยงการคํานวณ
readableHash
ในDerivedState
หากไม่ได้แก้ไขภาพรวม (307102) - การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808 )
- การยกเลิกการเขียน
CoroutineScopes
อย่างรวดเร็ว (a55362 และ bd382f) - เขียนทับระเบียนของออบเจ็กต์สถานะด้วยระเบียนสถานะที่เข้าถึงไม่ได้ (c986960)
- ใช้คอมโพเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
- ใช้
IdentityArraySet
เพื่อจัดเก็บการระบุว่าสแนปชอตไม่ถูกต้อง (7f60cca) - ลดการจัดสรรสําหรับการสังเกตการณ์ภาพรวม (5bc535f)
เวอร์ชัน 1.5.0-rc01
26 กรกฎาคม 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
เลื่อนการอ่านสถานะที่มาจากแหล่งข้อมูลอีกครั้งจนกว่าจะมีการบันทึกการเปลี่ยนแปลง (f38099)
การตรวจสอบที่ไม่บังคับเพื่อแนะนําให้ย้ายข้อมูลการเรียก
mutableStateOf()
ไปยังประเภทเฉพาะสําหรับองค์ประกอบพื้นฐานที่เกี่ยวข้องพร้อมใช้งาน รหัส Lint ของโปรเจ็กต์คือAutoboxingStateCreation
ก่อนหน้านี้ การตรวจสอบนี้จะเปิดใช้โดยค่าเริ่มต้นสำหรับทุกโปรเจ็กต์ หากต้องการดูคำเตือนนี้ในเครื่องมือแก้ไขของ Android Studio และเอาต์พุตของ Lint ของโปรเจ็กต์ ให้เปลี่ยนระดับความรุนแรงจากข้อมูลเป็นคำเตือน (หรือสูงกว่า) ด้วยการประกาศwarning "AutoboxingStateCreation"
ภายในการกำหนดค่า build.gradle หรือ build.gradle.kts ของโมดูลดังที่แสดง (I34f7e)android { lint { warning "AutoboxingStateCreation" } ... }
เวอร์ชัน 1.5.0-beta03
28 มิถุนายน 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-beta03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
เวอร์ชัน 1.5.0-beta02
7 มิถุนายน 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-beta02 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- หลีกเลี่ยงการคํานวณ
readableHash
ในDerivedState
หากไม่ได้แก้ไขภาพรวม (307102)
เวอร์ชัน 1.5.0-beta01
24 พฤษภาคม 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำการจัดสรรในการเปลี่ยนการจัดองค์ประกอบใหม่ ภาพเคลื่อนไหวสี และ
AndroidComposeView
(Ib2bfa) ออก - เพิ่มคำอธิบายประกอบ
@StateFactoryMarker
เพื่อทําเครื่องหมายฟังก์ชันที่สร้างสถานะและต้องรวมไว้ในการเรียกremember
(I64550) - เพิ่มสถานะและ
MutableState
เวอร์ชันพื้นฐาน (fb3d89) - เพิ่ม
Snapshot.isApplyObserverNotificationPending
(I672a5)
การแก้ไขข้อบกพร่อง
- การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808 )
- อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน
ComposerImpl
(0206f7) - การยกเลิกการเขียน
CoroutineScopes
อย่างรวดเร็ว (a55362 และ bd382f) - อย่าใช้การคอมโพสิชัน 2 ครั้ง (f5791b)
- ตรวจสอบการทำให้ค่าสถานะแบบอนุพันธ์ที่ยังไม่ได้เริ่มต้นใช้งานเป็นโมฆะ (aa2a92)
- โทรหา
onEndChanges
ระหว่างการทิ้งองค์ประกอบ (62cc8c) - แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
- แก้ไขการล็อกตายที่อาจเกิดขึ้น (c1a425
- ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพส (f4a2d1)
- แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
- เรียกใช้การเรียกกลับเพื่อปิดใช้งานสําหรับ
LayoutNode
ก่อนทิ้งผล (8b0fa4)
การมีส่วนร่วมจากภายนอก
- เพิ่ม
Snapshot.isApplyObserverNotificationPending
(I672a5)
เวอร์ชัน 1.5.0-alpha04
10 พฤษภาคม 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
State
API เวอร์ชันพื้นฐาน ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์State
ได้โดยไม่เสียค่าปรับสำหรับการแปลงค่าอัตโนมัติ ใช้เมธอดใหม่ของ Factory อย่างmutableIntState(Int)
,mutableFloatStateOf(Float)
เป็นต้น เพื่อใช้สิ่งเหล่านี้ (I48e43)
การแก้ไขข้อบกพร่อง
โทรหา
onEndChanges
ระหว่างการทิ้งองค์ประกอบ โหนดโฟกัสที่ถูกนําออกระหว่างComposition.dispose
สมัครใช้บริการonEndChanges
เพื่อรีเซ็ตโฟกัส (03d4a47)ตรวจสอบว่าค่าสถานะแบบอนุพันธ์ที่ยังไม่ได้เริ่มต้นใช้งานนั้นใช้งานไม่ได้ สถานะแบบอนุมานแต่ละรายการจะเชื่อมโยงกับรายการของทรัพยากรที่เกี่ยวข้องใน
SnapshotStateObserver
ซึ่งใช้เพื่อทำให้ขอบเขตที่เชื่อมโยงกับสถานะแบบอนุมานเป็นโมฆะทุกครั้งที่มีการเปลี่ยนแปลงทรัพยากร ระบบจะบันทึกการเปลี่ยนแปลงของทรัพยากรตามในภาพรวมขั้นสูง ซึ่งอาจเกิดขึ้นหลังจากการอ่านสถานะที่มาจากแหล่งข้อมูล (เนื่องจากการเรียกใช้Snapshot.notifyObjectsInitialized()
)ตรรกะการสังเกตสถานะแบบอนุมานก่อนหน้านี้ใน
SnapshotStateObserver
คือการล้างข้อมูลการอ้างอิงเก่า แล้วอ่านค่าใหม่ ส่งผลให้เกิดเงื่อนไขการแข่งขันที่มีการทำให้ข้อมูลไม่ถูกต้องเกิดขึ้นในสถานะที่ล้างข้อมูลแล้ว ซึ่งไม่มีการบันทึกการทำให้ข้อมูลของทรัพยากร Dependency ไม่ถูกต้องการเปลี่ยนแปลงนี้จะจัดลําดับการอ่านสถานะที่มาจากแหล่งข้อมูลและการล้างข้อมูลพึ่งพาใหม่ เพื่อให้การลบล้างเกิดขึ้นในสถานะที่ถูกต้องเสมอ (c472be6)
เวอร์ชัน 1.5.0-alpha03
19 เมษายน 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-alpha03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ เครื่องมือจัดเรียงใหม่ที่สร้างสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียก
withFrameNanos
แทนการจัดเรียงทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดไว้จะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกใช้withFrameNanos
รายอื่นจะบล็อก (Id9e7f, b/240975572)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่เกิดขึ้นได้กับรายการสแนปชอตและแผนที่ 5c1a425
- เรียกใช้การเรียกกลับเพื่อปิดใช้งานสำหรับ
LayoutNode
ก่อนทิ้งผลลัพธ์ 3784073 - แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
- แก้ไขการถดถอยของการแก้ไขแบบเรียลไทม์สําหรับ Composable ที่มีโหนด 73fd4d8
- ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพสิชัน ae276f1
- ทำให้ขอบเขต
SnapshotStateObserver
สำหรับสถานะแบบอนุมานที่ไม่มีการเปลี่ยนแปลงเป็นโมฆะ 84d9b1c - แก้ไขข้อขัดข้องที่เกิดขึ้นได้เมื่อกำจัดองค์ประกอบ 28761fc
- แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156
เวอร์ชัน 1.5.0-alpha02
5 เมษายน 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้โอเปอเรเตอร์
getValue
ของ Kotlin คอมโพสิเบิลได้แล้ว (f174f6e)
การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ
- เขียนทับระเบียนของออบเจ็กต์สถานะด้วยระเบียนสถานะที่เข้าถึงไม่ได้ (c986960)
- ใช้คอมโพเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
- แก้ไข
endToMarker()
เมื่อสิ้นสุดกลุ่มโหนด (d71d980) - ใช้กลุ่ม
SlotWriter
ปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b) - ใช้
IdentityArraySet
เพื่อจัดเก็บการระบุว่าสแนปชอตไม่ถูกต้อง (7f60cca) - นำ
fill
ในSlotTable.moveSlotGapTo()
ออกแล้วย้ายไปปิด (81f9935) - แก้ไขการลบล้างที่ขาดหายไปขณะที่เนื้อหาที่ย้ายได้กำลังย้าย (1d7c024)
- แก้ไขการทำให้เนื้อหาที่ย้ายได้เสียความถูกต้องทันที (8676618)
- ลดการจัดสรรสําหรับการสังเกตการณ์ภาพรวม (5bc535f)
เวอร์ชัน 1.5.0-alpha01
22 มีนาคม 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.5.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
Modifier.Node#coroutineScope
เพื่ออนุญาตให้Modifier.Nodes
เปิดใช้งาน coroutine (I76ef9) - อนุญาตให้
Modifier.Nodes
อ่านCompositionLocals
โดยใช้อินเทอร์เฟซCompositionLocalConsumerModifierNode
(Ib44df)
เวอร์ชัน 1.4
เวอร์ชัน 1.4.3
3 พฤษภาคม 2023
androidx.compose.runtime:runtime-*:1.4.3
เผยแพร่โดยไม่มีการเปลี่ยนแปลง
เวอร์ชัน 1.4.2
19 เมษายน 2023
androidx.compose.runtime:runtime-*:1.4.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.2 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
แก้ไขข้อขัดข้องที่เกิดขึ้นได้กับรายการสแนปชอตและแผนที่ 2eb6570
การเพิ่มเนื้อหาลงใน
SnapshotStateList
หรือSnapshotStateMap
อาจเกิดปัญหาการล็อกตายได้หากการแก้ไขเกิดขึ้นพร้อมกันกับการเขียนโดยตรงไปยังระเบียนสถานะ ปัญหานี้เกิดขึ้นบ่อยขึ้นมากเมื่อมีการเปิดตัวการเปลี่ยนแปลงใน 93fcae828b ที่ใช้การเขียนโดยตรงเพื่อปล่อยระเบียนที่ไม่ได้ใช้ตอนนี้ระบบจะจัดเรียงการล็อกในลักษณะที่จะไม่พยายามล็อกภาพรวมเมื่อมีการล็อกแผนที่หรือรายการ
เวอร์ชัน 1.4.1
5 เมษายน 2023
androidx.compose.runtime:runtime-*:1.4.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
endToMarker()
เมื่อสิ้นสุดกลุ่มโหนด d71d980
เวอร์ชัน 1.4.0
22 มีนาคม 2023
androidx.compose.runtime:runtime-*:1.4.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.3.0
- ใช้ค่าเริ่มต้นจาก
LiveData
สำหรับองค์ประกอบแรก 3680e25 - เพิ่ม
ComposeNodeLifecycleCallback
เพื่อดูวงจรชีวิตของโหนดคอมโพสิท 8b6a258 - เพิ่มพร็อพเพอร์ตี้
parameterTypes
ไปยังComposableMethod
7b6c7ad
การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ
- ล้างดัชนีขอบเขตทั้ง 2 รายการใน
SnapshotStateObserver
29f4a3e - เพิ่มกลุ่มที่จําเป็นในส่วนเนื้อหาของ Lambda แบบข้ามไม่ได้ 7d06752
- ปรับปรุงลักษณะการอ้างอิงหน่วยความจําของสถานะสแนปชอต 93fcae8
- นำการบรรจุกล่องในการค้นหาองค์ประกอบในเครื่องออก 0875717
- ใช้คีย์ที่ถูกต้องสำหรับกลุ่มโหนดที่ใช้ซ้ำไม่ได้ 6388d8d
- ปกป้อง
SnapshotStateObserver
จากการเรียกใช้แบบซ้ำและพร้อมกัน 98cb6ba - เพิ่มการตรวจสอบ check-index-bounds ในเมธอด
IdentityArraySet
"get" 35a77d3 - อัปเดตโมดูลการเขียนเพื่อใช้ส่วนขยาย
ViewTreeLifecycleOwner
21c2122 - ส่งการแจ้งเตือนการสมัครหลังจาก Recomposer ตัดเฟรมเสร็จแล้ว 98f2641
- แก้ไขข้อขัดข้องเกี่ยวกับดัชนีที่อยู่นอกขอบเขตเมื่อยกเลิกการคอมไพล์ใหม่ 8f8656f
- บังคับให้จัดองค์ประกอบใหม่เสมอหากผู้ให้บริการหลักขององค์ประกอบมีการเปลี่ยนแปลง 9526fcc
- ความคลาดเคลื่อนของการจัดเรียงใหม่สำหรับงานที่ยกเลิก a55f7ed
- ปรับปรุงการจัดการการทำให้ข้อมูลไม่ถูกต้องสำหรับนักแต่งเพลงจำนวนมาก 9b7ed67
- แก้ไขการสร้างกลุ่มปิดสำหรับผลตอบแทนที่ไม่ใช่ในร้าน b6f590c
เวอร์ชัน 1.4.0-rc01
8 มีนาคม 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
เวอร์ชัน 1.4.0-beta02
22 กุมภาพันธ์ 2023
androidx.compose.runtime:runtime:1.4.0-beta02
และ androidx.compose.runtime:runtime-saveable:1.4.0-beta02
เผยแพร่แล้ว เวอร์ชัน 1.4.0-beta02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.4.0-beta01
8 กุมภาพันธ์ 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
ComposeNodeLifecycleCallback
ซึ่งช่วยให้สังเกตวงจรชีวิตของโหนดคอมโพสิทได้ (I3731b) - เพิ่ม
@TestOnly
ลงในComposer.disableSourceInformation()
เนื่องจากฟังก์ชันนี้ปลอดภัยที่จะเรียกใช้ในการทดสอบเท่านั้น (I896c8)
การแก้ไขข้อบกพร่อง
- นำการบรรจุกล่องในการค้นหาองค์ประกอบในเครื่องออก (62f66a)
- ปรับปรุงลักษณะการอ้างอิงหน่วยความจําของสถานะสแนปชอต (dfb451)
เวอร์ชัน 1.4.0-alpha05
25 มกราคม 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
และ androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
เผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ประเภท/Nullability เพิ่มเติมของฟังก์ชันแบบอินไลน์/ฟังก์ชันที่เลิกใช้งานแล้ว (I24f91)
เวอร์ชัน 1.4.0-alpha04
11 มกราคม 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
TestMonotonicFrameClock
ใช้คำอธิบายประกอบการทดสอบที่ถูกต้องแล้ว (I95c9e)
การแก้ไขข้อบกพร่อง
- ปกป้อง
SnapshotStateObserver
จากการเรียกใช้แบบซ้ำและแบบพร้อมกัน (d902fb)
เวอร์ชัน 1.4.0-alpha03
7 ธันวาคม 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การเพิ่มเมธอดสาธารณะใหม่ในคลาส
ComposableMethod
ที่คล้ายกับjava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะส่งการแจ้งเตือนการใช้ภาพรวมหลังจากที่
Recomposer
ใช้การเปลี่ยนแปลงเสร็จแล้ว (Iad6c0, b/222093277)
เวอร์ชัน 1.4.0-alpha02
9 พฤศจิกายน 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-alpha02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.4.0-alpha01
24 ตุลาคม 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SnapshotStateList
และSnapshotStateMap
มีการใช้งานtoList()
และtoMap()
อย่างชัดแจ้งแล้ว วิธีการเหล่านี้จะแสดงเนื้อหาปัจจุบันโดยไม่ต้องทำสำเนา เนื่องจากจะแสดงข้อมูลที่แก้ไขไม่ได้ภายในซึ่งใช้เพื่อจัดเก็บเนื้อหา ค่านี้อาจใช้เพื่อผลิตลําดับค่าโดยใช้snapshotFlow
โดยไม่ต้องคัดลอกข้อมูล (Ica2bd)
เวอร์ชัน 1.3
เวอร์ชัน 1.3.3
11 มกราคม 2023
androidx.compose.runtime:runtime-*:1.3.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.3 มีคอมมิตเหล่านี้
- ไม่มีการเปลี่ยนแปลงนับตั้งแต่ 1.3.2
เวอร์ชัน 1.3.2
7 ธันวาคม 2022
androidx.compose.runtime:runtime-*:1.3.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตให้รองรับ androidx.compose.ui 1.3.2
เวอร์ชัน 1.3.1
9 พฤศจิกายน 2022
androidx.compose.runtime:runtime-*:1.3.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้
เวอร์ชัน 1.3.0
24 ตุลาคม 2022
androidx.compose.runtime:runtime-*:1.3.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.2.0
การจัดการข้อยกเว้น / การสนับสนุนการแก้ไขแบบเรียลไทม์
- เราได้เพิ่ม API เพื่อรองรับการจัดการข้อยกเว้นระหว่างการคอมโพสิชันให้ดียิ่งขึ้น เพื่อรองรับการแก้ไขแบบเรียลไทม์ได้ดียิ่งขึ้น
- การจัดการข้อผิดพลาดขององค์ประกอบสำหรับการโหลดซ้ำขณะทำงาน
- จัดการข้อผิดพลาดในการแก้ไขแบบเรียลไทม์เมื่อบันทึก/กู้คืน
การติดตามการเขียนโค้ด
- เพิ่ม API การติดตามรันไทม์เพื่อรองรับเครื่องมือการติดตามการคอมโพสิชันใหม่
- สร้างการเรียกฟังก์ชันเริ่มต้น/สิ้นสุดเหตุการณ์การติดตามที่คอมโพสได้
- เพิ่ม ComposerKt.traceEventStart(Int, String) อีกครั้ง
Composable Reflection API
- เราได้เพิ่ม
ComposableMethod
API ใหม่เพื่อให้การเรียก API แบบคอมโพสิเบิลที่อิงตามการสะท้อนกลับมีความน่าเชื่อถือมากขึ้น - ย้าย invokeComposable ไปยังคอมโพสิชันรันไทม์
- Rework API เพื่อเรียกใช้เมธอดแบบคอมโพสิเบิล
การแก้ไขรันไทม์
- แก้ไขการทดสอบช่วงที่ไม่ถูกต้องสำหรับตารางสล็อตที่ตรวจสอบเครื่องหมาย
- อนุญาตให้เนื้อหาที่ย้ายได้ย้ายเข้าและออกจาก SubcomposeLayout
- แก้ไขการย้ายเนื้อหาไปยังเนื้อหาใหม่ขององค์ประกอบย่อย
ระบบสแนปชอต
- ระบบภาพรวมได้รับการปรับปรุงต่างๆ เกี่ยวกับการจัดการหน่วยความจำ ประสิทธิภาพ และความถูกต้อง
- เพิ่มประสิทธิภาพการนำขอบเขตออกใน SnapshotStateObserver
- กำจัดสแนปชอตที่ฝังอยู่ซึ่งสร้างจากสแนปชอตแบบโปร่งใส
- แก้ไขเงื่อนไขการแข่งขันเมื่ออ่านสถานะจากสแนปชอตส่วนกลาง
- รองรับ DerivedState ใน SnapshotStateObserver
- ป้องกันไม่ให้นำสถานะที่ได้จากองค์ประกอบออกจากการคอมโพสิชันเมื่อมีการอ่านในขอบเขตอื่น
- ใช้ IdentityArrayMap แทน HashMap ภายใน DerivedState
- อัปเดตผู้สังเกตสถานะที่มาจากแหล่งอื่นให้ใช้เวกเตอร์ที่เปลี่ยนแปลงได้
- อัปเดตการเก็บล้างสถานะของ SnapshotStateObserver
- แทนที่ SnapshotStateObserver.invalidated ด้วย ArraySet
- แก้ไขเงื่อนไขการแข่งขันเมื่ออ่านสถานะจากสแนปชอตส่วนกลาง
- แก้ไขการใช้ระเบียนเก่าในการคำนวณแฮช DerivedState
- แก้ไขเงื่อนไขการแข่งขันเมื่อเลื่อนสแนปชอตส่วนกลาง
- เพิ่มความเร็วในการล้างข้อมูลการสังเกตการณ์ขอบเขตใน SnapshotStateObserver
เวอร์ชัน 1.3.0-rc01
5 ตุลาคม 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
ArrayIndexOutOfBoundsException
ที่มาจากตารางช่อง (b/249076084)
เวอร์ชัน 1.3.0-beta03
21 กันยายน 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-beta03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่ส่งผลต่อลักษณะการทำงาน
- พารามิเตอร์สำหรับ
remember
และrememberCoroutineScope
เปลี่ยนเป็นcrossinline
ซึ่งจะรายงานข้อผิดพลาดสำหรับการส่งคืนก่อนเวลาแทนที่จะอนุญาตให้ส่งคืนก่อนเวลา ซึ่งจะทำให้ระบบรายงานข้อผิดพลาดภายในในภายหลัง - การเปลี่ยนแปลงนี้อาจส่งผลให้เกิดข้อผิดพลาดใหม่ในคอมไพเลอร์ที่รายงานให้นำการคืนค่าที่ไม่ใช่ภายในออกจาก Lambda ที่ส่งไปยังฟังก์ชันเหล่านี้ (Ibea62)
เวอร์ชัน 1.3.0-beta02
7 กันยายน 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-beta02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- API ที่อัปเดต (I64ca0)
เวอร์ชัน 1.3.0-beta01
24 สิงหาคม 2022
androidx.compose.runtime:runtime-*:1.3.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มเมธอด
find
ลงในCompositionData
เพื่ออนุญาตให้เครื่องมือของนักพัฒนาซอฟต์แวร์ที่ใช้ API นี้ค้นหากลุ่มย่อยขององค์ประกอบได้อย่างรวดเร็วโดยใช้ข้อมูลระบุตัวตน (I5794f)
เวอร์ชัน 1.3.0-alpha03
10 สิงหาคม 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.3.0-alpha02
27 กรกฎาคม 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
ComposerKt.traceEventStart(Int, String)
อีกครั้งเพื่อความเข้ากันได้แบบย้อนหลัง (I6e6de)
เวอร์ชัน 1.3.0-alpha01
29 มิถุนายน 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การย้ายฟังก์ชันการทำงานของยูทิลิตีไปยังรันไทม์ (I4f729)
เวอร์ชัน 1.2
เวอร์ชัน 1.2.1
10 สิงหาคม 2022
androidx.compose.runtime:runtime-*:1.2.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการสูญเสียหน่วยความจำ: กำจัดสแนปชอตที่ฝังอยู่ซึ่งสร้างขึ้นจากสแนปชอตแบบโปร่งใส b/239603305
เวอร์ชัน 1.2.0
27 กรกฎาคม 2022
androidx.compose.runtime:runtime-*:1.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 1.1.0
รันไทม์ Compose เปิดตัวฟีเจอร์จำนวนหนึ่งในเวอร์ชัน 1.2.0 พร้อมกับการแก้ไขข้อบกพร่องเพื่อเพิ่มความเสถียร ฟีเจอร์ใหม่ที่สำคัญที่สุดคือการเปิดตัว
movableContentOf
API ซึ่งสามารถใช้เพื่อเปิดใช้ UX ที่ซับซ้อน เช่น การเปลี่ยนองค์ประกอบที่แชร์movableContentOf
API จะแปลง lambda แบบคอมโพสิเบิลเป็น lambda ที่ย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่ที่เรียกใช้ เมื่อการเรียกก่อนหน้านี้ออกจากการคอมโพสิชัน ระบบจะเก็บสถานะไว้ชั่วคราว และหากการเรียก Lambda ใหม่เข้าสู่การคอมโพสิชัน ระบบจะย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งของการเรียกใหม่ หากไม่มีการเพิ่มการเรียกใหม่ ระบบจะนำสถานะออกอย่างถาวรและแจ้งเตือนผู้สังเกตการณ์ที่บันทึกไว้หากมีการเรียก
movableContentOf
lambda หลายครั้งในคอมโพสิชันเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกแต่ละครั้ง และเมื่อการเรียกออกจากคอมโพสิชันและการเรียกใหม่เข้ามา ระบบจะย้ายสถานะจากการเรียกครั้งแรกที่ออกจากการเรียกใหม่ตามลำดับที่เรียก ระบบจะนำสถานะทั้งหมดที่ไม่ได้อ้างสิทธิ์โดยคําเรียกใหม่ออกอย่างถาวรนอกเหนือจากฟีเจอร์นี้และฟีเจอร์ใหม่อื่นๆ อีก 2-3 รายการแล้ว เรายังใช้เวลาอย่างมากในการทำให้รันไทม์และระบบสถานะภาพรวมมีเสถียร เราได้ลบการรั่วไหลของหน่วยความจำต่างๆ และเพิ่มประสิทธิภาพเส้นทางโค้ดแล้ว
รายการการเปลี่ยนแปลงโดยสรุปมีดังนี้
ฟีเจอร์ใหม่ใน 1.2
- เพิ่ม unsafeEnter/Leave ในสแนปชอตเวอร์ชันทดลอง
- เพิ่ม API ทดลอง Snapshot.asContextElement
- แนะนํา Snapshot.withoutReadObservation
- อนุญาตให้ย้ายสถานะภายในองค์ประกอบ
- การติดตามการเรียบเรียงใหม่ใน "เขียน"
ประสิทธิภาพใน 1.2
การแก้ไขข้อบกพร่องใน 1.2
- นําข้อมูลการติดตามออกจากขอบเขตการคอมโพสใหม่ของรุ่น
- ป้องกันไม่ให้นำสถานะที่ได้จากองค์ประกอบออกจากการคอมโพสิชันเมื่อมีการอ่านในขอบเขตอื่น
- ใช้ removeScope() ที่มีประสิทธิภาพมากขึ้นใน SnapshotStateObserver
- ล้างข้อมูล Dependency สถานะที่ได้จากคอมโพสิชัน
- แก้ไข currentCompositeKeyHash ที่เปลี่ยนแปลงหลังจากการจัดเรียงใหม่ภายในเนื้อหาที่เคลื่อนย้ายได้
- ล้างคอมโพสชันที่ลบไปแล้วระหว่างการทิ้ง
- แก้ไขการอ่านสถานะอนุมานระหว่างการจัดองค์ประกอบใหม่
- แก้ไขปัญหาหน่วยความจำรั่วเมื่อสังเกตออบเจ็กต์สถานะที่มาจากแหล่งอื่น
- แก้ไขคีย์แฮชแบบผสมของ movableContent ให้สอดคล้องกัน
- แก้ไขกรณีที่เกิดขึ้นได้น้อยซึ่งเครื่องมือแต่งเพลงจะขัดข้อง
- ตรวจสอบว่าการทำให้กลุ่มใช้งานไม่ได้แบบบังคับจะบังคับให้จัดองค์ประกอบใหม่
- แก้ไขข้อบกพร่องเมื่อมีการกู้คืน rememberSaveable ที่มีอินพุตในลำดับที่ไม่ถูกต้อง
เวอร์ชัน 1.2.0-rc03
29 มิถุนายน 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-rc03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ก่อนหน้านี้ ระบบจะนำการสังเกตสถานะที่มาจากแหล่งข้อมูลออกจากขอบเขตการคอมโพสิชันและองค์ประกอบใหม่โดยไม่มีเงื่อนไข ซึ่งทำให้ขอบเขตอื่นๆ ที่อาจยังสังเกตสถานะที่มาจากแหล่งข้อมูลอยู่ใช้งานไม่ได้ การเปลี่ยนแปลงนี้จะนําอินสแตนซ์สถานะที่มาจากแหล่งข้อมูลออกเฉพาะในกรณีที่ไม่มีขอบเขตอื่นๆ สังเกตเห็นอีกต่อไป (b/236618362)
เวอร์ชัน 1.2.0-rc02
22 มิถุนายน 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-rc02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-rc01
15 มิถุนายน 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-rc01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้อินเทอร์เฟซในไลบรารีคอมโพสิทสร้างขึ้นโดยใช้เมธอดอินเทอร์เฟซเริ่มต้นของ jdk8 (I5bcf1)
เวอร์ชัน 1.2.0-beta03
1 มิถุนายน 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-beta02
18 พฤษภาคม 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-beta01
11 พฤษภาคม 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- นี่เป็นรุ่นเบต้าแรกของ 1.2
การเปลี่ยนแปลง API
- เพิ่ม
Snapshot.unsafeEnter/unsafeLeave
(I108f3) เวอร์ชันทดลอง - เพิ่ม
Snapshot.asContextElement()
API เวอร์ชันทดลอง (Iff072) - ตอนนี้คุณใช้คำอธิบายประกอบ
@ComposableTarget
และคำอธิบายประกอบที่ทําเครื่องหมายด้วย@ComposableTargetMarker
ในระดับไฟล์ได้โดยใช้คำนำหน้า@file
การใช้คำอธิบายประกอบเป้าหมายในระดับขอบเขตไฟล์จะทำให้คอมไพเลอร์ถือว่าฟังก์ชันแบบคอมโพสิเบิลทั้งหมดในไฟล์มีไว้เพื่อกำหนดเป้าหมายไปยังแอปเพลเยอร์ที่เกี่ยวข้อง เช่น การใช้@file:UiComposable
จะประกาศว่าฟังก์ชัน@Composable
ทั้งหมดกำหนดเป้าหมายไปยังตัวใช้ UI ของ Compose ฟังก์ชันที่ต้องกำหนดเป้าหมายไปยังแอปพลิเคชันอื่นต้องระบุคำอธิบายประกอบเครื่องหมายเป้าหมายสำหรับแอปพลิเคชันที่ต้องการอย่างชัดเจน (I40804)
เวอร์ชัน 1.2.0-alpha08
20 เมษายน 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha08 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
TracingInProgress
ไปยังอินเทอร์เฟซCompositionTracer
แล้ว (Ic6f12) - เพิ่ม
recomposeScopeIdentity
ไปยัง Composer (I0c873) - จำกัด API การติดตาม (Composer.setTracer) เป็น
OptIn(InternalComposeTracingApi)
(I9187f) - เพิ่ม
ResuableContentHost
ซึ่งช่วยให้ควบคุมอายุการใช้งานของสถานะที่สร้างขึ้นสําหรับเนื้อหาที่นํามาใช้ซ้ำได้ดีขึ้น เช่น หากไม่มีการใช้องค์ประกอบย่อยชั่วคราว ระบบจะปิดใช้งานเนื้อหา ซึ่งจะทำให้ระบบลืมสถานะที่จดจำไว้ทั้งหมดในองค์ประกอบ เช่น เอฟเฟกต์ที่ใช้แล้วทิ้งทั้งหมด (I2c0f2, b/220322704)
เวอร์ชัน 1.2.0-alpha07
6 เมษายน 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มฟังก์ชันใหม่
Snapshot.withoutReadObservation { ... }
แล้ว ซึ่งช่วยให้ผู้ใช้เรียกใช้ Lambda ที่ส่งมาได้โดยไม่ต้องติดตามการเปลี่ยนแปลงของค่าสถานะที่อ่านระหว่างบล็อกนี้ คุณอาจพบว่าการดำเนินการนี้มีประโยชน์ใน Use Case เมื่อต้องการใช้ประโยชน์จากการเขียน/อ่านที่ปลอดภัยสำหรับเธรดซึ่งอิงตามสแนปชอต แต่ต้องการอ่านค่าได้โดยไม่ก่อให้เกิดการคอมโพสิชันใหม่หรือการวัดผลอีกครั้งที่ไม่จำเป็น (I9f365, b/214054486)
เวอร์ชัน 1.2.0-alpha06
23 มีนาคม 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha06 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-alpha05
9 มีนาคม 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha05 มีการคอมมิตเหล่านี้
การมีส่วนร่วมจากภายนอก
- อัปเดตให้ใช้ Kotlinx coroutines 1.6.0 (I3366d)
เวอร์ชัน 1.2.0-alpha04
23 กุมภาพันธ์ 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เพิ่ม
ComposableTarget
,ComposableTargetMarker
และComposableOpenTarget
ซึ่งช่วยให้รายงานเวลาคอมไพล์ได้เมื่อมีการเรียกใช้ฟังก์ชันที่ประกอบกันได้ซึ่งกำหนดเป้าหมายไปยังแอปพลิเคชันที่ไม่ได้ออกแบบมาเพื่อใช้งานในกรณีส่วนใหญ่ ปลั๊กอินคอมไพเลอร์ของ Compose จะอนุมานคำอธิบายประกอบได้ คุณจึงควรใช้คำอธิบายประกอบเหล่านี้โดยตรงในบางกรณีเท่านั้น กรณีที่ไม่สามารถอนุมานได้ ได้แก่ การสร้างและการใช้ Applier ที่กําหนดเอง ฟังก์ชันที่คอมโพสิเบิลแบบนามธรรม (เช่น เมธอดอินเทอร์เฟซ) ฟิลด์หรือตัวแปรส่วนกลางที่เป็น Lambda ที่คอมโพสิเบิล (ระบบจะอนุมานตัวแปรและพารามิเตอร์ภายใน) หรือเมื่อใช้
ComposeNode
หรือฟังก์ชันที่คอมโพสิเบิลที่เกี่ยวข้องสําหรับตัวใช้ที่กําหนดเอง ฟังก์ชันแบบคอมโพสิเบิลที่เรียก
ComposeNode
หรือReusableComposeNode
จะต้องเพิ่มแอตทริบิวต์CompoableTarget
สําหรับฟังก์ชันและพารามิเตอร์ LAMBDA ประเภทใดก็ได้ที่คอมโพสิเบิล อย่างไรก็ตาม เราขอแนะนำให้สร้างคำอธิบายประกอบที่มีคำอธิบายประกอบด้วยComposableTargetMarker
แล้วใช้คำอธิบายประกอบที่มีเครื่องหมายแทนการใช้ComposableTarget
โดยตรง คําอธิบายประกอบแบบคอมโพสิเบิลที่มีเครื่องหมายComposableTargetMarker
เทียบเท่ากับComposbleTarget
ที่มีชื่อแบบเต็มของคลาสแอตทริบิวต์เป็นพารามิเตอร์ applier ดูตัวอย่างการใช้ComposableTargetMarker
ได้ที่anroidx.compose.ui.UiComposable
(I38f11)
เวอร์ชัน 1.2.0-alpha03
9 กุมภาพันธ์ 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เพิ่ม
movableContentOf
ซึ่งจะแปลงคอมโพสิเบิลแลมดาเป็นแลมดาที่ย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่ที่เรียกใช้ เมื่อการเรียกก่อนหน้านี้ออกจากการคอมโพสิชัน ระบบจะเก็บสถานะไว้ชั่วคราว และหากการเรียกใหม่ไปยัง Lambda เข้าสู่การคอมโพสิชัน ระบบจะย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งของการเรียกใหม่ หากไม่มีการเพิ่มการเรียกใหม่ ระบบจะนำสถานะออกอย่างถาวรและอย่าลืมแจ้งให้ผู้สังเกตการณ์ทราบหากมีการเรียกใช้
movableContentOf
lambda หลายครั้งในคอมโพสิชันเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกแต่ละครั้ง และเมื่อการเรียกออกจากคอมโพสิชันและการเรียกใหม่เข้ามา ระบบจะย้ายสถานะจากการเรียกครั้งแรกที่ออกจากคอมโพสิชันไปยังการเรียกที่เข้ามาใหม่ตามลำดับที่เรียก ระบบจะนำสถานะทั้งหมดที่ไม่ได้อ้างสิทธิ์โดยการเรียกใช้ใหม่ออกอย่างถาวร (Ib4850)เพิ่ม API การติดตามลงในคอมโพสิชันเพื่อให้เครื่องมือสามารถติดตามฟังก์ชันที่คอมโพสิเบิลได้ละเอียดยิ่งขึ้น ตอนนี้คอมไพเลอร์จะสร้างการเรียกใช้การติดตาม API ซึ่งมีข้อมูลแหล่งที่มา (Ib0eb5)
หากต้องการนําการเรียกเหล่านี้และข้อมูลแหล่งที่มาที่เกี่ยวข้องออกจากบิลด์รุ่น ให้เพิ่มกฎ Proguard ต่อไปนี้
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
เพิ่ม
InternalComposeScope
ซึ่งจะช่วยให้เครื่องมือระบุคอมโพสิเบิลได้ในระหว่างการจัดองค์ประกอบใหม่ (I07a3f)
เวอร์ชัน 1.2.0-alpha02
26 มกราคม 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-alpha01
12 มกราคม 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มช่อง
identity
ลงในCompositionData
เพื่อสร้างรหัสแบบคงที่ในเครื่องมือตรวจสอบเลย์เอาต์ (Ic116e)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ขึ้นอยู่กับ Kotlin
1.6.10
เวอร์ชัน 1.1
เวอร์ชัน 1.1.1
23 กุมภาพันธ์ 2022
androidx.compose.runtime:runtime-*:1.1.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
ที่androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - แก้ไขข้อขัดข้องที่เกิดขึ้นจากเนื้อหาในคลิปบอร์ดขณะอ่านจากคลิปบอร์ดใน Android (I06020, b/197769306)
- แก้ไข RTL ใน
LazyVerticalGrid
(aosp/1931080, b/207510535)
เวอร์ชัน 1.1.0
9 กุมภาพันธ์ 2022
androidx.compose.runtime:runtime-*:1.1.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.0.0
- การรองรับเอฟเฟกต์การเลื่อนผ่านของ Android 12 อย่างเสถียร
- การปรับปรุงขนาดเป้าหมายการสัมผัส
- โปรดทราบว่าสำหรับ Compose 1.0 คอมโพเนนต์ Material จะขยายพื้นที่เลย์เอาต์เพื่อให้เป็นไปตามหลักเกณฑ์การช่วยเหลือพิเศษของ Material สำหรับขนาดเป้าหมายการสัมผัส เช่น เป้าหมายการสัมผัสของปุ่มจะขยายให้มีขนาดขั้นต่ำ
48x48dp
แม้ว่าคุณจะตั้งค่าขนาดของปุ่มให้เล็กกว่านี้ก็ตาม ซึ่งจะช่วยให้ Compose Material ทำงานในลักษณะเดียวกับคอมโพเนนต์ Material Design เพื่อให้ทำงานได้อย่างสอดคล้องกันหากคุณใช้ทั้ง Views และ Compose การเปลี่ยนแปลงนี้ยังช่วยให้มั่นใจด้วยว่าเมื่อคุณสร้าง UI โดยใช้คอมโพเนนต์ Compose Material คุณจะมีคุณสมบัติตรงตามข้อกำหนดขั้นต่ำสำหรับการช่วยเหลือพิเศษสำหรับเป้าหมายการสัมผัส - รองรับแถบข้างสำหรับไปยังส่วนต่างๆ อย่างเสถียร
- เปลี่ยน API เวอร์ชันทดลองจำนวนหนึ่งเป็นเวอร์ชันเสถียร
- รองรับ Kotlin เวอร์ชันใหม่
เวอร์ชัน 1.1.0-rc03
26 มกราคม 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-rc03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตเพื่อรองรับ Compose Material
1.1.0-rc03
เวอร์ชัน 1.1.0-rc01
15 ธันวาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-beta04
1 ธันวาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-beta04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดตให้ใช้งานร่วมกับ Kotlin
1.6.0
ได้
เวอร์ชัน 1.1.0-beta03
17 พฤศจิกายน 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-beta03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-beta02
3 พฤศจิกายน 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- โค้ดสแนปชอตแบ่งออกเป็นหลายไฟล์ แต่ทั้งหมดยังคงอยู่ในคลาส JVM เดียวกัน (Ic6c98)
เวอร์ชัน 1.1.0-beta01
27 ตุลาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-beta01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha06
13 ตุลาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำ
InternalCompilerApi
ออกจากเมธอด Composer ที่ต้องเรียกข้ามโมดูล (I1aa0b) Recomposer.state
เลิกใช้งานแล้วและแทนที่ด้วยRecomposer.currentState
เพื่อเปลี่ยนประเภทเป็น StateFlow (Ic2ab3, b/197773820)
เวอร์ชัน 1.1.0-alpha05
29 กันยายน 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha05 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha04
15 กันยายน 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha04 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha03
1 กันยายน 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คอมไพเลอร์ Compose รองรับรันไทม์ Compose เวอร์ชันเก่า (1.0) แล้ว ก่อนการเปลี่ยนแปลงนี้ คอมไพเลอร์ Compose ใช้ได้กับรันไทม์ Compose เวอร์ชันเดียวกันหรือเวอร์ชันที่ใหม่กว่าเท่านั้น หลังจากการเปลี่ยนแปลงนี้ คอมไพเลอร์ Compose จะใช้งานร่วมกับรันไทม์ Compose เวอร์ชันเก่า (1.0) ได้ (aosp/1796968)
- อัปเดต Compose
1.1.0-alpha03
ให้ใช้ Kotlin1.5.30
(I74545)
เวอร์ชัน 1.1.0-alpha02
18 สิงหาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha01
4 สิงหาคม 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha01 มีการคอมมิตเหล่านี้
รุ่น 1.0
เวอร์ชัน 1.0.5
3 พฤศจิกายน 2021
androidx.compose.runtime:runtime-*:1.0.5
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการติดตามอินสแตนซ์ derivedStateOf (aosp/1792247)
เวอร์ชัน 1.0.4
13 ตุลาคม 2021
androidx.compose.runtime:runtime-*:1.0.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.4 มีการคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- อัปเดตให้ใช้ Kotlin
1.5.31
เวอร์ชัน 1.0.3
29 กันยายน 2021
androidx.compose.runtime:runtime-*:1.0.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.3 มีคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- อัปเดตให้ใช้ Kotlin
1.5.30
เวอร์ชัน 1.0.2
1 กันยายน 2021
androidx.compose.runtime:runtime-*:1.0.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.2 มีคอมมิตเหล่านี้
อัปเดตเพื่อรองรับรุ่น Compose 1.0.2
Compose 1.0.2
จะยังคงใช้งานร่วมกับ Kotlin 1.5.21
ได้
เวอร์ชัน 1.0.1
4 สิงหาคม 2021
androidx.compose.runtime:runtime-*:1.0.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.1 มีคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- อัปเดตให้ใช้ Kotlin
1.5.21
เวอร์ชัน 1.0.0
28 กรกฎาคม 2021
androidx.compose.runtime:runtime-*:1.0.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของ 1.0.0
นี่เป็นเวอร์ชันเสถียรครั้งแรกของ Compose โปรดดูรายละเอียดเพิ่มเติมในบล็อกการเผยแพร่อย่างเป็นทางการของ Compose
ปัญหาที่ทราบ
หากคุณใช้ Android Studio Bumblebee Canary 4 หรือ AGP
7.1.0-alpha04
/7.1.0-alpha05
คุณอาจพบข้อขัดข้องต่อไปนี้java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
วิธีแก้ไขคือเพิ่ม minSdkVersion เป็น 24 ขึ้นไปชั่วคราวในไฟล์
build.gradle
ปัญหานี้จะได้รับการแก้ไขใน Android Studio Bumblebee และ AGP7.1
เวอร์ชันถัดไป (b/194289155)
เวอร์ชัน 1.0.0-rc02
14 กรกฎาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-rc02 มีการคอมมิตเหล่านี้
- แก้ไขเงื่อนไขการแข่งขันใน SnapshotStateObserver ซึ่งทําให้มีข้อยกเว้น NullPointer เกิดขึ้นเป็นระยะ (aosp/1763445, aosp/1758105, b/192677711)
- แก้ไขปัญหาเกี่ยวกับภาพรวมรันไทม์ที่ทําให้
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
ขัดข้อง (b/193006595, b/192570897)
เวอร์ชัน 1.0.0-rc01
1 กรกฎาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-beta09
16 มิถุนายน 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta09 มีการคอมมิตเหล่านี้
เพิ่มกฎโปรไฟล์
รุ่นนี้เพิ่มกฎโปรไฟล์ลงในข้อบังคับการเขียนต่อไปนี้ (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
กฎโปรไฟล์คืออะไร
กฎโปรไฟล์สำหรับไลบรารีจะระบุไว้ในไฟล์ข้อความ
baseline-prof.txt
ซึ่งอยู่ในไดเรกทอรีsrc/main
หรือไดเรกทอรีที่เทียบเท่า ไฟล์จะระบุกฎต่อบรรทัด โดยที่กฎในกรณีนี้คือรูปแบบสำหรับการจับคู่กับเมธอดหรือคลาสในไลบรารี ไวยากรณ์ของกฎเหล่านี้เป็นชุดที่ใหญ่กว่ารูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ซึ่งใช้เมื่อใช้adb shell profman --dump-classes-and-methods ...
กฎเหล่านี้มี 2 รูปแบบเพื่อกำหนดเป้าหมายไปยังเมธอดหรือคลาสกฎเมธอดจะมีรูปแบบดังต่อไปนี้
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
และกฎระดับชั้นจะมีรูปแบบดังต่อไปนี้
<CLASS_DESCRIPTOR>
โดยที่
<FLAGS>
คืออักขระH
,S
และP
อย่างน้อย 1 ตัวเพื่อระบุว่าควรแจ้งว่าเมธอดนี้ "มาแรง" "เริ่มต้นใช้งาน" หรือ "หลังเริ่มต้นใช้งาน" หรือไม่<CLASS_DESCRIPTOR>
คือตัวบ่งชี้ของคลาสที่เมธอดเป้าหมายอยู่ เช่น คลาสandroidx.compose.runtime.SlotTable
จะมีตัวบ่งชี้เป็นLandroidx/compose/runtime/SlotTable;
<METHOD_SIGNATURE>
คือลายเซ็นของเมธอด ซึ่งประกอบด้วยชื่อ ประเภทพารามิเตอร์ และประเภทผลลัพธ์ของเมธอด เช่น เมธอดfun isPlaced(): Boolean
ในLayoutNode
มีลายเซ็นisPlaced()Z
รูปแบบเหล่านี้อาจมีไวลด์การ์ด (
**
,*
และ?
) เพื่อให้กฎเดียวครอบคลุมเมธอดหรือคลาสหลายรายการ
กฎมีไว้เพื่ออะไร
เมธอดที่มี Flag
H
บ่งบอกว่าเมธอดนี้เป็นเมธอด "Hot" และควรคอมไพล์ล่วงหน้าเมธอดที่มี Flag
S
บ่งบอกว่าเป็นเมธอดที่เรียกใช้เมื่อเริ่มต้นระบบ และควรคอมไพล์ล่วงหน้าเพื่อหลีกเลี่ยงค่าใช้จ่ายในการคอมไพล์และการตีความเมธอดเมื่อเริ่มต้นระบบเมธอดที่มี Flag
P
บ่งบอกว่าเป็นเมธอดที่เรียกใช้หลังจากการเริ่มต้นคลาสที่อยู่ในไฟล์นี้บ่งบอกว่ามีการใช้คลาสดังกล่าวระหว่างการเริ่มต้นระบบและควรจัดสรรล่วงหน้าในกองเพื่อหลีกเลี่ยงค่าใช้จ่ายในการโหลดคลาส
ระบบนี้ทำงานอย่างไร
- ไลบรารีสามารถกำหนดกฎเหล่านี้ซึ่งจะรวมอยู่ในอาร์ติแฟกต์ AAR เมื่อสร้างแอปที่มีอาร์ติแฟกต์เหล่านี้ ระบบจะผสานกฎเหล่านี้เข้าด้วยกันและใช้กฎที่ผสานเพื่อสร้างโปรไฟล์ ART แบบไบนารีที่กะทัดรัดซึ่งเจาะจงสำหรับแอป จากนั้น ART จะใช้โปรไฟล์นี้เมื่อติดตั้งแอปในอุปกรณ์เพื่อคอมไพล์ชุดย่อยที่เฉพาะเจาะจงของแอปพลิเคชันล่วงหน้าเพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน โดยเฉพาะการใช้งานครั้งแรก โปรดทราบว่าการดำเนินการนี้จะไม่ส่งผลต่อแอปพลิเคชันที่แก้ไขข้อบกพร่องได้
เวอร์ชัน 1.0.0-beta08
2 มิถุนายน 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta08 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
State<T>
เปลี่ยนชื่อเป็นState<out T>
(I69049)ControlledComposition
การเปลี่ยนแปลง API เพื่อเปิดใช้การจัดเรียงใหม่ การเปลี่ยนแปลงในการจัดเรียงใหม่แบบผ่านรายการเดียว (Iaafd1, b/184173932)
เวอร์ชัน 1.0.0-beta07
18 พฤษภาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API คอมไพเลอร์คอมโพสิทใหม่ที่ช่วยในการนําข้อมูลแหล่งที่มาที่คอมไพเลอร์สร้างขึ้นออกในระหว่างการลดขนาดแหล่งที่มา (Ia34e6)
เปิดตัว
ReusableContent
ซึ่งจะพยายามนําโหนดมาใช้ซ้ำในเนื้อหาแทนที่จะแทนที่เมื่อมีการทําการเปลี่ยนแปลงคีย์ เมื่อเปลี่ยนคีย์ ระบบจะไม่สนใจค่าก่อนหน้าในตารางสล็อตสําหรับเนื้อหา ยกเว้นโหนดที่สร้างขึ้นและค่าที่ใช้อัปเดตโหนดเปิดตัว
ReusableComposeNode
ที่จะนําโหนดที่ส่งออกมาใช้ซ้ำแทนการแทนที่โหนดนั้น เช่นเดียวกับที่ใช้กับComposeNode
(I1dd86)@ComposeCompilerApi
ไม่@RequiresOptIn
แล้ว (Iab690)
การแก้ไขข้อบกพร่อง
- ตอนนี้ LazyColumn/Row จะเก็บรายการที่มองเห็นก่อนหน้านี้ไว้สูงสุด 2 รายการ (ไม่ทิ้ง) แม้ว่าจะเลื่อนออกไปแล้วก็ตาม ซึ่งช่วยให้คอมโพเนนต์นําคอมโพสิชันย่อยที่ใช้งานอยู่มาใช้ซ้ำได้เมื่อเราต้องคอมโพสิชันรายการใหม่ ซึ่งจะช่วยปรับปรุงประสิทธิภาพการเลื่อน (Ie5555)
เวอร์ชัน 1.0.0-beta06
5 พฤษภาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@ComposeCompilerApi
ไม่@RequiresOptIn
แล้ว (Iab690)
เวอร์ชัน 1.0.0-beta05
21 เมษายน 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำ
@InternalComposeApi
ออกสำหรับการบันทึกการอ่านและเขียนสแนปชอต (Id134d)
การแก้ไขข้อบกพร่อง
- ตอนนี้ไฟล์ AndroidManifest จาก ui-test-manifest และ ui-tooling-data ใช้ได้กับ Android 12 แล้ว (I6f9de, b/184718994)
เวอร์ชัน 1.0.0-beta04
7 เมษายน 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta04 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
ก่อนการเปลี่ยนแปลงนี้ ฟังก์ชันคอมโพสิเบิลในเครื่องสามารถข้ามได้ตามความเหมาะสมของพารามิเตอร์ หลังจากการเปลี่ยนแปลงนี้ ระบบจะไม่ข้ามฟังก์ชันคอมโพสิเบิลในเครื่อง การเปลี่ยนแปลงนี้เกิดขึ้นเนื่องจากฟังก์ชันในเครื่องจะรับพารามิเตอร์จากฟังก์ชันหลักเป็นปกติอยู่แล้ว และการข้ามพารามิเตอร์เป็นสาเหตุที่ทำให้เกิดข้อบกพร่องได้บ่อยครั้ง
สรุปคือ ให้ดูตัวอย่างต่อไปนี้
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
ก่อนที่จะมีการเปลี่ยนแปลงนี้ ฟังก์ชันคอมโพสิเบิล
ShowCount
จะข้ามเสมอ แม้ว่าจะมีการอัปเดตพารามิเตอร์count
แล้วก็ตาม แต่เหตุการณ์ดังกล่าวจะไม่เกิดขึ้นแล้ว (I5648a)แก้ไขปัญหาเมื่อ
rememberSaveable()
กู้คืนค่าเดิมเมื่อใช้กับพารามิเตอร์อินพุต (I1b110, b/182403380)
เวอร์ชัน 1.0.0-beta03
24 มีนาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
DefaultMonotonicFrameClock
เลิกใช้งานแล้ว การเรียกใช้withFrameNanos
หรือRecomposer.runRecomposeAndApplyChanges
โดยไม่มีMonotonicFrameClock
จะแสดงIllegalStateException
(I4eb0d)
เวอร์ชัน 1.0.0-beta02
10 มีนาคม 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- บังคับใช้ข้อจํากัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)
- แก้ไข
rememberSaveable { mutableStateOf(0) }
ที่ไม่ทำงานเมื่อใช้ในปลายทางของ navigation-compose (I1312b, b/180042685, b/180701630)
เวอร์ชัน 1.0.0-beta01
24 กุมภาพันธ์ 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้
นี่เป็นรุ่นแรกของ Compose 1.0.0 เบต้า
การเปลี่ยนแปลง API
- เพิ่ม
Recomposer.runRecomposeConcurrentlyAndApplyChanges
API เวอร์ชันทดลองสำหรับการคอมโพสองค์ประกอบที่ลบล้างออกจากลูปเฟรมหลักอีกครั้ง (I342d0) - ตอนนี้คอมโพสิเบิลที่มีเครื่องหมาย @ReadOnlyComposable จะได้รับการตรวจสอบเมื่อคอมไพล์เพื่อให้แน่ใจว่ามีการเรียกใช้เฉพาะ @ReadOnlyComposable อื่นๆ เท่านั้น (I58961)
ตอนนี้
defaultFactory
สำหรับcompositionLocalOf
และstaticCompositionLocalOf
จำเป็นต้องระบุแล้ว ไม่ใช่แค่ไม่บังคับการเปลี่ยนแปลงนี้จะช่วยขจัดข้อผิดพลาดประเภทที่อาจเกิดขึ้นสำหรับประเภทที่ไม่ใช่ Nullable ซึ่งไม่ได้ระบุ Factory เริ่มต้น ก่อนหน้านี้การดำเนินการนี้จะให้ค่าอ้างอิง Null สำหรับประเภทที่ไม่ใช่ Null
สําหรับประเภทที่อนุญาตค่า Null ให้ลองระบุ
{ null }
เป็นฟีเจอร์เริ่มต้นเราไม่แนะนําให้ใช้ตัวแปรท้องถิ่นที่มีประเภทที่ไม่ใช่ Null ได้ เว้นแต่จะสามารถระบุค่าเริ่มต้นที่เหมาะสมได้ หากไม่มีค่าเริ่มต้นที่เหมาะสม
defaultFactory
lambda ควรแสดงข้อยกเว้น อย่างไรก็ตาม การยกเว้นข้อยกเว้นหมายความว่าผู้ใช้ภาษาท้องถิ่นจะมีความเกี่ยวข้องโดยนัยกับภาษาท้องถิ่นที่ระบุ ซึ่งระบบประเภทไม่ได้บังคับใช้ (Ifbd2a)นําสัญลักษณ์ที่เลิกใช้งานออกจากรันไทม์ของ Compose แล้ว (I3252c)
emptyContent()
ที่เลิกใช้งานแล้วถูกนําออก ให้ใช้{}
แทน (Idb33f, b/179432510)เปลี่ยนชื่อ Providers เป็น CompositionLocalProvider แล้ว
- ตัวสร้างคอมโพสิชันไม่รับพารามิเตอร์คีย์อีกต่อไปและเลิกใช้งานแล้ว
- currentCompositeKeyHash ได้เปลี่ยนเป็นพร็อพเพอร์ตี้ระดับบนสุดที่คอมโพสิเบิลแทนที่จะเป็นฟังก์ชันระดับบนสุดที่คอมโพสิเบิล
- ย้าย CompositionData และ CompositionGroup ไปยังเนมสเปซ androidx.compose.runtime.tooling แล้ว
- ComposableLambda ได้เปลี่ยนเป็นอินเทอร์เฟซแทนที่จะเป็นคลาสที่เฉพาะเจาะจง และไม่มีพารามิเตอร์ประเภทอีกต่อไป
- ComposableLambdaN เปลี่ยนเป็นอินเทอร์เฟซแทนที่จะเป็นคลาสที่เฉพาะเจาะจง และไม่มีพารามิเตอร์ประเภทอีกต่อไป
- ย้ายฟังก์ชัน snapshotFlow ไปยังเนมสเปซ androidx.compose.runtime แล้ว
- เมธอดผสานของ SnapshotMutationPolicy ไม่ได้อยู่ในช่วงทดลองอีกต่อไป
- นําฟังก์ชัน clearRoots ระดับบนสุด @TestOnly ออกแล้ว ไม่จำเป็นต้องใช้อีกต่อไป
- เราได้นําฟังก์ชัน keySourceInfoOf และ resetSourceInfo ออกแล้ว จึงไม่จําเป็นต้องใช้อีกต่อไป
- นํา Composer.collectKeySourceInformation ออกแล้ว ไม่จำเป็นต้องใช้อีกต่อไป
- ระบบได้นำเมธอด isJoinedKey, joinedKeyLeft และ joinedKeyRight ออกแล้ว จึงไม่จําเป็นต้องใช้อีกต่อไป
- เราได้ย้ายและจัดระเบียบ API ระดับบนสุดต่างๆ ไว้ในไฟล์ต่างๆ การดำเนินการนี้จะทำลายความเข้ากันได้ของไฟล์ แต่จะไม่ทำลายความเข้ากันได้ของซอร์สโค้ด เนื่องจากความหมายของคลาสไฟล์ Kotlin จึงไม่ควรเป็นปัญหาสำหรับผู้ใช้ส่วนใหญ่
- (I99b7d, b/177245490)
SnapshotStateObserver ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Id2e6a)
ลบ API บางรายการที่เลิกใช้งานไปก่อนหน้านี้ (Ice5da, b/178633932)
เปลี่ยนแปลง Material API ดังต่อไปนี้
- เพิ่มพารามิเตอร์ contentPadding ลงใน Top/BottomAppBar เพื่ออนุญาตให้ปรับแต่งการเว้นวรรคเริ่มต้น
- จัดเรียงพารามิเตอร์ใน BackdropScaffold ใหม่เพื่อให้เป็นไปตามหลักเกณฑ์ของ API ที่กำหนดให้พารามิเตอร์ที่จำเป็นอยู่ก่อนพารามิเตอร์ที่ไม่บังคับ
- ย้ายพารามิเตอร์
icon
ใน BottomNavigationItem ไปไว้หลังselected
และonClick
- เปลี่ยนชื่อพารามิเตอร์
alwaysShowLabels
ใน BottomNavigationItem เป็นalwaysShowLabel
- เปลี่ยนชื่อพารามิเตอร์
bodyContent
ในคอมโพเนนต์ 2-3 รายการเป็นcontent
- พารามิเตอร์ที่จัดเรียงใหม่ใน
ButtonDefaults.buttonColors()
โปรดทราบว่าเนื่องจากประเภทของพารามิเตอร์ไม่เปลี่ยนแปลง การดำเนินการนี้จะไม่ทำให้เกิดข้อผิดพลาดในโค้ด โปรดตรวจสอบว่าคุณใช้พารามิเตอร์ที่มีชื่อหรืออัปเดตลําดับด้วยตนเอง ไม่เช่นนั้นโค้ดจะไม่ทํางานเหมือนเดิม - เพิ่มพารามิเตอร์
secondaryVariant
ไปยังdarkColors()
แล้ว โดยปกติแล้วสีนี้จะเหมือนกับsecondary
ในธีมมืด แต่เพิ่มเข้ามาเพื่อความสอดคล้องและการปรับแต่งเพิ่มเติม - นํา ElevationDefaults และ animateElevation() ออกจากแพลตฟอร์ม API สาธารณะเนื่องจากไม่ค่อยมีการใช้งาน / มีประโยชน์
- เปลี่ยนชื่อ
onValueChangeEnd
ในSlider
เป็นonValueChangeFinished
และกำหนดให้มีค่า Null ได้ - เปลี่ยนชื่อพารามิเตอร์
text
ในSnackbar
เป็นcontent
เพื่อให้สอดคล้องกัน - เพิ่มพารามิเตอร์
contentPadding
ลงในDropdownMenuItem
เพื่ออนุญาตให้ปรับแต่งการเยื้องเริ่มต้น และทําให้content
เป็นส่วนขยายของRowScope
- เปลี่ยนชื่อ
ModalDrawerLayout
เป็นModalDrawer
แล้ว - เปลี่ยนชื่อ
BottomDrawerLayout
เป็นBottomDrawer
แล้ว - (I1cc66)
เวอร์ชัน 1.0.0-alpha12
10 กุมภาพันธ์ 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha12 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำการรองรับ ViewGroups ออกจาก UiApplier แล้ว นําคอมโพสิชัน emitView ที่เลิกใช้งานออกแล้ว (Ifb214)
- เปลี่ยนชื่อ CompositionReference เป็น CompositionContext (I53fcb)
- ComponentActivity.setContent ได้ย้ายไปอยู่ใน androidx.activity.compose.setContent ในโมดูล androidx.activity:activity-compose (Icf416)
- เราได้อัปเดต Snapshot API เพื่อให้สอดคล้องกับหลักเกณฑ์ API มากขึ้น รวมถึงซ่อนคลาสการติดตั้งใช้งานภายในจาก API สาธารณะ (Id9e32)
- เปลี่ยนชื่อ "ภาพพักหน้าจอ" ให้ตรงกับ "ภาพพักหน้าจอ" -> เปลี่ยนชื่อ CompositionLocal เดิมองค์ประกอบรอบข้างมีชื่อว่า AmbientFoo แต่ตอนนี้ CompositionLocals มีชื่อว่า LocalFoo (I2d55d)
- เปลี่ยนชื่อ "Ambient" เป็น "CompositionLocal" และ "ambientOf" / "staticAmbientOf" เป็น "compositionLocalOf" / "staticCompositionLocalOf" ตามลำดับ การเปลี่ยนแปลงนี้ช่วยให้ทราบวัตถุประสงค์ของ CompositionLocal ชัดเจนยิ่งขึ้น ซึ่งเป็นกลไกในการระบุ / ดึงค่าในคอมโพสิชัน อินสแตนซ์ CompositionLocal ควรขึ้นต้นด้วย
Local
เช่น val LocalFoo = compositionLocalOf { Foo() } (Ia55b6) - เราย้าย takeMutableSnapshot และ takeSnapshot ไปไว้เป็นเมธอดเสริมของสแนปชอตแล้ว (I91f19)
@ComposableContract
เลิกใช้งานแล้วเพื่อใช้คำอธิบายประกอบที่เฉพาะเจาะจงมากขึ้น 3 รายการ@ComposableContract(restartable = false)
เปลี่ยนเป็น@NonRestartableComposable
@ComposableContract(readonly = true)
เปลี่ยนเป็น@ReadOnlyComposable
@ComposableContract(preventCapture = true)
เปลี่ยนเป็น@DisallowComposableCalls
นำ@ComposableContract(tracked = true)
ออกแล้ว (I60a9d)เราได้เลิกใช้งานยูทิลิตี emptyContent() และ (@Composable () -> Unit).orEmpty() เนื่องจากไม่มีผลกระทบหรือคุณค่าเชิงบวกต่อประสิทธิภาพอีกต่อไป (I0484d)
snapshotFlow
และwithMutableSnapshot
ไม่ได้อยู่ในรุ่นทดลองอีกต่อไป (I6a45f)ตอนนี้คุณปิดเครื่องมือจัดเรียงใหม่ได้แล้ว ตัวจัดเรียงใหม่แบบปิดจะจัดเรียงใหม่ต่อไปจนกว่าโคโริวทีนย่อยของการจัดเรียงจะเสร็จสมบูรณ์ เปลี่ยนชื่อ Recomposer.shutDown เป็น cancel เพื่อไม่ให้สับสนกับ close (Ib6d76)
เราได้เลิกใช้งานอาร์ติแฟกต์
compose:runtime-dispatch
แล้ว ตอนนี้ MonotonicFrameClock จะอยู่ใน compose:runtime และ AndroidUiDispatcher จะอยู่ใน compose:ui (Ib5c36)API ที่ปลั๊กอินคอมไพเลอร์ Compose กำหนดเป้าหมายได้ได้รับการปรับโครงสร้างให้ใช้อินเทอร์เฟซแทนคลาสที่เฉพาะเจาะจง นอกจากนี้ อินเทอร์เฟซจะไม่ใช้พารามิเตอร์ประเภทอีกต่อไป
การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงภายในที่ไม่ควรส่งผลต่อความเข้ากันได้ของซอร์สโค้ด แต่เป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องในไบนารี (I3b922, b/169406779)
เปิดตัว SnapshotMutableState (Icfd03)
เปลี่ยนชื่อ DisposableEffectDisposable เป็น DisposaleEffectResult (Ica7c6)
นำ Recomposer.current() ออก [Abstract]ComposeView ตอนนี้จะใช้ Recomposer ระดับหน้าต่างที่สร้างขึ้นแบบเลื่อนเวลาโดย ViewTreeLifecycleOwner สำหรับหน้าต่างนั้นๆ โดยค่าเริ่มต้น การคอมโพสิชันใหม่และการนับภาพเคลื่อนไหวตาม withFrameNanos จะหยุดชั่วคราวขณะที่วงจรชีวิตของโฮสต์หยุดลง (I38e11)
ตอนนี้ Recomposer.runningRecomposers มี StateFlow ทั่วโลกของ RecomposerInfo แบบอ่านอย่างเดียวสําหรับสังเกตสถานะการคอมโพสิชันที่กําลังดําเนินอยู่ในระหว่างกระบวนการ ใช้ API นี้แทน Recomposer.current() ซึ่งเลิกใช้งานแล้ว (If8ebe)
เปลี่ยนชื่อ DisposableEffectDisposable เป็น DisposaleEffectResult (I3ea68)
เวอร์ชัน 1.0.0-alpha11
28 มกราคม 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha11 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราเลิกใช้งาน onCommit, onDispose และ onActive แล้วเพื่อหันมาใช้ SideEffect และ DisposableEffect API (If760e)
- เราได้เลิกใช้งาน emit() API และ Overload ทั้งหมดแล้ว และเปลี่ยนชื่อเป็น ComposeNode API เหล่านี้เหมือนกัน เพียงแต่มีชื่อต่างกันเพื่อเป็นไปตามรูปแบบการตั้งชื่อของ Compose (I4137b)
- ตอนนี้เราเลิกใช้งาน invalidate และ compositionReference() แล้ว และใช้ currentRecomposeScope และ rememberCompositionReference แทน (I583a8)
RememberObserver จะมาแทนที่ CompositionLifecycleObserver และตอนนี้ CompositionLifecycleObserver เลิกใช้งานแล้ว
RememberObserver
เข้ามาแทนที่CompositionLifecycleObserver
โดยมีความหมายที่แก้ไขแล้วและวิธีการที่เปลี่ยนชื่อ การเปลี่ยนไปใช้ API ใหม่ทำได้แบบอัตโนมัติสําหรับออบเจ็กต์ที่ระบบจะจดจําเพียงครั้งเดียว ซึ่งเป็นแนวทางปฏิบัติที่แนะนําและยังคงเป็นเช่นนั้น อย่างไรก็ตาม หากมีการจดจําการอ้างอิงมากกว่า 1 ครั้งในองค์ประกอบ ระบบจะเรียกใช้onRemembered
สำหรับการอ้างอิงแต่ละรายการที่เรียกใช้onEnter
เพียงครั้งเดียวonEnter
ถูกเรียกใช้หลายครั้งหากมีการใช้ออบเจ็กต์ในองค์ประกอบย่อย เช่นWithConstraints
และScaffold
ทำให้การรับประกันการเรียกใช้onEnter
ครั้งเดียวไม่น่าเชื่อถือและถูกนําออกสําหรับRememberObserver
RememberObserver
เพิ่มonAbandoned
ซึ่งจะเรียกใช้หากระบบแสดงผลอินสแตนซ์RememberObserver
จากคอลแบ็กที่ส่งไปยังremember
แต่ระบบไม่ได้จดจำไว้ในสถานะการคอมโพสิชัน และจะไม่มีการคอลonRemembered
กรณีนี้อาจเกิดขึ้นได้หากข้อยกเว้นสิ้นสุดการคอมโพสิชันก่อนเสร็จสมบูรณ์ หรือระบบทิ้งการคอมโพสิชันเนื่องจากสถานะที่ใช้สร้างการคอมโพสิชันนั้นไม่ทันสมัยอีกต่อไปหรือไม่จําเป็นต้องใช้อีกต่อไป หากอินสแตนซ์ของRememberObserver
ที่ทําตามคําแนะนําแหล่งข้อมูลอ้างอิงเดียวข้างต้นกําลังติดตามแหล่งข้อมูลภายนอก ทั้งonForgotten
และonAbandoned
จะระบุว่าไม่จําเป็นต้องใช้แหล่งข้อมูลนั้นอีกต่อไป หากออบเจ็กต์ติดตามงานที่เริ่มต้นหรือทรัพยากรที่จัดสรรในonRemembered
ระบบจะละเว้นonAbandoned
เนื่องจากระบบจะไม่เรียกใช้หากมีการเรียกใช้onRemembered
(I02c36)อย่าทำเครื่องหมายฟังก์ชัน
collectAsState()
ว่าเป็นแบบแทรก (Ia73e4)
การแก้ไขข้อบกพร่อง
- WithConstraints ได้รับการปรับโฉมใหม่เป็น BoxWithConstraints และย้ายไปอยู่ใน foundation.layout (I9420b, b/173387208)
- ใช้ประโยชน์จาก TestCoroutineDispatcher ในการทดสอบ (I532b6)
เวอร์ชัน 1.0.0-alpha10
13 มกราคม 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha10 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
การจัดโครงสร้างใหม่ของคอมไพเลอร์ภายใน API ช่วยให้สามารถรวมการเปลี่ยนแปลงของโหนดที่สร้างขึ้นจากคอมโพสิชันไว้ในระยะ "ใช้การเปลี่ยนแปลง" ของคอมโพสิชันได้ หลังจากที่ฟังก์ชัน
@Composable
ทั้งหมดทำงานเสร็จแล้วการเปลี่ยนแปลงนี้เป็นการทําให้ลักษณะการทํางานเปลี่ยนแปลงไปซึ่งอาจส่งผลต่อโค้ดแอปพลิเคชัน เนื่องจากโหนดจะใช้ไม่ได้จาก API ภายในและ API ทดลองอีกต่อไปจนกว่าจะมีการใช้การเปลี่ยนแปลง โดยปกติแล้ว ปัญหานี้สามารถแก้ไขได้โดยการล้อมรอบโค้ดที่มี Dependency ดังกล่าวใน
SideEffect
composable เพื่อเลื่อนเวลาการเรียกใช้โค้ดจนกว่าจะสร้างและเริ่มต้นโหนดแล้ว (I018da)
การเปลี่ยนแปลง API
- เพิ่มวิธีติดตามว่าเครื่องมือจัดเรียงใหม่ใช้การเปลี่ยนแปลงหรือไม่ (I1b3e2)
ขยาย [Abstract]ComposeView API เพื่ออนุญาตให้รีไซเคิลมุมมองที่อิงตาม Compose โดยทิ้งการคอมโพสิชันเพื่อสร้างใหม่อีกครั้งในภายหลัง เพิ่ม API สําหรับการติดตั้งและค้นหา Recomposer ระดับหน้าต่าง และ CompositionReferences เพื่อสร้างองค์ประกอบย่อย
เพิ่ม ViewCompositionStrategy สำหรับการกําหนดค่ากลยุทธ์การทิ้งองค์ประกอบของ [Abstract]ComposeViews โดยลักษณะการทํางานเริ่มต้นคือการทิ้งเมื่อหน้าต่างแยกออก (I860ab)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Recomposer แสดงสถานะปัจจุบันของโฟลว์ ซึ่งช่วยให้คุณตรวจสอบกิจกรรมของ Recomposer และกิจกรรมของเอฟเฟกต์ที่เกี่ยวข้องได้ (Ifb2b9)
- ตอนนี้คุณเข้าถึงเหตุการณ์แป้นพิมพ์แบบดั้งเดิมผ่าน keyEvent.nativeKeyEvent ได้แล้ว (I87c57, b/173086397)
เวอร์ชัน 1.0.0-alpha09
16 ธันวาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha09 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
นํา SlotTable, SlotReader และ SlotWriter ออกจาก API สาธารณะแล้ว ก่อนหน้านี้มีการทำเครื่องหมายเป็น InternalComposeAPI ตอนนี้เป็นข้อมูลภายในของข้อบังคับการเขียน
เราได้เพิ่ม CompositionData และ CompositionGroup เข้ามาเพื่อแทนที่ ui-tooling API ที่ใช้ดึงข้อมูลการคอมโพส ข้อมูลเหล่านี้เป็นแบบสาธารณะ แต่ไม่ได้มีไว้เพื่อใช้งานนอก ui-tooling API เนื่องจากให้ข้อมูลที่ยังไม่ได้ประมวลผลซึ่ง ui-tooling API จะตีความ (I31a9c)
ระบบจะไม่ถือว่าคลาส Applier เป็น (Id85b0) อีกต่อไป
อินเทอร์เฟซ
Applier
มีการเปลี่ยนแปลงเพื่อลดความซับซ้อนของการสร้างแผนผังจากล่างขึ้นบนแทนจากบนลงล่างเปลี่ยนชื่อเมธอด
insert()
เป็นinsertTopDown()
แล้วเพิ่มวิธีการใหม่
insertBottomUp()
แล้วตัวใช้จะแทรกโหนดลงในต้นไม้ที่แก้ไขอยู่โดยใช้
insertTopDown()
หรือinsertBottomUp()
ทั้งนี้ขึ้นอยู่กับว่าวิธีใดมีประสิทธิภาพดีกว่าต้นไม้บางต้น เช่น
LayoutNode
และView
จะมีประสิทธิภาพมากกว่ามากหากสร้างจากล่างขึ้นบนแทนจากบนลงล่าง ก่อนที่จะมีการเปลี่ยนแปลงนี้ คุณต้องใช้การแทรกหลายรายการเพื่อติดตั้งใช้งานจากล่างขึ้นบน ซึ่งจะต้องคัดลอกไปยัง Applier ทั้งหมดที่ต้องใช้การสร้างจากล่างขึ้นบนเพื่อประสิทธิภาพ การเปลี่ยนแปลงนี้ทำให้Applier
ลบล้างinsertBottomUp()
เพื่อสร้างต้นไม้จากล่างขึ้นบน และinsertTopDown()
เพื่อสร้างต้นไม้จากบนลงล่าง (Icbdc2)คอมโพซรองรับตัวรับพร็อพเพอร์ตี้ที่ทําการเรียกใช้แบบคอมโพซได้ เราจะยังคงรองรับรูปแบบนี้ แต่ไวยากรณ์สำหรับการประกาศตัวรับพร็อพเพอร์ตี้เป็น @Composable จะเปลี่ยนไป
ไวยากรณ์ที่เลิกใช้งานแล้วซึ่งใช้ทำเช่นนี้คือการกำกับเนื้อหาพร็อพเพอร์ตี้เอง
@Composable val someProperty: Int get() = ...
ไวยากรณ์ที่ถูกต้องสำหรับการดำเนินการนี้คือการทำคำอธิบายประกอบของ getter ของพร็อพเพอร์ตี้
val someProperty: Int @Composable get() = ...
ไวยากรณ์ทั้ง 2 รูปแบบจะใช้งานได้อีกระยะหนึ่ง แต่ไวยากรณ์ที่เลิกใช้งานก่อนหน้านี้จะกลายเป็นข้อผิดพลาดในการคอมไพล์ในที่สุด (Id9197)
การแก้ไขข้อบกพร่อง
- AndroidOwner เปลี่ยนเป็นภายใน (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) เปลี่ยนเป็นแบบภายใน (Id724a)
เวอร์ชัน 1.0.0-alpha08
2 ธันวาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha08 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มการตรวจสอบ Lint สําหรับการตั้งชื่อและตําแหน่งพารามิเตอร์ Lambda ที่คอมโพสิเบิล เพื่อตรวจสอบความสอดคล้องตามหลักเกณฑ์ของ Compose
รวมถึงย้ายข้อมูล API บางรายการที่ใช้
children
เป็นชื่อของ lambda ต่อท้ายเป็นcontent
ตามการตรวจสอบและคำแนะนำของ Lint (Iec48e) - Recomposer ไม่รับ EmbeddingContext อีกต่อไป ระบบจะรับข้อมูลที่จำเป็นสำหรับการกำหนดเวลาจาก effectCoroutineContext FrameManager เลิกใช้งานแล้ว การผสานรวมแพลตฟอร์มควรเริ่มต้นการจัดการสแนปชอตทั่วโลกของตนเอง (I02369)
- เปลี่ยนชื่อฟังก์ชัน RestorableStateHolder.withRestorableState เป็น RestorableStateProvider (I66640)
การแก้ไขข้อบกพร่อง
- เลิกใช้งานแอมเบียนท์ที่มีชื่อต่อท้ายด้วย
Ambient
และแทนที่ด้วยพร็อพเพอร์ตี้ใหม่ที่ขึ้นต้นด้วยแอมเบียนท์ตามหลักเกณฑ์อื่นๆ ของแอมเบียนท์และ Compose API (I33440) - นําโมดูล ui-test เก่าและสตับออก (I3a7cb)
เวอร์ชัน 1.0.0-alpha07
11 พฤศจิกายน 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha07 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การเปลี่ยนแปลง API
- เราเลิกใช้งานคำอธิบายประกอบ
@UnionType
แล้ว (I57cde) - มีการเพิ่ม provideDefault เพื่อเป็นทางเลือกในการระบุค่าแอมเบียนท์ และสามารถใช้เพื่อระบุค่าแอมเบียนท์ที่จะตั้งค่าก็ต่อเมื่อไม่มีค่าแอมเบียนท์ที่ระบุไว้แล้วเท่านั้น (Id6635, b/171024925)
- เปลี่ยนชื่อ LaunchedTask เป็น LaunchedEffect เพื่อให้สอดคล้องกับ API ของ SideEffect และ DisposableEffect ไม่อนุญาตให้ใช้ LaunchedEffect ที่ไม่มีพารามิเตอร์เรื่องเพื่อส่งเสริมแนวทางปฏิบัติแนะนำ (Ifd3d4)
- ตอนนี้ Applier มีการเรียกกลับ onBeginChanges/onEndChanges ที่เรียกใช้เมื่อ Composer เริ่ม/เสร็จสิ้นการใช้การเปลี่ยนแปลงกับต้นไม้ ซึ่งอาจใช้สำหรับการจัดการทรัพยากรแบบเป็นกลุ่มหากจำเป็น (Icf476)
- ตอนนี้ Recomposer ต้องใช้ CoroutineContext ในการสร้าง (Ic4610)
- การเปลี่ยนแปลงการใช้งาน SlotTable ภายในซึ่งไม่ควรส่งผลต่อ API สาธารณะ (If9828)
- นำอะแดปเตอร์ rxjava2 ที่เลิกใช้งานซึ่งไม่ใช้ค่าเริ่มต้นออกแล้ว (Idb72f)
การแก้ไขข้อบกพร่อง
- เราเลิกใช้งาน foundation.Text แล้วและแทนที่ด้วย material.Text สำหรับ API ข้อความพื้นฐานที่ไม่แสดงความคิดเห็นซึ่งไม่ใช้ค่าจากธีม โปรดดู androidx.compose.foundation.BasicText (If64cb)
- เลิกใช้งาน BaseTextField แล้ว ให้ใช้ BasicTextField แทน (I896eb)
- ย้ายสัญลักษณ์ที่เกี่ยวข้องกับเลย์เอาต์หลายรายการจาก androidx.compose.ui ไปยัง androidx.compose.layout.ui แล้ว (I0fa98, b/170475424)
การมีส่วนร่วมจากภายนอก
- เพิ่มโมดูล
runtime-rxjava3
สำหรับองค์ประกอบ คล้ายกับruntime-rxjava2
(I02cbf)
เวอร์ชัน 1.0.0-alpha06
28 ตุลาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Recomposer เป็น CompositionReference และเป็นองค์ประกอบหลักที่ถูกต้อง ตอนนี้คุณต้องใช้ Explicit Recomposer ในตำแหน่งที่น้อยลง (I4036f)
- เพิ่ม API ของ DisposableEffect คู่กับ SideEffect ซึ่งทำหน้าที่เป็น onCommit-with-params แต่ต้องมี onDispose
- เพิ่ม rememberUpdatedState API เพื่อเผยแพร่ข้อมูลจากการจัดเรียงใหม่ไปยังกระบวนการต่อเนื่องหรือที่ทำงานอยู่เป็นเวลานาน เช่น DisposableEffects หรือ LaunchedTasks
- (Id50b9)
- ตอนนี้ MutableVector ใช้ RandomAccess แล้ว (I85d73, b/170461551)
- เพิ่มคอมโพสิชัน SideEffect สำหรับการใช้ผลข้างเคียงของคอมโพสิชันกับออบเจ็กต์ที่คอมโพสิชันจัดการ SideEffect มีไว้เพื่อแทนที่คอมโพสิชัน onCommit (Ia77c2)
- API ใหม่สำหรับทดสอบ RestorableStateHolder ซึ่งช่วยให้บันทึกสถานะที่กําหนดด้วย [savedInstanceState] และ [rememberSavedInstanceState] สําหรับซับต้นไม้ได้ก่อนที่จะทิ้ง เพื่อให้สามารถคอมโพสิชันกลับได้อีกครั้งในครั้งถัดไปด้วยสถานะที่กู้คืน (I66884, b/166586419)
การแก้ไขข้อบกพร่อง
- เปิดใช้ทรานซิชันใน ComposeTestRule นำตัวเลือกในการเปิดใช้เคอร์เซอร์ที่กะพริบออกจาก ComposeTestRule (If0de3)
เวอร์ชัน 1.0.0-alpha05
14 ตุลาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- Modifier.pointerInput ที่อยู่ระหว่างการทดสอบซึ่งระงับตัวแก้ไขอินพุต (Ia77d2)
- ประสิทธิภาพการเลื่อนของ LazyColumn/Row ได้รับการปรับปรุงโดยทำงานน้อยลงในองค์ประกอบย่อยทุกครั้งที่เลื่อน เพิ่มเมธอด hasInvalidations() ใหม่สำหรับคลาส Composition เปลี่ยนชื่อเมธอด hasPendingChanges() จาก Recomposer เป็น hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- เพิ่ม produceState API สําหรับการเริ่มโคโรทีนจากคอมโพสิชันซึ่งอัปเดตค่า
State<T>
รายการเดียวเมื่อเวลาผ่านไป (Id4a57) - เปลี่ยนชื่อ launchInComposition เป็น LaunchedTask เพื่อให้สอดคล้องกับหลักเกณฑ์ Compose API (I99a8e)
- ตอนนี้ลําดับการเรียกใช้ place() ในเลย์เอาต์ที่กําหนดเองจะกําหนดลําดับการวาดสําหรับองค์ประกอบย่อย (Ibc9f6)
เวอร์ชัน 1.0.0-alpha04
1 ตุลาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม OwnerScope เพื่ออนุญาตให้รวบรวมขอบเขตการสังเกตเลย์เอาต์และการวาดเมื่อไม่มีผลแล้ว (Ic4cf8)
- เพิ่ม derivedStateOf API เพื่อสร้างออบเจ็กต์สถานะตามการคำนวณที่อาจอ่าน (และดึงมาจาก) ออบเจ็กต์สถานะอื่นๆ (If758b)
- เพิ่ม TestOnly API สําหรับ SnapshotStateObserver (I6e2a9)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน foundation.Box แล้ว โปรดใช้ foundation.layout.Box แทน (Ie5950, b/167680279)
เวอร์ชัน 1.0.0-alpha03
16 กันยายน 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
CompositionCoroutineScope
ไม่ได้ติดตั้งใช้งานอีกต่อไปMonotonicFrameClock
ผู้เรียกใช้withFrameNanos
ควรนําเข้าฟังก์ชันระดับบนสุดอย่างชัดเจน (Icb642, b/166778123)
การแก้ไขข้อบกพร่อง
- เราได้เลิกใช้งานฟังก์ชันการทดสอบส่วนกลาง เช่น
onNode
หรือwaitForIdle
แล้ว โปรดเปลี่ยนไปใช้ฟังก์ชันใหม่ที่กำหนดไว้ใน ComposeTestRule (I7f45a) launchInComposition
ไม่เปิด Coroutine ที่ไม่ได้ส่งแล้วอีกต่อไป (Ief6af, b/166486000)
เวอร์ชัน 1.0.0-alpha02
2 กันยายน 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
snapshotFlow
และwithMutableSnapshot
API เพื่อรับและสร้างการเปลี่ยนแปลงข้อมูลภาพรวม (I3e722) รูปแบบการเรียกฟังก์ชันคอมโพสิเบิลมีการเปลี่ยนแปลง นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ คุณต้องคอมไพล์ไลบรารีทั้งหมดอีกครั้งเพื่อให้ใช้งานกับปลั๊กอินคอมไพเลอร์คอมโพซนี้เวอร์ชันนี้ได้
การเปลี่ยนแปลงนี้จะไม่ทำให้เกิดการเปลี่ยนแปลงระดับแหล่งที่มาที่ทำให้เกิดข้อขัดข้อง เนื่องจาก API เพียงรายการเดียวที่มีการเปลี่ยนแปลงคือ API คอมไพเลอร์ที่เลือกใช้อย่างชัดเจน (I7afd2, b/158123185)
นําวิธีการกําหนดเวลาออกจาก EmbeddingContext (I7b9be)
เลิกใช้งาน onPreCommit แล้ว ตอนนี้ onCommit มีลักษณะการทํางานของ onPreCommit
ตอนนี้ onCommit และ onActive จะทํางานในเฟรม Choreographer เดียวกับที่คอมโพสิชันมีการเปลี่ยนแปลงที่ commit ไว้ ไม่ใช่ที่จุดเริ่มต้นของเฟรม Choreographer ถัดไป (I70403)
เวอร์ชัน 1.0.0-alpha01
26 สิงหาคม 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha01 มีการคอมมิตเหล่านี้
เวอร์ชัน 0.1.0-dev
เวอร์ชัน 0.1.0-dev17
19 สิงหาคม 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
ได้รับการปล่อยแล้ว เวอร์ชัน 0.1.0-dev17 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้การระบุข้อมูลที่กำหนดเองสามารถประกาศว่าตัวตั้งค่าอย่างน้อย 1 รายการสามารถข้ามและคอมโพสิชันใหม่ได้โดยไม่เกี่ยวข้องกับการระบุข้อมูล (Ibbd13)
นำการเรียก FrameManager ที่เลิกใช้งานออกแล้ว
มีการเปลี่ยนแปลง API การคอมโพสิทภายในเพื่อลดปริมาณการเรียกใช้ทรัพยากรเพิ่มเติมในการติดตามออบเจ็กต์สถานะ เช่น
mutableStateof()
(I80ba6)ตอนนี้เราเลิกใช้งานคอมโพสิเบิล
state { ... }
แล้วเพื่อหันไปใช้การเรียกใช้remember { mutableStateOf(...) }
อย่างชัดแจ้งเพื่อความชัดเจน ซึ่งจะลดจำนวน API โดยรวมและจำนวนแนวคิดสำหรับการจัดการสถานะ และตรงกับรูปแบบby mutableStateOf()
สำหรับการมอบสิทธิ์พร็อพเพอร์ตี้ของคลาส (Ia5727)ตอนนี้ Flow.collectAsState จะกำหนดตัวจัดเตรียมเริ่มต้นจากคอมโพสิชันเองแทนที่จะใช้ Dispatchers.Main เป็นค่าเริ่มต้น (I9c1d9)
แก้ไขข้อขัดข้องเมื่อใช้สิ่งที่บันทึกสถานะภายในวง for ตอนนี้ระบบอนุญาตให้ใช้คีย์เดียวกันใน savedInstanceState() แล้ว ตอนนี้ API ของ UiSavedStateRegistry ปรับให้เป็นไปตามข้อกำหนดใหม่นี้ (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
การแก้ไขข้อบกพร่อง
emitView
เลิกใช้งานแล้ว ใช้AndroidView
แทนหากเป็นไปได้สำหรับการส่งออกมุมมองภายใน Compose โปรดทราบว่าระบบจะไม่รองรับการคอมโพสิชัน View และ ViewGroup โดยตรงในอนาคต เว้นแต่ว่าองค์ประกอบเหล่านี้จะเป็นใบไม้ในต้นไม้คอมโพสิชัน ซึ่งในกรณีนี้จะใช้ AndroidView ได้ (I29b1e, b/163871221)
เวอร์ชัน 0.1.0-dev16
5 สิงหาคม 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
ได้รับการปล่อยแล้ว เวอร์ชัน 0.1.0-dev16 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
นโยบายการกลายพันธุ์เริ่มต้นของ
mutableStateOf()
,ambientOf()
และsavedInstanceStateOf()
เปลี่ยนเป็นstructuralEqualityPolicy()
แทนreferentialEqualityPolicy()
ค่าเริ่มต้นในการพิจารณาว่าค่าใหม่ที่กําหนดให้กับอินสแตนซ์
mutableStateOf()
ถือว่าเป็นการเปลี่ยนแปลงหรือไม่ ตอนนี้จะเปลี่ยนไปใช้==
แทนการใช้===
ดู https://kotlinlang.org/docs/reference/equality.html
ambientOf()
และsavedInstanceStateOf()
ใช้mutableStateOf()
ในการติดตั้งใช้งาน จึงมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับmutableStateOf()
การใช้ความเท่าเทียมเชิงโครงสร้างจะตรงกับความต้องการของนักพัฒนาแอปมากกว่า
ตัวอย่างเช่น
val state = mutableStateOf(1f)
ตามด้วย
state.value = 1f
จะถือว่าไม่มีการเปลี่ยนแปลง
state
อีกต่อไป และการใช้state
ระหว่างการประพันธ์เพลงจะไม่จำเป็นต้องเรียบเรียงใหม่อีกต่อไปการเปลี่ยนแปลงนี้ถือเป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง แต่ในกรณีส่วนใหญ่ (เช่น เมื่อใช้คลาสที่ไม่ได้ลบล้าง
equals()
) การเปลี่ยนแปลงนี้จะไม่มีผลกับแอปพลิเคชันชั้นเรียนที่ลบล้าง
equals()
เช่น ชั้นเรียนdata
อาจมีประสิทธิภาพลดลงเนื่องจากระบบจะเรียกใช้เมธอดequals()
ของชั้นเรียนเหล่านั้นโดยค่าเริ่มต้นเมื่อมอบหมายให้กับmutableStateOf()
คุณคืนค่าลักษณะการทํางานก่อนหน้าได้โดยการเพิ่มพารามิเตอร์นโยบาย
policy = referentialEqualityPolicy()
ลงในคําเรียกmutableStateOf()
,ambientOf()
และsavedInstanceStateOf()
(Ic21a7)ตอนนี้
Row
และColumn
เป็นฟังก์ชันอินไลน์ที่ช่วยลดค่าใช้จ่ายในการเรียกใช้อย่างมีนัยสำคัญ (I75c10)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน setViewContent แล้ว ควรใช้ setContent แทน (I7e497, b/160335130)
เพิ่ม MonotonicFrameAnimationClock ที่ช่วยให้คุณใช้ MonotonicFrameClock เป็น AnimationClockObservable เพื่อเชื่อมช่องว่างระหว่างนาฬิกาแบบโคโริวทีนใหม่กับ API ที่ยังคงใช้นาฬิกาแบบการเรียกกลับแบบเก่า
ตอนนี้ MonotonicFrameClock ที่เทียบเท่า ManualAnimationClock เปลี่ยนชื่อเป็น ManualFrameClock แล้ว (I111c7, b/161247083)
Modifier.stateDraggable ได้รับการปรับโฉมใหม่ทั้งหมดและเปลี่ยนชื่อเป็น Modifier.swipeable เราได้เปิดตัวคลาส SwipeableState ใหม่ และปรับโครงสร้าง DrawerState และ BottomDrawerState ให้รับค่ามาจากคลาสดังกล่าว [Modal/Bottom]DrawerLayout ไม่รับพารามิเตอร์ onStateChange อีกต่อไป (I72332, b/148023068)
เลิกใช้งาน Modifier.plus แล้ว ให้ใช้ Modifier.then แทน "Then" มีสัญญาณการจัดเรียงที่ชัดเจนกว่า ทั้งยังห้ามไม่ให้พิมพ์
Modifier.padding().background() + anotherModifier
ซึ่งทำให้ลำดับคำขาดตอนกลางและอ่านยากขึ้น (Iedd58, b/161529964)เพิ่ม SubcomposeLayout แล้ว องค์ประกอบนี้เป็นองค์ประกอบพื้นฐานระดับล่างที่อนุญาตให้คอมโพสิชันย่อยในระหว่างการวัดได้หากเราต้องการใช้ค่าบางอย่างที่พร้อมใช้งานในภายหลังระหว่างการวัดสำหรับองค์ประกอบย่อย เช่น ไม่ได้ใช้ WithConstraints โดยใช้ SubcomposeLayout (I25cc8)
เปลี่ยนชื่อ Material FilledTextField เป็น TextField และเปลี่ยนชื่อ TextField พื้นฐานเป็น BaseTextField เพื่อให้ค้นพบและใช้งาน API ที่ต้องการได้ง่ายที่สุด (Ia6242, b/155482676)
เปลี่ยนชื่อ Modifier.drawBackground เป็น Modifier.background (I13677)
เวอร์ชัน 0.1.0-dev15
22 กรกฎาคม 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
ได้รับการปล่อยแล้ว เวอร์ชัน 0.1.0-dev15 มีการคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependencies
- หากต้องการใช้ Compose เวอร์ชัน
0.1.0-dev15
คุณจะต้องอัปเดต Dependency ตามข้อมูลโค้ดใหม่ที่แสดงด้านบนในการประกาศ Dependency
การเปลี่ยนแปลง API
เลิกใช้งานคำอธิบายประกอบ
@Model
แล้ว ใช้ state และ mutableStateOf แทน เราตัดสินใจเลิกใช้งานฟีเจอร์นี้หลังจากได้หารือกันอย่างรอบคอบแล้วเหตุผล
โดยเหตุผลประกอบอาจรวมถึงแต่ไม่จํากัดเพียงรายการต่อไปนี้
- ลดจำนวน API และแนวคิดที่เราจำเป็นต้องสอน
- สอดคล้องกับชุดเครื่องมืออื่นๆ ที่เปรียบเทียบได้ (Swift UI, React, Flutter) มากขึ้น
- ผลการตัดสินที่ย้อนกลับได้ เราสามารถนำ
@Model
กลับมาใช้งานได้ในภายหลัง - นำการใช้งานเฉพาะกรณีและคำถามที่ตอบได้ยากเกี่ยวกับการกำหนดค่า
@Model
ออกเนื่องจากเป็นสิ่งที่เราต้องจัดการ @Model
data class, equals, hashcode ฯลฯ- ฉันจะทําให้พร็อพเพอร์ตี้บางรายการ "สังเกต" และพร็อพเพอร์ตี้อื่นๆ ไม่สังเกตได้อย่างไร
- ฉันจะระบุความเท่าเทียมเชิงโครงสร้างเทียบกับความเท่าเทียมเชิงอ้างอิงเพื่อใช้ในการสังเกตได้อย่างไร
- ลด "ความมหัศจรรย์" ในระบบ ช่วยลดโอกาสที่ผู้ใช้จะคิดว่าระบบฉลาดกว่าที่เป็น (เช่น รู้ว่าต้องดำเนินการอย่างไรกับรายการ)
- ทําให้รายละเอียดของการสังเกตใช้งานง่ายขึ้น
- ปรับปรุงความสามารถในการเปลี่ยนรูปแบบจากตัวแปร -> พร็อพเพอร์ตี้ในคลาส
- อาจเปิดโอกาสให้ทําการเพิ่มประสิทธิภาพที่เจาะจงรัฐด้วยตนเอง
- สอดคล้องกับระบบนิเวศส่วนอื่นๆ มากขึ้นและลดความคลุมเครือเกี่ยวกับ "สถานะที่เปลี่ยนแปลงไม่ได้" หรือ "การยอมรับสถานะที่เปลี่ยนแปลงได้"
หมายเหตุการย้ายข้อมูล
การใช้งาน
@Model
ที่มีอยู่เกือบทั้งหมดจะเปลี่ยนรูปแบบได้ง่ายๆ ใน 2 วิธี ตัวอย่างด้านล่างมีคลาส@Model
ที่มีพร็อพเพอร์ตี้ 2 รายการเพื่อใช้เป็นตัวอย่างเท่านั้น และมีการใช้คลาสดังกล่าวในคอมโพสิเบิล@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
ทางเลือกที่ 1: ใช้
State<OriginalClass>
และสร้างสำเนาแนวทางนี้ทำได้ง่ายขึ้นด้วยคลาสข้อมูลของ Kotlin โดยพื้นฐานแล้ว ให้เปลี่ยนพร็อพเพอร์ตี้
var
ทั้งหมดก่อนหน้านี้ให้เป็นพร็อพเพอร์ตี้val
ของคลาสข้อมูล จากนั้นใช้state
แทนremember
และกำหนดค่าสถานะให้กับสำเนาที่โคลนจากต้นฉบับโดยใช้เมธอดcopy(...)
ที่สะดวกของคลาสข้อมูลโปรดทราบว่าแนวทางนี้จะได้ผลก็ต่อเมื่อมีการดัดแปลงคลาสนั้นในขอบเขตเดียวกับที่สร้างอินสแตนซ์
State
เท่านั้น หากคลาสมีการกลายพันธุ์ภายในตัวเองนอกขอบเขตการใช้งาน และคุณอาศัยการสังเกตการณ์นั้น คุณควรใช้แนวทางถัดไปdata class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
วิธีที่ 2: ใช้ mutableStateOf และตัวรับพร็อพเพอร์ตี้
แนวทางนี้ทำได้ง่ายขึ้นด้วยตัวดำเนินการแทนพร็อพเพอร์ตี้ของ Kotlin และ
mutableStateOf
API ซึ่งช่วยให้คุณสร้างอินสแตนซ์ MutableState นอกการคอมโพสิชันได้ โดยพื้นฐานแล้ว ให้แทนที่พร็อพเพอร์ตี้var
ทั้งหมดของคลาสเดิมด้วยพร็อพเพอร์ตี้var
ที่มีmutableStateOf
เป็นตัวแทนพร็อพเพอร์ตี้ ข้อดีคือการใช้งานคลาสจะไม่เปลี่ยนแปลงเลย มีเพียงการใช้งานภายในเท่านั้น อย่างไรก็ตาม ลักษณะการทํางานจะไม่เหมือนกับตัวอย่างเดิมทั้งหมด เนื่องจากตอนนี้ระบบจะสังเกต/ติดตามพร็อพเพอร์ตี้แต่ละรายการแยกกัน ดังนั้นการคอมโพสิชันใหม่ที่คุณเห็นหลังจากการรีแฟกทอริงนี้อาจแคบลง (ซึ่งเป็นเรื่องดี)class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
เปลี่ยนกลยุทธ์การสร้างโค้ดของคอมไพเลอร์ Compose ก่อนการเปลี่ยนแปลงนี้ คอมไพเลอร์คอมโพสิทจะเปลี่ยนการเรียกใช้เป็นฟังก์ชันคอมโพสิท การเปลี่ยนแปลงนี้ทำให้ตอนนี้เราเปลี่ยนรูปแบบเนื้อหาของฟังก์ชันคอมโพสิเบิลและปล่อยตำแหน่งการเรียกให้ไม่เปลี่ยนแปลง (ส่วนใหญ่)
ซึ่งหมายความว่าตรรกะส่วนใหญ่ที่สื่อสารกับรันไทม์คอมโพซจะเริ่มต้นที่ส่วนเนื้อหาของฟังก์ชันแทนที่จะเป็นตำแหน่งการเรียกใช้
การเปลี่ยนแปลงนี้ควรเป็นการเปลี่ยนแปลงที่เข้ากันได้กับแหล่งที่มาสำหรับการใช้งานการคอมโพสิททั้งหมด ผู้ใช้ส่วนใหญ่ของเครื่องมือเขียนไม่ควรต้องอัปเดตโค้ดใดๆ จากการเปลี่ยนแปลงนี้
ในการรองรับการทำงานนี้ ลายเซ็น JVM ของฟังก์ชันคอมโพสิเบิลทั้งหมดจึงมีการเปลี่ยนแปลง ฟังก์ชันคอมโพสิเบิลที่ยอมรับพารามิเตอร์เดียวจะเปลี่ยนรูปแบบเป็นฟังก์ชันที่ยอมรับพารามิเตอร์ 3 รายการ โดยพารามิเตอร์เพิ่มเติมคือคอมโพเซอร์ ซึ่งเป็นจำนวนเต็ม "คีย์" ซึ่งเป็นจำนวนเต็มบิตมาสก์ที่ใช้เพื่อเผยแพร่ข้อมูลเมตาผ่านการเรียก
ตอนนี้ Compose ยังเปลี่ยนอาร์กิวเมนต์เริ่มต้นเป็นฟังก์ชันที่คอมโพสิเบิลได้ด้วย โดยดำเนินการนี้โดยไม่เพิ่มการโอเวอร์โหลดเริ่มต้นสังเคราะห์เพิ่มเติมของฟังก์ชันเอง ดังนั้นการเปลี่ยนแปลงนี้จะทำให้มีการกำหนดฟังก์ชันน้อยลง
การเปลี่ยนแปลงพฤติกรรมที่ทราบซึ่งเกิดจากการเปลี่ยนแปลงนี้
- การโทรบางสายจะข้ามไปโดยไม่แสดงในตำแหน่งที่ควรจะแสดงก่อนหน้านี้
- ตอนนี้ระบบสมัครใช้บริการและจัดการนิพจน์แบบคอมโพสิเบิลในนิพจน์อาร์กิวเมนต์เริ่มต้นอย่างถูกต้องแล้ว
งานนี้มีการเพิ่มประสิทธิภาพบางอย่างดังนี้ 1. ระบบจะเผยแพร่ผลลัพธ์ของการเปรียบเทียบพารามิเตอร์ผ่านกราฟการเรียกไปยังฟังก์ชันอื่นๆ ที่คอมโพสิเบิล ซึ่งจะส่งผลให้มีจำนวนการเปรียบเทียบน้อยลงเมื่อรันไทม์ ลดขนาดตารางสล็อต และข้ามฟังก์ชันคอมโพสิเบิลได้มากขึ้นซึ่งก่อนหน้านี้ไม่ได้ข้าม 2. ระบบจะไม่เปรียบเทียบหรือจัดเก็บพารามิเตอร์ที่พิจารณาว่า "คงที่" ไว้ที่รันไทม์อีกต่อไป ซึ่งจะช่วยลดจํานวนการเปรียบเทียบและขนาดตารางสล็อต 3. ระบบจะใช้โครงสร้างการควบคุมการไหลของเนื้อหาของฟังก์ชันเพื่อลดจำนวนกลุ่มที่สร้างขึ้น ซึ่งจะช่วยลดขนาดตารางสล็อตและทำให้รันไทม์ทำงานน้อยลง 4. ระบบจะไม่รวมพารามิเตอร์การส่งและตัวรับที่ไม่ได้ใช้ในฟังก์ชันไว้ในการพิจารณาความสามารถในการข้ามฟังก์ชัน หากไม่ได้ใช้พารามิเตอร์ดังกล่าวภายในเนื้อหาของฟังก์ชัน
การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องส่วนใหญ่มีไว้สำหรับ API ที่คอมไพเลอร์กำหนดเป้าหมายโดยตรง และการใช้งาน compose ตามปกติจะไม่ได้รับผลกระทบ ดังนี้ 1. นํา Composer::startExpr ออกแล้ว 2. นํา Composer::endExpr ออกแล้ว 3. Composer::call ถูกเลิกใช้งานแล้ว 4. นำการโอเวอร์โหลดที่ไม่ใช่ vararg ของ
key
ออกแล้ว ตั้งแต่นี้ไปให้ใช้เวอร์ชันvararg
5. เลิกใช้งานคำอธิบายประกอบ Pivotal แล้ว ให้ใช้key
แทน 6. เปลี่ยน ScopeUpdateScope::updateScope ให้คาดหวัง Function3 แทน Function1 7. อัปเดต restartableFunction และ restartableFunctionN ให้รวมพารามิเตอร์เวลาคอมไพล์เพิ่มเติม (I60756, b/143464846)เพิ่ม sortWith และ removeRange ลงใน MutableVector (Icccf7)
เพิ่มการใช้งานเมธอดเริ่มต้นสําหรับ CompositionLifecycleObserver (I24289)
ตอนนี้ Applier ต้องใช้เมธอด clear() ในการทิ้งคอมโพสิชัน (Ibe697)
เพิ่ม asMutableList() ลงใน MutableVector เพื่ออนุญาตให้ส่งไปยัง API สาธารณะได้โดยไม่ต้องคัดลอกรายการทั้งหมด (I298df)
เพิ่ม rememberCoroutineScope() เพื่อรับ CoroutineScope ที่มีการจัดการในคอมโพสิชันสำหรับการเปิดใช้งานงานเพื่อตอบสนองต่อเหตุการณ์ (I0e264)
MutableVector เป็นคอลเล็กชันใหม่ที่ไม่ได้ใช้อินเทอร์เฟซ Collection มาตรฐาน ชุดค่าผสมนี้ให้ความเร็วเหนือกว่าข้อกำหนดอื่นๆ และมีไว้เพื่อการใช้งานภายในเท่านั้น (I8ebd6)
นำ
StableMutableList
และStableMutableMap
ออกชั่วคราวเพื่อหลีกเลี่ยงปัญหาในเวอร์ชันของ Kotlin Compose ที่ต้องใช้ เราจะเปิดตัวอินเทอร์เฟซเหล่านี้อีกครั้งเมื่ออัปเดต Compose เป็น Kotlin เวอร์ชันที่ไม่มีปัญหาขณะนี้
SnapshotStateList
และSnapshotStateMap
เป็นช่องสาธารณะแล้ว แต่เราจะเลิกใช้งานเมื่อกู้คืนStableMutableList
และStableMutableMap
แล้ว (Ia7769)เพิ่มฟังก์ชัน withFrameNanos ระดับบนสุดสำหรับเวลาของภาพเคลื่อนไหว (Ie34c5)
เราเลิกใช้งานคำอธิบายประกอบ @Untracked แล้ว แทนที่ด้วย @ComposableContract(tracked=false) (Id211e)
เราได้เปลี่ยนชื่อ RestartableFunction และ API ที่เกี่ยวข้องเป็น ComposableLambda เป็นต้น โดยคอมไพเลอร์จะกำหนดเป้าหมาย API เหล่านี้เท่านั้น ดังนั้นการเปลี่ยนแปลงนี้จึงไม่ควรส่งผลต่อความเข้ากันได้ในระดับซอร์สโค้ดตามปกติ การเปลี่ยนชื่อมีจุดประสงค์หลักเพื่อสื่อสารว่าคลาสนี้มีประโยชน์อย่างไรเมื่อแสดงในสแต็กเทรซ (I7eb25)
คําอธิบายประกอบ @Composable ใช้กับคลาสไม่ได้อีกต่อไป (Ia5f02)
Ambient<T>
เปลี่ยนเป็น @Stable แทน @Immutable แล้ว (I0b4bb)ก่อนการเปลี่ยนแปลงนี้ ปลั๊กอินคอมไพเลอร์คอมโพสิทจะขัดจังหวะการเรียกตัวสร้างคอนสตรัคเตอร์ภายในฟังก์ชัน @Composable อย่างไม่ง่ายดายหากมี (I5205a, b/158123804)
คอมโพสิชัน "จัดองค์ประกอบใหม่" ไม่ได้เป็นนามธรรมที่มีประโยชน์อีกต่อไป การคอมโพสิชันใหม่ส่วนใหญ่ควรเกิดขึ้นจากการกำหนด MutableState สําหรับรายการอื่นๆ นอกเหนือจากนี้ เราขอแนะนําให้ใช้ฟังก์ชัน
invalidate
เพื่อทริกเกอร์การจัดองค์ประกอบใหม่ของขอบเขตปัจจุบัน (Ifc992)Observe ไม่ได้เป็นนามธรรมที่มีประโยชน์อีกต่อไป หากต้องการทำซ้ำ คุณสามารถทําซ้ำการใช้งานได้โดยสร้างฟังก์ชันแบบคอมโพสิเบิลที่จะเรียกใช้พารามิเตอร์ LAMBDA แบบคอมโพสิเบิล เช่น
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct ถูกเลิกใช้งานแล้ว โปรดใช้ @ComposableContract(restartable=false) (If4708)
เพิ่มอะแดปเตอร์สําหรับ StateFlow ที่เพิ่งเปิดตัว ซึ่งช่วยให้ป้อนค่าเริ่มต้นล่วงหน้าได้เพื่อให้สถานะที่แสดงผลไม่ใช่ค่า Null (I61dd8, b/156233789)
เพิ่มอะแดปเตอร์สำหรับ Flow ตัวอย่างการใช้งาน: val value by flow.collectAsState() (If2198, b/153375923)
[Mutable]ย้ายโอเปอเรเตอร์ตัวรับมอบสิทธิ์พร็อพเพอร์ตี้สถานะไปยังส่วนขยายเพื่อรองรับการเพิ่มประสิทธิภาพตัวรับมอบสิทธิ์พร็อพเพอร์ตี้ของ Kotlin 1.4 ผู้โทรต้องเพิ่มการนําเข้าเพื่อใช้
by state { ... }
หรือby mutableStateOf(...)
ต่อ (I5312c)ย้าย androidx.compose.ViewComposer ไปยัง androidx.ui.node.UiComposerแล้ว และนํา androidx.compose.Emittable ออกแล้ว เนื่องจากมี ComponentNode อยู่แล้ว androidx.compose.ViewAdapters ถูกนําออกแล้ว กรณีการใช้งานเหล่านี้ไม่รองรับแล้ว เลิกใช้งาน Compose.composeInto แล้ว ใช้
setContent
หรือsetViewContent
แทน เลิกใช้งาน Compose.disposeComposition แล้ว ใช้เมธอดdispose
ในComposition
ที่setContent
แสดงผลแทน androidx.compose.Compose.subcomposeInto ย้ายไปที่ androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt เปลี่ยนชื่อเป็น ComponentNode#insertAt ComponentNode#emitRemoveAt เปลี่ยนชื่อเป็น ComponentNode#removeAt ComponentNode#emitMode เปลี่ยนชื่อเป็น ComponentNode#move (Idef00)อัปเดต Flag
ComposeFlags.COMPOSER_PARAM
เป็นtrue
ซึ่งจะเปลี่ยนกลยุทธ์การสร้างโค้ดสำหรับปลั๊กอินการเขียน ในระดับสูง การดำเนินการนี้จะทําให้ระบบสร้างฟังก์ชัน @Composable ที่มีพารามิเตอร์สังเคราะห์เพิ่มเติม ซึ่งจะส่งผ่านไปยังการเรียก @Composable ถัดไปเพื่อให้รันไทม์จัดการการดําเนินการได้อย่างเหมาะสม การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่สำคัญซึ่งจะทำให้เกิดข้อขัดข้องในไบนารี อย่างไรก็ตาม การเปลี่ยนแปลงนี้ควรรักษาความเข้ากันได้ระดับซอร์สโค้ดในการใช้งานคอมโพซทั้งหมดที่ได้รับอนุญาต (I7971c)การเปลี่ยนแปลงที่สำคัญใน Ambients API ดูรายละเอียดได้ในบันทึกและเอกสารประกอบของ
Ambient<T>
(I4c7ee, b/143769776)เพิ่ม ui-livedata - อาร์ติแฟกต์ใหม่ที่มีอะแดปเตอร์สําหรับ LiveData ตัวอย่างการใช้งาน: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
เราเลิกใช้งานอะแดปเตอร์ Rx ที่ไม่มีค่าเริ่มต้นที่ชัดเจนแล้ว การใช้ค่า Null ไม่ใช่ค่าเริ่มต้นที่ดีที่สุดเสมอไป เช่น เมื่อคุณมี List คุณควรเริ่มต้นด้วย emptyList() หรือค่าเริ่มต้นอื่นๆ ที่สมเหตุสมผล (I00025, b/161348384)
เพิ่ม ui-rxjava2 - อาร์ติแฟกต์ใหม่ที่มีอะแดปเตอร์สําหรับ RxJava2 ตัวอย่างการใช้งาน: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
ตอนนี้
savedInstanceState()
ใช้กับประเภทที่อนุญาตค่า Null ได้แล้ว (I6847f, b/153532190)listSaver() และ mapSaver() ใหม่เพื่อเขียนออบเจ็กต์ Saver ที่กําหนดเองได้ง่ายขึ้น (I8cf68, b/152331508)
ฟังก์ชันใหม่: savedInstanceState() และ rememberSavedInstanceState() ซึ่งคล้ายกับ state() และ remember() แต่มีการรองรับสถานะอินสแตนซ์ที่บันทึกไว้ในตัว (If1987, b/152025209)
การแก้ไขข้อบกพร่อง
- เปลี่ยนชื่อ
runOnIdleCompose
เป็นrunOnIdle
(I83607) - เปลี่ยน LayoutNode เป็น API เวอร์ชันทดลอง (I4f2e9)
- เลิกใช้งาน androidx.ui.foundation.TextFieldValue และ androidx.ui.input.EditorValue แล้ว คอมโพสิเบิล TextField, FilledTextField และ CoreTextField ที่ใช้ประเภทดังกล่าวก็เลิกใช้งานด้วย โปรดใช้ androidx.ui.input.TextFieldValue แทน (I4066d, b/155211005)
- นำ DrawBackground API ที่เลิกใช้งานออกแล้ว และใช้ Extension DrawBackground API ใน Modifier แทน ปรับแต่งการใช้สี แปรง และสีวาดพื้นหลังเพื่อลดเส้นทางโค้ด รวมถึงนำข้อกำหนดในการสร้างตัวแก้ไขออกเพื่อเป็นส่วนหนึ่งของการคอมโพสิชัน (I0343a)
- อัปเดต API ระดับที่สูงขึ้นเพื่อแสดง Canvas ให้แสดง CanvasScope แทน ซึ่งทำให้ผู้บริโภคไม่ต้องดูแลรักษาออบเจ็กต์ Paint ของตนเอง สําหรับผู้บริโภคที่ยังคงต้องการเข้าถึง Canvas อยู่ สามารถใช้เมธอดของส่วนขยาย drawCanvas ซึ่งจะให้การเรียกกลับเพื่อออกคําสั่งวาดด้วย Canvas ที่อยู่เบื้องหลัง (I80afd)
- มีการเปลี่ยนแปลง API ของแลมดาต่อท้าย WithConstraints ตอนนี้มีขอบเขตผู้รับแทนพารามิเตอร์ 2 รายการ ซึ่งนอกเหนือจากข้อจำกัดและ layoutDirection แล้วยังมีพร็อพเพอร์ตี้ minWidth, maxWidth, minHeight และ maxHeight ใน Dp (I91b9a, b/149979702)
- เพิ่มตัวแก้ไขการถ่วงสมมาตร (I39840)
- อัปเดต wrapContentWidth และ wrapContentHeight เพื่อใช้การวางแนวแนวตั้งหรือแนวนอนแทนการวางแนว เราได้อัปเดตตัวแก้ไขแรงโน้มถ่วงให้ยอมรับการจัดแนวแนวตั้งหรือแนวนอน อัปเดตแถว คอลัมน์ และกองเพื่อรองรับการจัดแนวต่อเนื่องที่กำหนดเอง (Ib0728)
- เปลี่ยนชื่อโมดูล ui-text เป็น ui-text-core (I57dec)
- ปรับปรุง DrawModifier API
- สร้างขอบเขตผู้รับสำหรับ ContentDrawScope ของ draw()
- นําพารามิเตอร์ทั้งหมดใน draw() ออก
- DrawScope มีอินเทอร์เฟซเดียวกับ CanvasScope เดิม
- ContentDrawScope มีเมธอด drawContent() (Ibaced, b/152919067)
- เลิกใช้งาน ColoredRect แล้ว ให้ใช้
Box(Modifier.preferredSize(width, height).drawBackground(color))
แทน (I499fa, b/152753731) - แทนที่โอเปอเรเตอร์ตัวเพิ่มตัวแก้ไขด้วยฟังก์ชันส่วนขยายของโรงงาน (I225e4)
- ตอนนี้สมาชิก RowScope และ ColumnScope สามารถเข้าถึงได้นอกแถวและคอลัมน์ (I3a641)
- เปลี่ยนชื่อ LayoutFlexible เป็น LayoutWeight เปลี่ยนชื่อพารามิเตอร์แบบแน่นเป็น "fill" (If4738)
- WithConstraints ได้พารามิเตอร์ LayoutDirection (I6d6f7)
- เปลี่ยนชื่อพื้นหลังเป็น DrawBackground และทําให้ระบบจดจําโดยค่าเริ่มต้น (Ia0bd3)
- แทนที่ ButtonStyle ด้วยฟังก์ชันที่แยกต่างหากและนำการโอเวอร์โหลดข้อความ (สตริง) ออก ดูข้อมูลการใช้งานจากตัวอย่างที่อัปเดตแล้ว (If63ab, b/146478620, b/146482131)
- ตอนนี้
runOnIdleCompose
และrunOnUiThread
เป็นฟังก์ชันส่วนกลางแทนเมธอดใน ComposeTestRule (Icbe8f)
การมีส่วนร่วมจากภายนอก
- นำ API ที่ไม่จำเป็น เช่น Looper และ Handler ออกจากเลเยอร์การพอร์ตรันไทม์ของ Compose (I6847d)
- เลิกใช้งาน
Flow<T>.collectAsState()
ที่ไม่มีค่าเริ่มต้น ให้ใช้StateFlow<T>
หรือส่งค่าเริ่มต้นที่ชัดเจนแทน (I63f98, b/157674865)