เขียนรันไทม์

องค์ประกอบพื้นฐานพื้นฐานของโมเดลการเขียนโปรแกรมและการจัดการสถานะของ Compose และรันไทม์หลักของปลั๊กอิน Compose Compiler ที่จะกำหนดเป้าหมาย
อัปเดตล่าสุด รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
24 กรกฎาคม 2024 1.6.8 - 1.7.0-beta06 -

โครงสร้าง

การเขียนจะรวมรหัสกลุ่ม Maven 7 รายการภายใน androidx แต่ละกลุ่ม มีชุดย่อยของฟังก์ชันเป้าหมาย โดยแต่ละฟังก์ชันมีชุดรุ่นของตัวเอง หมายเหตุ

ตารางนี้จะอธิบายกลุ่มและลิงก์ไปยังบันทึกประจำรุ่นแต่ละชุด

กลุ่มคำอธิบาย
compose.animationสร้างภาพเคลื่อนไหวในแอปพลิเคชัน Jetpack Compose เพื่อยกระดับประสบการณ์ของผู้ใช้
compose.compilerแปลงฟังก์ชัน @Composable และเปิดใช้การเพิ่มประสิทธิภาพด้วยปลั๊กอินคอมไพเลอร์ Kotlin
compose.foundationเขียนแอปพลิเคชัน Jetpack Compose ด้วยองค์ประกอบสำคัญที่พร้อมใช้งานและขยายพื้นฐานเพื่อสร้างชิ้นงานของระบบการออกแบบของคุณเอง
compose.materialสร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ดีไซน์ Material ที่พร้อมใช้งาน นี่คือจุดแรกเข้าของ Compose ในระดับที่สูงกว่า ซึ่งออกแบบมาเพื่อมอบคอมโพเนนต์ที่ตรงกับคอมโพเนนต์ที่อธิบายไว้ใน www.material.io
compose.material3สร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ Material Design 3 ซึ่งเป็นการพัฒนาครั้งใหม่ของดีไซน์ Material Material 3 ประกอบด้วยธีมและคอมโพเนนต์ที่อัปเดตใหม่ และฟีเจอร์การปรับเปลี่ยนในแบบของคุณของ Material You เช่น สีแบบไดนามิก ทั้งยังออกแบบมาให้สอดคล้องกับสไตล์ภาพและ UI ของระบบใหม่ของ Android 12
compose.runtimeองค์ประกอบพื้นฐานพื้นฐานของโมเดลการเขียนโปรแกรมและการจัดการสถานะของ Compose และรันไทม์หลักของปลั๊กอิน Compose Compiler ที่จะกำหนดเป้าหมาย
compose.uiองค์ประกอบพื้นฐานของ UI การเขียนซึ่งจำเป็นต่อการโต้ตอบกับอุปกรณ์ ซึ่งรวมถึงเลย์เอาต์ การวาดภาพ และการป้อนข้อมูล

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน Compose คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle สำหรับ ในแอปหรือโมดูล

ดึงดูด

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างรายการใหม่

ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม

การติดตามรันไทม์เวอร์ชัน 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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ทรัพยากร Dependency ที่ปักหมุดไปยังเวอร์ชันเสถียรต่ำสุดที่รองรับ (เช่น รันไทม์การเขียนและ Perfetto) - การแก้ไขปัญหาที่การติดตามรันไทม์ของการเขียนจะทำให้รันไทม์ในการเขียนเวอร์ชันใหม่เข้ามาในแอป

เวอร์ชัน 1.0.0-alpha04

23 สิงหาคม 2023

ปล่อย androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • สามารถทำงานร่วมกับ Comparison and Tracing Perfetto เวอร์ชันล่าสุด เปิดใช้การสนับสนุนสำหรับ Composition Tracing เมื่อแอปเริ่ม (Cold Start) เช่น ในการเปรียบเทียบ AndroidX และ Android Studio (เริ่มต้นจาก Hedgehog รุ่นเบต้า 2)

การเปลี่ยนแปลง API

  • เปลี่ยนชื่อ androidx.tracing.perfetto.Trace เป็น androidx.tracing.perfetto.PerfettoSdkTrace แล้ว (I44af8)
  • การทำให้ API ของ Tracing Perfetto SDK สอดคล้องกับ 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ไม่มีการเปลี่ยนแปลงฟังก์ชัน การเพิ่มประสิทธิภาพด้านประสิทธิภาพหลายรายการในทรัพยากร Dependency แบบดาวน์สตรีม 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.7

เวอร์ชัน 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() สถานะเริ่มต้นของ 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)
  • หลีกเลี่ยงการติดตายในเครื่องมือคอมโพสเซอร์เมื่อเข้าถึงนาฬิกาเฟรม (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 ครั้งเดียวต่อการประเมินสถานะที่ได้รับ (ee7daf)
  • อ่าน currentRecord ครั้งเดียวต่อการสังเกตการณ์ในการเรียบเรียง (b882b2)
  • นำการจัดสรรรายการซ้ำโดยไม่ตั้งใจใน snapshotFlow (231e56) ออก
  • เปิดใช้ nonSkippingGroupOptimization สำหรับการเขียนไลบรารี ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชัน Composable ที่ไม่สามารถรีสตาร์ทได้ใน 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 สำหรับ int SnapshotThreadLocal ใน 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)
  • เพิ่ม State และ MutableState (fb3d89) เวอร์ชันพื้นฐาน
  • เพิ่ม Snapshot.isApplyObserverNotificationPending (I672a5) แล้ว
  • เพิ่มเวอร์ชันพื้นฐานของ State API ซึ่งทำให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์ State ได้โดยไม่เสียค่าการทำกล่องอัตโนมัติ ใช้วิธีการจากโรงงานใหม่ เช่น mutableIntState(Int), mutableFloatStateOf(Float) และอื่นๆ เพื่อใช้สิ่งเหล่านี้ (I48e43)

แก้ไขข้อบกพร่อง

  • ข้ามการจัดองค์ประกอบย่อยใหม่ที่จะนำออก (Ieeb99, b/254645321)
  • ไม่เก็บการอ้างอิงสแนปชอตใน ComposerImpl (0206f7)
  • อย่าใช้การจัดแต่ง 2 ครั้ง (f5791b)
  • ตรวจสอบว่าเป็นโมฆะสำหรับค่า Derived ที่ไม่ได้เริ่มต้น (aa2a92)
  • เรียกใช้ onEndChanges ระหว่างการนำองค์ประกอบออก (62cc8c)
  • แก้ไขเนื้อหาที่ย้ายเป็นองค์ประกอบย่อย (4beb41)
  • แก้ไขการติดตายที่อาจเกิดขึ้น (c1a425 และ 8edce0)
  • ตอนนี้เครื่องมือปรับแต่งที่สร้างขึ้นสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียกไปยัง withFrameNanos แทนที่จะบล็อกการเขียนทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดแล้วจะยังคงปรับแต่งใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้โทรรายอื่นๆ ของ withFrameNanos จะบล็อก (Id9e7f, b/240975572)
  • เรียกใช้ Callback การปิดใช้งานสำหรับ LayoutNode ก่อนทิ้งเอฟเฟกต์ 3784073
  • แก้ไข Flag ที่เปลี่ยนแปลงแล้วสำหรับ lambda ที่รีสตาร์ท ea81df9
  • แก้ไขการถดถอยของการแก้ไขแบบเรียลไทม์สำหรับ Composable ด้วยโหนด 73fd4d8
  • ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการเขียน ae276f1
  • ทำให้ขอบเขต SnapshotStateObserver เป็นโมฆะสำหรับสถานะที่ได้มาโดยไม่มีการเปลี่ยนแปลง 84d9b1c
  • แก้ไขการหยุดทำงานที่อาจเกิดขึ้นเมื่อกำจัดการเรียบเรียง 28761fc
  • แก้ไขเนื้อหาที่ย้ายเป็นองค์ประกอบย่อย 92d4156
  • แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ lambda ที่รีสตาร์ท (8a03e9)
  • เรียกใช้ Callback การปิดใช้งานสำหรับ 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" ภายในการกำหนดค่า create.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)
  • เพิ่ม State และ MutableState (fb3d89) เวอร์ชันพื้นฐาน
  • เพิ่ม Snapshot.isApplyObserverNotificationPending (I672a5) แล้ว

แก้ไขข้อบกพร่อง

  • การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808 )
  • ไม่เก็บการอ้างอิงสแนปชอตใน ComposerImpl (0206f7)
  • การยกเลิกการเขียน CoroutineScopes (a55362 และ bd382f) อย่างรวดเร็ว
  • อย่าใช้การจัดแต่ง 2 ครั้ง (f5791b)
  • ตรวจสอบว่าเป็นโมฆะสำหรับค่า Derived ที่ไม่ได้เริ่มต้น (aa2a92)
  • เรียกใช้ onEndChanges ระหว่างการนำองค์ประกอบออก (62cc8c)
  • แก้ไขเนื้อหาที่ย้ายเป็นองค์ประกอบย่อย (4beb41)
  • แก้ไขการติดตายที่อาจเกิดขึ้น (c1a425
  • ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการเขียน (f4a2d1)
  • แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ lambda ที่รีสตาร์ท (8a03e9)
  • เรียกใช้ Callback การปิดใช้งานสำหรับ 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 ได้โดยไม่เสียค่าการทำกล่องอัตโนมัติ ใช้วิธีการจากโรงงานใหม่ เช่น mutableIntState(Int), mutableFloatStateOf(Float) และอื่นๆ เพื่อใช้สิ่งเหล่านี้ (I48e43)

แก้ไขข้อบกพร่อง

  • เรียกใช้ onEndChanges ระหว่างการนำองค์ประกอบออก โหนดโฟกัสที่นำออกระหว่าง Composition.dispose กำลังสมัครใช้บริการ onEndChanges เพื่อรีเซ็ตโฟกัส (03d4a47)

  • ตรวจสอบว่าการโมฆะสำหรับค่า Derived ที่ไม่ได้เริ่มต้น สถานะที่ได้รับแต่ละสถานะจะเชื่อมโยงกับรายการทรัพยากร Dependency ใน SnapshotStateObserver ซึ่งใช้เพื่อแก้ไขขอบเขตที่เชื่อมโยงกับสถานะที่ได้มาเมื่อมีการเปลี่ยนแปลงการขึ้นต่อกัน ระบบจะลงทะเบียนการเปลี่ยนแปลงทรัพยากร Dependency ในสแนปชอตล่วงหน้า ซึ่งอาจเกิดขึ้นได้หลังจากอ่านสถานะที่ได้รับแล้ว (เนื่องจากการเรียกใช้ Snapshot.notifyObjectsInitialized())

    ตรรกะสังเกตสถานะที่ได้รับก่อนหน้านี้ใน SnapshotStateObserver คือการล้างทรัพยากร Dependency เก่า จากนั้นจะอ่านค่าใหม่ ซึ่งส่งผลให้เกิดเงื่อนไขการแข่งขันที่กลายเป็นโมฆะในสถานะที่มีการล้างแล้ว ซึ่งไม่ได้ลงทะเบียนการเลิกใช้ทรัพยากร Dependency

    การเปลี่ยนแปลงนี้จะเรียงลำดับสถานะการอ่านและการล้างทรัพยากร 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
  • เรียกใช้ Callback การปิดใช้งานสำหรับ 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 เรียกใช้โครูทีน (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
  • เพิ่มกลุ่มที่ต้องใช้ในร่างกายของแลมบ์ดาที่ข้ามไม่ได้ 7d06752
  • ปรับปรุงลักษณะการอ้างอิงหน่วยความจำของสแนปชอต 93fcae8
  • นำชกมวยออกในการค้นหาองค์ประกอบภายใน 0875717
  • ใช้คีย์ที่ถูกต้องสำหรับกลุ่มโหนดที่นำกลับมาใช้ไม่ได้ 6388d8d
  • ป้องกัน SnapshotStateObserver ไม่ให้เกิดซ้ำและเกิดขึ้นพร้อมกัน 98cb6ba
  • เพิ่มการตรวจสอบขอบเขตดัชนีการตรวจสอบใน "get" ของ IdentityArraySet เมธอด 35a77d3
  • อัปเดตโมดูลการเขียนเพื่อใช้ส่วนขยาย ViewTreeLifecycleOwner 21c2122
  • ส่งการแจ้งเตือนการนำไปใช้หลังจากผู้ออกแบบเฟรมเสร็จแล้ว 98F2641
  • แก้ไขข้อขัดข้องของดัชนีนอกขอบเขตเมื่อยกเลิก Recomposer 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 แล้วซึ่งช่วยให้สังเกตวงจรชีวิตของโหนด Compose (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

  • ประเภท/ความสามารถในการเว้นว่างที่มากขึ้นของฟังก์ชันในบรรทัด/เลิกใช้งานซึ่งซ่อน (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

การจัดการข้อยกเว้น / การสนับสนุนการแก้ไขแบบเรียลไทม์

การติดตามการเรียบเรียง

Composable Reflection API

การแก้ไขรันไทม์

ระบบสแนปชอต

เวอร์ชัน 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 พร้อมกับการแก้ไขข้อบกพร่องเกี่ยวกับความเสถียรอีกหลายอย่าง ฟีเจอร์ใหม่ที่สำคัญที่สุดคือการเปิดตัว movableContentOfAPI ซึ่งใช้เพื่อเปิดใช้ UX ที่ซับซ้อนได้ เช่น การเปลี่ยนองค์ประกอบที่แชร์ movableContentOf API จะแปลง lambda ที่ประกอบกันได้เป็น lambda ที่ย้ายสถานะดังกล่าวและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่ที่มีการเรียกใช้ เมื่อการเรียกก่อนหน้าออกจากการเรียบเรียง สถานะจะยังคงอยู่ชั่วคราวและหากมีการเรียก lambda ใหม่เข้ามาในการเรียบเรียง ระบบจะย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งของการเรียกใหม่ หากไม่ได้เพิ่มการเรียกใหม่ สถานะจะถูกนำออกอย่างถาวรและอย่าลืมว่าผู้สังเกตการณ์จะได้รับการแจ้งเตือน

  • หากมีการเรียกใช้ movableContentOf lambda หลายครั้งในการเรียบเรียงเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สําหรับการเรียกใช้แต่ละครั้ง และเมื่อการเรียกใช้ออกจากการเขียนและการเรียกใหม่ สถานะจะถูกย้ายจากการเรียกใช้ที่ออกครั้งแรกไปเป็นการเรียกใช้ป้อนเข้าตามลำดับที่ถูกเรียก สถานะทั้งหมดที่ไม่ได้รับการอ้างสิทธิ์จากการโทรใหม่จะถูกนำออกอย่างถาวร

  • นอกจากฟีเจอร์นี้และฟีเจอร์ใหม่อื่นๆ อีก 2-3 รายการ ก็ต้องใช้เวลามากมายในการทำให้ระบบรันไทม์และสถานะสแนปชอตมีความเสถียร หน่วยความจำรั่วไหลจำนวนมากถูกนำออกและเพิ่มประสิทธิภาพเส้นทางโค้ด

  • ดูรายการสรุปการเปลี่ยนแปลงได้ที่ด้านล่าง

ฟีเจอร์ใหม่ใน 1.2

ประสิทธิภาพใน 1.2

แก้ไขข้อบกพร่องใน 1.2

เวอร์ชัน 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)
  • เพิ่ม API Snapshot.asContextElement() แบบทดลอง (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 ลงในคอมโพสเซอร์ (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 ที่ส่งผ่านได้โดยไม่ต้องสมัครรับการเปลี่ยนแปลงค่าสถานะที่อ่านระหว่างการบล็อกนี้ การใช้งานน่าจะมีประโยชน์ในกรณีที่ต้องการใช้ประโยชน์จากการเขียน/อ่านที่ปลอดภัยของเทรดในสแนปชอต แต่อยากอ่านค่าได้โดยไม่ทําให้มีการจัดองค์ประกอบใหม่หรือวัดอีกครั้งโดยไม่จำเป็น (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 ที่อนุญาตการรายงานเวลาคอมไพล์เมื่อ ฟังก์ชันที่ประกอบกันได้เรียกว่าการกำหนดเป้าหมายไปยังแอปพลิเคชันซึ่งไม่ใช่ ที่ออกแบบมาเพื่อใช้

    ในกรณีส่วนใหญ่ คำอธิบายประกอบสามารถอนุมานได้โดยผู้ประพันธ์ ปลั๊กอินคอมไพเลอร์ ดังนั้นการใช้คำอธิบายประกอบเหล่านี้โดยตรงควร หายาก กรณีที่ไม่สามารถอนุมานได้ ได้แก่ การสร้างและ โดยใช้ฟังก์ชัน Composable เชิงนามธรรมที่นำไปใช้ที่กำหนดเอง (เช่น เมธอดของอินเทอร์เฟซ) ฟิลด์ หรือตัวแปรร่วมที่ lambda แบบประกอบได้ (การอนุมานตัวแปรและพารามิเตอร์ในเครื่อง) หรือเมื่อใช้ ComposeNode หรือฟังก์ชัน Composable ที่เกี่ยวข้อง

    สำหรับผู้ใช้ที่กำหนดเอง ฟังก์ชันที่ประกอบกันได้ซึ่งเรียกใช้ ComposeNode หรือ ReusableComposeNode ต้องเพิ่ม คำอธิบายประกอบ CompoableTarget สำหรับฟังก์ชันและฟังก์ชัน ประเภทพารามิเตอร์ lambda ที่ประกอบกันได้ อย่างไรก็ตาม เราขอแนะนำว่า เพื่อสร้างคำอธิบายประกอบที่มีคำอธิบายประกอบ ComposableTargetMarker จากนั้นจะมีการใช้คำอธิบายประกอบที่ทำเครื่องหมายไว้ แทน ComposableTarget โดยตรง คำอธิบายประกอบที่ประกอบกันได้ ทำเครื่องหมายด้วย ComposableTargetMarker เทียบเท่ากับ ComposbleTarget ด้วยชื่อที่สมบูรณ์ในแอตทริบิวต์ เป็นพารามิเตอร์ที่เกี่ยวข้อง ตัวอย่างเช่น 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 ซึ่งแปลง Composable แล้ว แลมบ์ดาลงในแลมบ์ดาที่ย้ายสถานะ และโหนดที่เกี่ยวข้อง ไปยังตำแหน่งใหม่ที่เรียกว่าตำแหน่งใหม่ เมื่อสายก่อนหน้าสิ้นสุดลง การเรียบเรียง สถานะจะเก็บไว้ชั่วคราว และหากมีการการเรียกใหม่ แลมบ์ดาจะเข้าสู่การเรียบเรียง จากนั้นเข้าสู่รัฐ และ จะย้ายไปยังตำแหน่งของการเรียกใหม่ หากไม่มีสายใหม่ เพิ่มรัฐนั้น ถูกนำออกอย่างถาวร และอย่าลืมว่าผู้สังเกตการณ์ การแจ้งเตือน

    ถ้ามีการเรียก movableContentOf แลมบ์ดาหลายครั้งพร้อมกัน องค์ประกอบ สถานะใหม่ และโหนดจะถูกสร้างสำหรับการเรียกแต่ละครั้ง จะออกจากองค์ประกอบและโทรออกใหม่ สถานะจะถูกย้าย ตั้งแต่การวางสายแรกไปจนถึงการโทรเข้าตามลำดับ จะถูกเรียก สถานะทั้งหมดที่ไม่ได้อ้างสิทธิ์โดยการเรียกใหม่จะถูกนำออก อย่างถาวร (Ib4850)

  • เพิ่ม API การติดตามในการเรียบเรียงเพื่อให้เครื่องมือสามารถ จะให้การติดตามโดยละเอียดมากขึ้นของฟังก์ชันที่ประกอบกันได้ ผู้คอมไพเลอร์ จะสร้างการเรียกไปยัง Tracing API ซึ่งมีแหล่งที่มา (Ib0eb5)

    วิธีนำการโทรเหล่านี้และแหล่งที่มาที่เกี่ยวข้องออก จากบิลด์ที่เผยแพร่ ให้เพิ่มกฎ Proguard ต่อไปนี้

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • เพิ่ม InternalComposeScope ซึ่งช่วยให้เครื่องมือมีความสามารถ เพื่อระบุ Composable ระหว่างการจัดองค์ประกอบใหม่ (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)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้ขึ้นอยู่กับ 1.6.10 ของ Kotlin

เวอร์ชัน 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 ซึ่งมีลักษณะการทำงานที่สอดคล้องกันหากใช้มุมมองและการเขียนผสมกัน การเปลี่ยนแปลงนี้ยังช่วยให้มั่นใจว่าเมื่อคุณสร้าง UI โดยใช้คอมโพเนนต์ Compose Material แล้ว จะเป็นไปตามข้อกำหนดขั้นต่ำสำหรับการช่วยเหลือพิเศษเป้าหมายการสัมผัส
  • การสนับสนุนเสถียรสำหรับรางนำทาง
  • เปลี่ยน API ที่ทดลองใช้ก่อนหน้านี้จำนวนหนึ่งไปใช้เวอร์ชันเสถียร
  • การรองรับสำหรับ Kotlin เวอร์ชันใหม่

เวอร์ชัน 1.1.0-rc03

26 มกราคม 2022

ปล่อย androidx.compose.runtime:runtime-*:1.1.0-rc03 แล้ว เวอร์ชัน 1.1.0-rc03 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • อัปเดตเพื่อรองรับเนื้อหา Compose 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 เพื่อใช้ Kotlin 1.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 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • อัปเดตเป็น Kotlin 1.5.31 แล้ว

เวอร์ชัน 1.0.3

29 กันยายน 2021

ปล่อย androidx.compose.runtime:runtime-*:1.0.3 แล้ว เวอร์ชัน 1.0.3 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • อัปเดตเป็น Kotlin 1.5.30 แล้ว

เวอร์ชัน 1.0.2

1 กันยายน 2021

ปล่อย androidx.compose.runtime:runtime-*:1.0.2 แล้ว เวอร์ชัน 1.0.2 มีคอมมิตเหล่านี้

อัปเดตเพื่อรองรับรุ่น Compose 1.0.2 เขียน 1.0.2 ยังคงใช้งานร่วมกับ Kotlin 1.5.21 ได้

เวอร์ชัน 1.0.1

4 สิงหาคม 2021

ปล่อย androidx.compose.runtime:runtime-*:1.0.1 แล้ว เวอร์ชัน 1.0.1 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • อัปเดตเพื่อใช้ 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 และ AGP 7.1 เวอร์ชันถัดไป (b/194289155)

เวอร์ชัน 1.0.0-rc02

14 กรกฎาคม 2021

ปล่อย androidx.compose.runtime:runtime-*:1.0.0-rc02 แล้ว เวอร์ชัน 1.0.0-rc02 มีคอมมิตเหล่านี้

  • แก้ไขสภาวะการแข่งขันใน SnapshotStateObserver ที่ทำให้เกิดสปอนเซอร์ NullPointerException (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 ... กฎเหล่านี้มี 1 ใน 2 รูปแบบเพื่อกำหนดเป้าหมายเมธอดหรือคลาส

  • กฎของเมธอดจะมีรูปแบบต่อไปนี้

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • และกฎของชั้นเรียนจะมีรูปแบบต่อไปนี้

    <CLASS_DESCRIPTOR>
    
  • <FLAGS> คืออักขระอย่างน้อย 1 ตัว ได้แก่ H, S และ P เพื่อระบุว่าควรแจ้งว่าเมธอดนี้เป็น "Hot", "Startup" หรือ "Post Startup" หรือไม่

  • <CLASS_DESCRIPTOR> เป็นตัวบ่งชี้คลาสของวิธีที่กำหนดเป้าหมาย เช่น คลาส androidx.compose.runtime.SlotTable จะมีตัวบ่งชี้ Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> เป็นลายเซ็นของเมธอด ซึ่งจะมีชื่อ ประเภทพารามิเตอร์ และประเภทการคืนสินค้าของเมธอด ตัวอย่างเช่น เมธอด fun isPlaced(): Boolean ใน LayoutNode มีลายเซ็น isPlaced()Z

  • รูปแบบเหล่านี้มีไวลด์การ์ดได้ (**, * และ ?) เพื่อให้กฎเดียวครอบคลุมเมธอดหรือคลาสหลายรายการ

กฎเหล่านี้มีหน้าที่อะไร

  • เมธอดที่มีแฟล็ก H หมายความว่าเมธอดนี้เป็น "hot" และควรคอมไพล์ไว้ล่วงหน้า

  • เมธอดที่มี Flag S บ่งบอกว่าเป็นเมธอดที่มีการเรียกใช้เมื่อเริ่มต้น และควรรวบรวมล่วงหน้าเพื่อหลีกเลี่ยงค่าใช้จ่ายในการคอมไพล์และการตีความเมธอดเมื่อเริ่มต้น

  • เมธอดที่มีแฟล็ก 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)
  • การเปลี่ยนแปลง API ControlledComposition รายการเพื่อเปิดใช้การเขียนใหม่ ในบัตรรอบเดียวที่เขียนใหม่ (Iaafd1, b/184173932)

เวอร์ชัน 1.0.0-beta07

18 พฤษภาคม 2021

ปล่อย androidx.compose.runtime:runtime-*:1.0.0-beta07 แล้ว เวอร์ชัน 1.0.0-beta07 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่ม Compose Compiler 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 ในเครื่องจะข้ามได้ตามพารามิเตอร์ หลังจากการเปลี่ยนแปลงนี้ ฟังก์ชัน Composable ในเครื่องจะไม่ข้าม การเปลี่ยนแปลงนี้เกิดขึ้นเนื่องจากเป็นเรื่องปกติและคาดหวังว่าฟังก์ชันในเครื่องจะตรวจจับพารามิเตอร์จากระดับบนสุดและการข้ามถือเป็นแหล่งที่มาทั่วไปของข้อบกพร่อง

    กล่าวโดยสรุปคือ

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

    ก่อนการเปลี่ยนแปลงนี้ ฟังก์ชัน Composable 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) } ที่เสียหายเมื่อใช้ในปลายทางของการเขียนการนำทาง (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)
  • ตอนนี้ Composable ที่มีเครื่องหมาย @ReadOnlyComposable จะได้รับการตรวจสอบเวลาคอมไพล์ เพื่อให้แน่ใจว่าจะเรียกไปยัง @ReadOnlyComposables อื่นๆ เท่านั้น (I58961)
  • defaultFactory สำหรับ compositionLocalOf และ ตอนนี้คุณจำเป็นต้องใช้ staticCompositionLocalOf แทน ไม่บังคับ

    การเปลี่ยนแปลงนี้จะนําข้อผิดพลาดประเภทที่อาจเป็นค่าว่างออก ประเภทที่ไม่ได้ระบุค่าเริ่มต้นจากโรงงาน ก่อนหน้านี้ จะให้การอ้างอิง Null สำหรับประเภทที่ไม่เป็นค่าว่าง

    สำหรับประเภทที่เว้นว่างได้ ให้พิจารณาระบุ { null } เป็นค่าเริ่มต้น โรงงาน

    เราไม่แนะนำให้ใช้ท้องถิ่นที่มีประเภทที่ไม่มีค่าว่าง ยกเว้น สามารถระบุค่าเริ่มต้นที่เหมาะสมได้ หากไม่มีค่าเริ่มต้นที่เหมาะสม lambda defaultFactory ควรส่งข้อยกเว้น อย่างไรก็ตาม การส่งคำขอยกเว้นหมายความว่าผู้บริโภคในพื้นที่จะ การพึ่งพาโดยนัยที่ให้ไว้ซึ่งไม่ได้บังคับใช้ ตามระบบประเภท (Ifbd2a)

  • สัญลักษณ์ที่เลิกใช้งานแล้วถูกนำออกจากรันไทม์การเขียน (I3252c)

  • เลิกใช้งาน emptyContent() แล้ว โปรดใช้ {} แทน (Idb33f, b/179432510)

  • ผู้ให้บริการเปลี่ยนชื่อเป็น CompositionLocalProvider

    • เครื่องมือสร้างการเรียบเรียงไม่ยอมรับพารามิเตอร์คีย์อีกต่อไปและเลิกใช้งานแล้ว
    • ได้เปลี่ยนcurrentCompositeKeyHash เป็นพร็อพเพอร์ตี้ระดับบนสุดที่ประกอบได้แทนฟังก์ชันระดับบนสุดที่ประกอบกันได้
    • ย้าย CompositionData และ CompositionGroup ไปยังเนมสเปซ androidx.compose.runtime.tooling แล้ว
    • ComposableLambda ได้รับการสร้างเป็นอินเทอร์เฟซแทนคลาสที่เป็นรูปธรรมและไม่มีพารามิเตอร์ประเภทอีกต่อไป
    • ComposableLambdaN ได้รับการสร้างเป็นอินเทอร์เฟซแทนคลาสที่เป็นรูปธรรมและไม่มีพารามิเตอร์ประเภทอีกต่อไป
    • ย้ายฟังก์ชัน Snapshot ไปยังเนมสเปซ androidx.compose.runtime แล้ว
    • วิธีการผสานของ SnapshotMutationPolicy ไม่ใช่เวอร์ชันทดลองอีกต่อไป
    • ฟังก์ชัน clearRoots ระดับบนสุดของ @TestOnly ถูกนำออกแล้ว ไม่จำเป็นอีกต่อไป
    • ลบฟังก์ชัน keySourceInfoOf และresetSourceInfo แล้ว เนื่องจากไม่จำเป็นต้องใช้อีกต่อไป
    • Composer.collectKeySourceInformation ถูกนำออกแล้ว ไม่จำเป็นอีกต่อไป
    • นำเมธอด isjoinedKey, JoinedKeyLeft และ joinKeyRight ออกแล้ว เนื่องจากไม่จำเป็นต้องใช้อีกต่อไป
    • API ระดับบนสุดหลายรายการถูกย้ายและจัดระเบียบใหม่เป็นไฟล์ที่ต่างกัน เนื่องจากอรรถศาสตร์คลาสไฟล์ของ Kotlin จะทำให้ความเข้ากันได้ของไบนารีเสียหาย แต่ไม่ใช่ความเข้ากันได้ของแหล่งที่มา ดังนั้นจึงไม่ควรเป็นปัญหาสำหรับผู้ใช้ส่วนใหญ่
    • (I99b7d, b/177245490)
  • SnapshotStateObserver ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Id2e6a)

  • ลบ API ที่เลิกใช้งานก่อนหน้านี้บางรายการ (Ice5da, b/178633932)

  • ทำการเปลี่ยนแปลง Material API ต่อไปนี้

    • เพิ่มพารามิเตอร์ contentPadding ใน Top/BottomAppBar เพื่ออนุญาตให้ปรับแต่งระยะห่างจากขอบเริ่มต้นได้
    • พารามิเตอร์ที่เรียงลำดับใหม่ใน BackdropScaffold เพื่อให้เป็นไปตามหลักเกณฑ์ของ API สำหรับพารามิเตอร์ที่จำเป็นก่อนพารามิเตอร์ที่ไม่บังคับ
    • ย้ายพารามิเตอร์ icon ใน BottomNavItem ให้อยู่หลัง selected และ onClick แล้ว
    • เปลี่ยนชื่อพารามิเตอร์ alwaysShowLabels ใน BottomหายไปItem เป็น alwaysShowLabel แล้ว
    • เปลี่ยนชื่อพารามิเตอร์ bodyContent ในคอมโพเนนต์บางรายการเป็น content แล้ว
    • พารามิเตอร์ที่เรียงลำดับใหม่ใน ButtonDefaults.buttonColors() โปรดทราบว่าเนื่องจากประเภทของพารามิเตอร์ไม่มีการเปลี่ยนแปลง จึงไม่ทำให้เกิดข้อผิดพลาดในโค้ดของคุณ โปรดตรวจสอบว่าคุณกำลังใช้พารามิเตอร์ที่มีชื่อหรืออัปเดตลำดับด้วยตนเอง มิฉะนั้นโค้ดของคุณจะไม่ทำงานเหมือนที่เคย
    • เพิ่มพารามิเตอร์ secondaryVariant ใน darkColors() แล้ว โดยปกติสีนี้เหมือนกับ secondary ในธีมมืด แต่เพิ่มเพื่อความสอดคล้องและปรับแต่งได้มากขึ้น
    • นำ ElevationDefaults และ animateElevation() ออกจากแพลตฟอร์ม API สาธารณะแล้ว เนื่องจากไม่ได้ใช้ / มีประโยชน์โดยทั่วไป
    • เปลี่ยนชื่อ onValueChangeEnd ใน Slider เป็น onValueChangeFinished และทำให้เป็นโมฆะแล้ว
    • เปลี่ยนชื่อพารามิเตอร์ 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 แล้ว นำ Composable ของ 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)
  • เปลี่ยนชื่อแอมเบียนท์เป็น CompositionLocal และแอมเบียนท์ของ / staticAmbientOf เป็นรอบๆ เนื้อหานี้ / staticCompositionLocalOf ตามลำดับ การเปลี่ยนแปลงนี้ช่วยให้วัตถุประสงค์ของ CompositionLocal ชัดเจนมากขึ้นว่าเป็นกลไกในการแจ้ง / ดึงค่าท้องถิ่นในการเรียบเรียง อินสแตนซ์ CompositionLocal ควรขึ้นต้นด้วย Local เช่น val LocalFoo = managementLocalOf { Foo() } (Ia55b6)
  • TakeMutableSnapshot และtakeSnapshot มี เปลี่ยนเป็นเมธอดที่แสดงร่วมของสแนปชอต (I91F19)
  • @ComposableContract เลิกใช้งานแล้วเพื่อใช้คำอธิบายประกอบที่เจาะจงมากขึ้น 3 รายการ

    @ComposableContract(restartable = false) เปลี่ยนเป็น @NonRestartableComposable แล้ว @ComposableContract(readonly = true) เปลี่ยนเป็น @ReadOnlyComposable แล้ว @ComposableContract(preventCapture = true) ได้เปลี่ยนเป็น @DisallowComposableCalls นำ @ComposableContract(tracked = true) ออกแล้ว (I60a9d)

  • blankContent() และ (@Composable () -> Unit).orEmpty() เลิกใช้งานแล้วเนื่องจากไม่มีผลกระทบหรือค่าด้านประสิทธิภาพในเชิงบวกอีกต่อไป (I0484d)

  • snapshotFlow และ withMutableSnapshot ไม่ได้เป็นสมาชิกแล้ว ทดลอง (I6a45f)

  • ปิดเครื่องมือปรับแต่งได้แล้ว รีคอมโพสเซอร์แบบปิดจะ จัดองค์ประกอบใหม่ต่อจนกว่าโครูทีนเด็กการเรียบเรียงเพลงจะเสร็จสมบูรณ์ Recomposer.shutDown เปลี่ยนชื่อเพื่อตัดกับการปิด (Ib6d76)

  • เลิกใช้งานอาร์ติแฟกต์ compose:runtime-dispatch แล้ว ขณะนี้สามารถดู MonotonicFrameClock ได้ใน write:runtime และ ดู AndroidUiDispatcher ได้ในCompose:ui (Ib5c36)

  • API เป้าหมายของปลั๊กอินคอมไพเลอร์ Compose ได้รับการปรับโครงสร้างภายในโค้ดใหม่ เพื่อใช้อินเทอร์เฟซแทน ที่แน่นอนได้ง่าย อินเทอร์เฟซก็ไม่ใช้งาน พารามิเตอร์ประเภท

    นี่เป็นการเปลี่ยนแปลงภายในที่ไม่ควรมีผลกับแหล่งที่มา สามารถใช้งานร่วมกันของโค้ดได้ แต่เป็นการเปลี่ยนแปลงการขัดข้องแบบไบนารี (I3b922, b/169406779)

  • เปิดตัว SnapshotMutableState (Icfd03)

  • DisposableEffectDisposable เปลี่ยนชื่อเป็น DisposaleEffectResult (Ica7c6)

  • นำ Recomposer.current() ออกแล้ว [Abstract]ComposeView เลย จะใช้ค่าเริ่มต้นเป็น Recomposer ที่สร้างแบบ Lazy Loading เป็น Recomposer ที่มีขอบเขตเป็นหน้าต่าง ซึ่งขับเคลื่อนด้วย ViewTreeLifecycleOwner สำหรับหน้าต่าง การจัดองค์ประกอบใหม่และ หยุดภาพเคลื่อนไหวจาก withFrameNanos ไว้ชั่วคราวขณะ Lifecycle ของโฮสต์ จะหยุดลง (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 และโอเวอร์โหลดทั้งหมดเลิกใช้งานแล้วและเปลี่ยนชื่อเป็น ComposeNode API นี้เหมือนกัน เพียงแต่เป็นคนละชื่อเพื่อเป็นไปตามรูปแบบการตั้งชื่อของ Compose (I4137b)
  • "โมฆะ" และ "ComCompositionReference()" จะถูกเลิกใช้งานเพื่อใช้ CurrentRecomposeScope และ RememberComCompositionReference ตามลำดับ (I583a8)
  • RememberObserver มาแทนที่ CompositionLifecycleObserver และ CompositionLifecycleObserver เลิกใช้งานแล้ว

    RememberObserver มาแทนที่ CompositionLifecycleObserver อรรถศาสตร์ที่ดัดแปลงและ ที่เปลี่ยนชื่อแล้ว การเปลี่ยนไปใช้ API ใหม่สามารถทำได้โดยกลไก สำหรับออบเจ็กต์ที่ถูกจดจำเพียงครั้งเดียว ซึ่งก็คือ แนวทางปฏิบัติที่แนะนำ อย่างไรก็ตาม หากข้อมูลอ้างอิง ถูกจดจำมากกว่า 1 ครั้งในการเรียบเรียงเพลง onRemembered สำหรับการอ้างอิงแต่ละรายการที่มีการเรียก onEnter เพียงครั้งเดียว onEnter ถูกเรียกหลายครั้ง หากใช้อ็อบเจกต์ในองค์ประกอบย่อย เช่น WithConstraints และ Scaffold ที่สร้างซิงเกิล การรับประกันการโทรของ onEnter ไม่น่าเชื่อถือและถูกนำออกสำหรับ RememberObserver

    RememberObserver จะเพิ่ม onAbandoned ซึ่งจะถูกเรียกหากฟิลด์ ส่งคืนอินสแตนซ์ RememberObserver รายการจาก Callback ที่ผ่านแล้ว ถึง 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 ทดลองจนกว่าการเปลี่ยนแปลงจะเสร็จสิ้น ใช้แล้ว โดยทั่วไปแล้ว ปัญหานี้จะทำได้โดย รอบโค้ดที่มีการอ้างอิงดังกล่าวใน SideEffect Composable เพื่อเลื่อนการดำเนินการของ จนกว่าจะมีการสร้างโหนดขึ้นและ ได้เริ่มต้นแล้ว (I018da)

การเปลี่ยนแปลง API

  • เพิ่มวิธีติดตามว่า recomposer ได้ใช้การเปลี่ยนแปลงแล้ว (I1b3e2)
  • ขยาย [Abstract]ComposeView API เพื่ออนุญาตให้มีการรีไซเคิล มุมมองจากการเขียน นำการเรียบเรียงออกเพื่อสร้างใหม่อีกครั้ง ในภายหลัง เพิ่ม API สำหรับการติดตั้งและค้นหาเครื่องมือปรับแต่งขอบเขตหน้าต่าง และ CompositionReferences สำหรับสร้างการเรียบเรียงย่อย

    เพิ่ม ViewCompositionStrategy สำหรับการกำหนดค่าการกำจัดองค์ประกอบ กลยุทธ์ของ [Abstract]ComposeViews มีการกำจัดลักษณะการทำงานเริ่มต้น ให้ถอดหน้าต่างออก (I860ab)

แก้ไขข้อบกพร่อง

  • ตอนนี้เครื่องมือปรับแต่งจะแสดงโฟลว์ของสถานะปัจจุบัน ซึ่งช่วยให้ ติดตามกิจกรรมและกิจกรรมของผลกระทบที่เกี่ยวข้อง (Ifb2b9)
  • ตอนนี้คุณจะเข้าถึง keyEvent แบบเนทีฟได้ผ่าน 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 เนื่องจากมี ข้อมูลดิบที่ API ของเครื่องมือ UI ตีความ (I31a9c)

  • คลาส Applier ไม่ถือว่าเป็น (Id85b0) อีกต่อไป

  • มีการเปลี่ยนแปลงอินเทอร์เฟซของ Applier เพื่อลดความซับซ้อน สร้างต้นไม้จากล่างขึ้นบนแทนที่จะสร้างจากด้านบน

    เมธอด insert() เปลี่ยนชื่อเป็น insertTopDown() แล้ว

    เพิ่มเมธอด insertBottomUp() ใหม่แล้ว

    แอปพลิเคชันจะแทรกโหนดลงในแผนผังที่กำลังแก้ไข โดยใช้ insertTopDown() หรือ insertBottomUp() ขึ้นอยู่กับ ซึ่งทำงานได้ดีกว่า

    ต้นไม้บางต้น เช่น LayoutNode และ View จะมีขนาดใหญ่กว่า มีประสิทธิภาพในการสร้างจากล่างขึ้นบน มากกว่าจากด้านบนลงล่าง ก่อนการเปลี่ยนแปลงนี้ ต้องมีกลุ่มของส่วนแทรกในการใช้งานจากล่างขึ้นบน จำเป็นต้องคัดลอกไปยังเครื่องมือทั้งหมดที่ต้องขึ้นไปด้านล่าง ที่ช่วยเพิ่มประสิทธิภาพ การเปลี่ยนแปลงนี้จะทำให้ Applier ลบล้าง insertBottomUp() เพื่อสร้างโครงสร้างต้นไม้และ insertTopDown() เพื่อสร้างต้นไม้แบบหล่นลง (Icbdc2)

  • Compose รองรับ Getter พร็อพเพอร์ตี้ที่สร้างการเรียกใช้ Composable ได้ การรองรับโค้ดนี้ยังคงอยู่ แต่ไวยากรณ์สำหรับการประกาศ Getter พร็อพเพอร์ตี้ว่าเป็น @Composable กำลังจะมีการเปลี่ยนแปลง

    ไวยากรณ์ที่เลิกใช้งานแล้วตอนนี้สำหรับการดำเนินการนี้คือการใส่คำอธิบายประกอบให้กับพร็อพเพอร์ตี้เอง

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

    ไวยากรณ์ที่ถูกต้องสำหรับการดำเนินการนี้คือการใส่คำอธิบายประกอบ Getter ของพร็อพเพอร์ตี้ ดังนี้

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

    ไวยากรณ์ทั้งสองแบบจะใช้งานได้สักระยะหนึ่ง แต่ไวยากรณ์เดิมที่เลิกใช้งานจะกลายเป็นข้อผิดพลาดในการคอมไพล์ (รหัส 9197)

แก้ไขข้อบกพร่อง

  • 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 ที่ประกอบกันได้ เพื่อตรวจสอบความสอดคล้องของหลักเกณฑ์การเขียน รวมทั้งย้ายข้อมูล API บางรายการโดยใช้ children เป็นชื่อสำหรับ lambda ต่อท้าย content ตามการตรวจสอบ Lint และคำแนะนำ (Iec48e)
  • Recomposer ไม่ยอมรับ EmbeddingContext อีกต่อไป ต้องระบุ ทรัพยากร Dependency ของกำหนดการจะดึงมาจาก EffectCoroutineContext เลิกใช้งาน FrameManager แล้ว การผสานรวมแพลตฟอร์มควรเริ่มต้น การจัดการสแนปชอตทั่วโลกของตนเอง (I02369)
  • ฟังก์ชัน relorableStateHolder.withRestorableState เปลี่ยนชื่อใหม่เป็น "RESTorableStateProvider" (I66640)

แก้ไขข้อบกพร่อง

  • แอมเบียนท์ที่เลิกใช้งานซึ่งตั้งชื่อด้วย Ambient เป็นคำต่อท้าย และแทนที่ด้วยพร็อพเพอร์ตี้ใหม่ที่ขึ้นต้นด้วย "แอมเบียนท์" ตามหลักเกณฑ์อื่นๆ ของแอมเบียนท์และ Compose API (I33440)
  • นำโมดูลการทดสอบ UI เก่าและสตับของโมดูลออก (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 มี Callback onBeginChanges/onEndChanges ที่ เรียกใช้เมื่อคอมโพสเซอร์เริ่มต้น/เสร็จสิ้นการเปลี่ยนแปลงกับโครงสร้าง ซึ่งอาจใช้สำหรับการจัดการทรัพยากรแบบกลุ่ม หากจำเป็น (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 หรือ งานเปิดตัวแล้ว
    • (Id50b9)
  • MutableVector ใช้ RandomAccess (I85d73, b/170461551)
  • เพิ่ม SideEffect ที่เขียนได้ด้วย Composable สำหรับการใช้ผลข้างเคียงของ การจัดวางองค์ประกอบให้กับวัตถุ ที่มีการจัดการโดยองค์ประกอบนั้น SideEffect คือ มีไว้เพื่อแทนที่ onCommit แบบ Composable (Ia77c2)
  • relorableStateHolder สําหรับ API ทดลองใหม่ โหมดนี้ช่วยให้สามารถบันทึกสถานะที่กำหนดไว้ด้วย [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 ดีขึ้นโดยลดองค์ประกอบย่อยในการเลื่อนแต่ละครั้ง เพิ่มเมธอด hasทันทีหลังจากการทำซ้ำ() แบบใหม่สำหรับคลาสการเรียบเรียง เมธอด hasPendingChanges() จาก Recomposer ถูกเปลี่ยนชื่อเป็น hasให้สอดคล้องกับ() (Ib2f32, b/168293643, b/167972292, b/165028371)
  • เพิ่ม generateState 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)
  • เพิ่ม getStateOf 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 ไม่ได้เปิด coroutines ที่ไม่ได้ส่งแล้ว (Ief6af, b/166486000)

เวอร์ชัน 1.0.0-alpha02

2 กันยายน 2020

ปล่อย androidx.compose.runtime:runtime-*:1.0.0-alpha02 แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่ม API ของ snapshotFlow และ withMutableSnapshot เพื่อใช้งาน และทำการเปลี่ยนแปลงข้อมูลสแนปชอต (I3e722)
  • แบบแผนการเรียกใช้สำหรับฟังก์ชันที่ประกอบกันได้มี มีการเปลี่ยนแปลง นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบไบนารี ห้องสมุดทั้งหมดต้องเป็น ได้รับการคอมไพล์ซ้ำเพื่อให้ทำงานร่วมกับปลั๊กอินคอมไพเลอร์ Compose เวอร์ชันนี้ได้

    การเปลี่ยนแปลงนี้จะไม่สร้างการเปลี่ยนแปลงช่วงพักโฆษณาระดับแหล่งที่มาเนื่องจาก เฉพาะ API ที่มีการเปลี่ยนแปลงคือ API ของคอมไพเลอร์ที่มีโค้ด เลือกใช้ (I7afd2, b/158123185)

  • นำวิธีการกำหนดเวลาออกจาก EmbeddingContext (I7b9be) แล้ว

  • เลิกใช้งาน onPreCommit แล้ว ตอนนี้ onCommit มีใน PreCommit พฤติกรรมของคุณ

    onCommit และ onActive จะทำงานในเฟรมนักออกแบบท่าเต้นเดียวกัน การเปลี่ยนแปลงองค์ประกอบที่กระทำในตอนต้น ไม่ใช่ตอนต้น ของนักออกแบบท่าเต้นถัดไป (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)

  • ขณะนี้ Composable ของ state { ... } เลิกใช้งานแล้วเพื่อให้ การเรียกไปที่ remember { mutableStateOf(...) } อย่างชัดแจ้งเพื่อความชัดเจน การดำเนินการนี้จะลดแพลตฟอร์ม API โดยรวมและจำนวนแนวคิดสำหรับสถานะ การจัดการ และตรงกับรูปแบบ by mutableStateOf() สำหรับชั้นเรียน การมอบสิทธิ์พร็อพเพอร์ตี้ (Ia5727)

  • ตอนนี้ Flow.collectAsState จะระบุตัวส่งเริ่มต้นจาก องค์ประกอบเหล่านี้ แทนที่จะกำหนดค่าเริ่มต้นเป็น Dispatchers.Main (I9c1d9)

  • ขัดข้องเมื่อมีการแก้ไขสิ่งที่บันทึกสถานะไว้ภายในสำหรับวนซ้ำ การมีคีย์เดียวกันใน savedInstanceState() ได้รับอนุญาตแล้ว ตอนนี้ API ของ UiSavedStateRegistry จึงมีการปรับตามข้อกำหนดใหม่นี้ (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

แก้ไขข้อบกพร่อง

  • emitView เลิกใช้งานแล้ว ใช้ AndroidView แทนหากทำได้เพื่อปล่อย View ภายใน Compose โปรดทราบว่าระบบจะไม่รองรับการเขียน View และ ViewGroups โดยตรงในอนาคตเว้นแต่จะออกมาอยู่ในแผนผังองค์ประกอบ ทั้งในกรณีที่ใช้ 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 ที่ยังคงใช้ ที่อิงจากนาฬิกา Callback

    ตอนนี้เทียบเท่ากับ MonotonicFrameClock ของ ManualAnimationClock ManualFrameClock (I111c7, b/161247083)

  • Modifier.stateDraggable มีการแก้ไขทั้งหมด และเปลี่ยนชื่อ เป็น Modifier.swipeable มีการเริ่มใช้คลาส ScrollableState แบบใหม่และ DrawerState และ BottomDrawerState มีการเปลี่ยนโครงสร้างภายในโค้ดเพื่อรับค่า [Modal/Bottom]DrawerLayout ไม่ต้องใช้พารามิเตอร์ onStateChange อีกต่อไป (I72332, b/148023068)

  • เลิกใช้งาน Modifier.plus แล้ว โปรดใช้ Modifier.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 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • หากต้องการใช้ Compose เวอร์ชัน 0.1.0-dev15 คุณจะต้องอัปเดตทรัพยากร Dependency ตามข้อมูลโค้ดใหม่ที่แสดงด้านบนในการประกาศทรัพยากร Dependency

การเปลี่ยนแปลง API

  • เลิกใช้งานคำอธิบายประกอบ @Model แล้ว ใช้ State และ mutableStateOf แทนก็ได้ การตัดสินใจเกี่ยวกับการเลิกใช้งานนี้เกิดขึ้นหลังจากการพูดคุยอย่างรอบคอบแล้ว

    การให้เหตุผล

    เหตุผลรวมถึงแต่ไม่จำกัดเพียงรายการต่อไปนี้

    • ลดพื้นที่บนพื้นผิวของ API และแนวคิดที่เราต้องสอน
    • มีความสอดคล้องกับชุดเครื่องมืออื่นๆ ที่คล้ายกันมากขึ้น (Swift UI, React, Flutter)
    • ยกเลิกคำตัดสินได้ เรานำ @Model กลับมาได้ทุกเมื่อ
    • นำการใช้งานที่เป็นกรณีมุมออกและตอบคำถามที่ยากเกี่ยวกับการกำหนดค่า @Model เนื่องจากเราต้องจัดการ
    • คลาสข้อมูล @Model, เท่ากับ, แฮชโค้ด ฯลฯ
    • ฉันจะมีที่พักบางแห่งที่ "สังเกตได้" และที่พักอื่นๆ ไม่มีได้อย่างไร
    • ฉันจะระบุความเท่าเทียมเชิงโครงสร้างเทียบกับการอ้างอิงที่จะใช้ในการสังเกตได้อย่างไร
    • ลด "ความมหัศจรรย์" ในระบบ จะลดโอกาสที่ระบบจะคิดว่าระบบฉลาดกว่าที่เป็นอยู่ (เช่น รู้ว่าจำแนกรายการอย่างไร)
    • ทำให้อ่านรายละเอียดของการสังเกตได้ง่ายขึ้น
    • ปรับปรุงความสามารถในการเปลี่ยนโครงสร้างจากตัวแปร -> พร็อพเพอร์ตี้ในชั้นเรียน
    • อาจช่วยให้คุณมีโอกาสทำการเพิ่มประสิทธิภาพเฉพาะรัฐที่สร้างสรรค์ขึ้นเอง
    • มีความสอดคล้องกับระบบนิเวศอื่นๆ มากขึ้นและลดความคลุมเครือเกี่ยวกับการเปลี่ยนแปลงที่เปลี่ยนแปลงไม่ได้หรือช่วยให้เรา "ยอมรับสถานะที่เปลี่ยนแปลงได้"

    หมายเหตุการย้ายข้อมูล

    การใช้งาน @Model ที่มีอยู่เกือบทั้งหมดมีการเปลี่ยนแปลงเพียงเล็กน้อยด้วยวิธีใดวิธีหนึ่งจาก 2 วิธีต่อไปนี้ ตัวอย่างด้านล่างมีคลาส @Model ที่มีพร็อพเพอร์ตี้ 2 รายการเพียงแค่ตัวอย่าง และมีการใช้ใน Composable

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    ทางเลือกที่ 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, {1263/143})

  • เปลี่ยนกลยุทธ์การสร้างโค้ดของคอมไพเลอร์ของ Compose ก่อนการเปลี่ยนแปลง คอมไพเลอร์การเขียนจะเปลี่ยนรูปแบบการเรียกไปยังฟังก์ชันที่ประกอบกันได้ จากการเปลี่ยนแปลงนี้ เราจึงเปลี่ยนรูปแบบการทำงานของฟังก์ชัน Composable และไม่เปลี่ยนแปลง Callsite (ส่วนใหญ่)

    ซึ่งหมายความว่าตรรกะที่สื่อสารกับรันไทม์การเขียนส่วนใหญ่จะเกิดขึ้นที่จุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน ไม่ใช่ที่ Callsite

    การเปลี่ยนแปลงนี้ควรเป็นการเปลี่ยนแปลงที่เข้ากันได้กับต้นทางสำหรับการใช้งานการเขียนทั้งหมด ผู้ใช้การเขียนส่วนใหญ่ไม่ควรต้องอัปเดตโค้ดใดๆ จากการเปลี่ยนแปลงนี้

    เพื่อที่จะรองรับงานนี้ ลายเซ็น JVM ของฟังก์ชัน Composable ทั้งหมดมีการเปลี่ยนแปลง ฟังก์ชัน Composable ที่ยอมรับพารามิเตอร์เดียวจะเปลี่ยนเป็นฟังก์ชันที่รับพารามิเตอร์ 3 รายการ พารามิเตอร์เพิ่มเติมคือ Composer ซึ่งเป็นจำนวนเต็ม "key" จำนวนเต็มบิตมาสก์ที่ใช้เผยแพร่ข้อมูลเมตาผ่านการเรียกใช้

    ขณะนี้ Compose จะเปลี่ยนอาร์กิวเมนต์เริ่มต้นเป็นฟังก์ชัน Composable ด้วย โดยไม่เพิ่มภาระงานสังเคราะห์ที่เกินจากปกติของฟังก์ชันเอง ดังนั้นการเปลี่ยนแปลงนี้จะส่งผลให้มีการกำหนดฟังก์ชันน้อยลง

    การเปลี่ยนแปลงพฤติกรรมโดยเจตนาที่ทราบซึ่งเกิดจากสิ่งต่อไปนี้

    1. การโทรบางครั้งจะข้ามจากที่ที่ไม่เคยทำมาก่อน
    2. นิพจน์ที่ประกอบกันได้ในนิพจน์อาร์กิวเมนต์เริ่มต้นได้รับการติดตามและจัดการอย่างถูกต้อง

    งานนี้มีการเพิ่มประสิทธิภาพบางอย่าง: 1. ผลลัพธ์ของการเปรียบเทียบพารามิเตอร์จะเผยแพร่ผ่านการเรียกใช้กราฟไปยังฟังก์ชันที่ประกอบกันได้อื่นๆ ซึ่งจะส่งผลให้การเปรียบเทียบน้อยลงขณะรันไทม์ ลดขนาดตารางช่อง รวมถึงการข้ามฟังก์ชันที่ประกอบกันได้ซึ่งก่อนหน้านี้ไม่ได้ข้ามได้มากขึ้น 2. ระบบจะไม่เปรียบเทียบหรือจัดเก็บพารามิเตอร์ที่พิจารณาแล้วว่าเป็น "คงที่" ในเวลาคอมไพล์อีกต่อไป ซึ่งจะลดจำนวนการเปรียบเทียบและลดขนาดตารางช่อง 3. ระบบจะใช้โครงสร้างการควบคุมโฟลว์ของฟังก์ชันเพื่อลดจำนวนกลุ่มที่สร้างขึ้น การดำเนินการนี้จะลดขนาดตารางของสล็อตและทำให้การทำงานสำหรับรันไทม์ลดลง 4. พารามิเตอร์การจ่ายงานและตัวรับสัญญาณที่ไม่ได้ใช้กับฟังก์ชันจะไม่รวมอยู่ในการพิจารณาความสามารถในการข้ามของฟังก์ชันหากไม่ได้ใช้ภายในส่วนเนื้อหาของฟังก์ชัน

    การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นส่วนใหญ่เกี่ยวข้องกับ API ที่คอมไพเลอร์กำหนดเป้าหมายโดยตรง และการใช้งานการเขียนโดยทั่วไปจะไม่ได้รับผลกระทบ ดังนี้ 1. นำ Composer::startExpr ออกแล้ว 2. นำ Composer::endExpr ออกแล้ว 3. Composer::call เลิกใช้งานแล้ว 4. นำไฟล์ที่ไม่ใช่ภาษาวาร์ราร์โหลดมากเกินไปของ key ออกแล้ว โปรดใช้เวอร์ชัน vararg นับจากนี้ไป 5. เลิกใช้งานคำอธิบายประกอบ Pivotal แล้ว โปรดใช้ key เป็นการแทน 6. มีการเปลี่ยนแปลง ScopeUpdateScope::updateScope 7. RestartableFunction และRestartableFunctionN แล้ว เพื่อรวมพารามิเตอร์เวลาการคอมไพล์เพิ่มเติม (I60756, b/143464846)

  • เพิ่ม SortWith และ removeRange ไปยัง MutableVector (Icccf7)

  • เพิ่มการใช้งานเมธอดเริ่มต้นสำหรับ CompositionLifecycleObserver (I24289)

  • ขณะนี้ Applier ต้องใช้เมธอด clear() ในการกำจัด งานประพันธ์เพลง (Ibe697)

  • เพิ่ม asMutableList() ใน MutableVector เพื่ออนุญาตให้ ไปยัง API สาธารณะได้โดยไม่ต้องคัดลอก รายการ (I298df)

  • เพิ่ม RememberCoroutineScope() แล้วเพื่อรับ CoroutineScope ในองค์ประกอบสำหรับการเปิดงานตามเหตุการณ์ต่างๆ (I0e264)

  • MutableVector เป็นคอลเล็กชันใหม่ที่ไม่ ใช้อินเทอร์เฟซการรวบรวมข้อมูลมาตรฐาน ช่วงเวลานี้ ของ Google ให้ความเร็วเหนือข้อกำหนดอื่นๆ และ มีไว้เพื่อการใช้งานภายในเท่านั้น (I8ebd6)

  • นำ StableMutableList และ StableMutableMap ออกชั่วคราวแล้ว เพื่อหลีกเลี่ยงปัญหาในเวอร์ชันการเขียน Kotlin ต้องใช้ เหล่านี้ อินเทอร์เฟซจะกลับมาใช้งานได้อีกครั้งเมื่อมีการอัปเดตการเขียนเป็นเวอร์ชัน ของ Kotlin ที่ไม่มีปัญหา

    ขณะนี้ SnapshotStateList และ SnapshotStateMap เป็นแบบสาธารณะแล้ว แต่จะแสดง เลิกใช้งานเมื่อกู้คืน StableMutableList และ StableMutableMap แล้ว (Ia7769)

  • เพิ่มฟังก์ชัน withFrameNanos ระดับบนสุดสำหรับเวลาของภาพเคลื่อนไหว (Ie34c5)

  • เลิกใช้งานคำอธิบายประกอบ @ที่ไม่ได้ติดตามแล้ว แทนที่ด้วย @ComposableContract(tracked=false) (Id211e)

  • RestartableFunction และ API ที่เชื่อมโยงได้เปลี่ยนชื่อเป็น ComposableLambda เป็นต้น การเปลี่ยนชื่อนั้นทำเพื่อสื่อสารว่าคลาสนี้มีประสิทธิภาพอย่างไรเมื่อแสดงในสแต็กเทรซ (I7eb25)

  • คำอธิบายประกอบ @Composable ใช้ไม่ได้ในชั้นเรียนแล้ว (Ia5f02)

  • Ambient<T> เปลี่ยนเป็น @Stable แทนที่จะเป็น @Immutable (I0b4bb)

  • ก่อนการเปลี่ยนแปลงนี้ ปลั๊กอินคอมไพเลอร์ของการเขียนจะสกัดกั้นการเรียกไปยังตัวสร้างภายในฟังก์ชัน @Composable หากมี (I5205a, b/158123804)

  • การ Compose ที่เรียบเรียงใหม่จะไม่ใช่สิ่งที่มีประโยชน์อีกต่อไป การจัดองค์ประกอบใหม่ส่วนใหญ่ควรเป็นผลมาจากการมอบหมาย MutableState สำหรับสิ่งอื่นนอกเหนือจากนี้ ขอแนะนำให้คุณใช้ฟังก์ชัน invalidate เพื่อทริกเกอร์การจัดองค์ประกอบขอบเขตปัจจุบันใหม่ (Ifc992)

  • การสังเกตการณ์ไม่ใช่บทคัดย่อที่มีประโยชน์อีกต่อไป หากต้องการทำซ้ำ คุณสามารถจำลองการใช้งานได้โดยสร้างฟังก์ชัน Composable ซึ่งจะเรียกใช้พารามิเตอร์ lambda แบบ Composable เช่น @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • @Direct เลิกใช้งานแล้วเพื่อใช้ @ComposableContract(restartable=false) (If4708) แทน

  • เพิ่มอะแดปเตอร์สำหรับ StateFlow ที่เพิ่งแนะนำซึ่งอนุญาตให้เติมค่าเริ่มต้นล่วงหน้าเพื่อให้สถานะที่แสดงผลเป็นค่าว่างไม่ได้ (I61dd8, b/156233789)

  • เพิ่มอะแดปเตอร์สำหรับ Flow แล้ว ตัวอย่างการใช้งาน: ค่า val ตาม 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 ออกแล้ว ซึ่งจะไม่ใช่ Use Case ที่รองรับอีกต่อไป 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)

  • อัปเดตแฟล็ก ComposeFlags.COMPOSER_PARAM เป็น true ซึ่งจะเปลี่ยนกลยุทธ์การสร้างโค้ดสำหรับปลั๊กอินการเขียน การดำเนินการนี้จะทำให้มีการสร้างฟังก์ชัน @Composable ขึ้นพร้อมกับพารามิเตอร์สังเคราะห์เพิ่มเติม ซึ่งส่งผ่านไปยังการเรียก @Composable ที่ตามมาเพื่อให้รันไทม์จัดการการดำเนินการได้อย่างเหมาะสม นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในไบนารีที่สำคัญ อย่างไรก็ตาม ควรรักษาความเข้ากันได้ระดับต้นทางในการใช้งานการเขียนที่ถูกคว่ำบาตรทั้งหมด (I7971C)

  • การเปลี่ยนแปลงที่ส่งผลกับ Environments API โปรดดูรายละเอียดในบันทึกและเอกสาร Ambient<T> (I4c7ee, b/143769776)

  • เพิ่ม UI-livedata - อาร์ติแฟกต์ใหม่ด้วยอะแดปเตอร์สำหรับ LiveData ตัวอย่างการใช้งาน: ค่า val ตาม LiveData.observeAsState() (Ie9e8c, b/150465596)

  • อะแดปเตอร์ Rx ที่ไม่มีค่าเริ่มต้นที่ชัดเจนเลิกใช้งานแล้ว การใช้ null อาจไม่ใช่ค่าเริ่มต้นที่ดีที่สุดเสมอไป ตัวอย่างเช่น เมื่อคุณมี "รายการ" จะเป็นการดีกว่าที่จะเริ่มต้นด้วย emptyList() หรือค่าเริ่มต้นอื่นๆ ที่สมเหตุสมผล (I00025, b/161348384)

  • เพิ่ม ui-rxjava2 - อาร์ติแฟกต์ใหม่พร้อมอะแดปเตอร์สำหรับ RxJava2 ตัวอย่างการใช้งาน: ค่า val ตาม observable.applyAsState() (Ifab4b, b/153369097)

  • ตอนนี้สามารถใช้ savedInstanceState() กับประเภทที่เว้นว่างได้ (I6847f, b/153532190)

  • listSaver() และ MapSaver() ใหม่ที่ช่วยให้เขียนออบเจ็กต์ของ Save ที่กำหนดเองได้ง่ายขึ้น (I8cf68, b/152331508)

  • ฟังก์ชันใหม่: savedInstanceState() และ RememberSavedInstanceState() พารามิเตอร์เหล่านี้คล้ายกับ State() และ Remember() แต่มีการสนับสนุนสถานะอินสแตนซ์ที่บันทึกไว้ (If1987, b/152025209)

แก้ไขข้อบกพร่อง

  • runOnIdleCompose เปลี่ยนชื่อเป็น runOnIdle (I83607)
  • Made LayoutNode รุ่นทดลอง (I4f2e9)
  • androidx.ui.foundation.TextFieldValue และ เลิกใช้งาน androidx.ui.input.EditorValue แล้ว ฟิลด์ข้อความ FilledTextField และ CoreTextField ที่ใช้ Composable ที่ใช้ ประเภทนั้นก็เลิกใช้งานแล้วด้วย โปรดใช้ androidx.ui.input.TextFieldValue แทน (I4066d, b/155211005)
  • นำ DrawBackground ที่เลิกใช้งานแล้วออก API เปลี่ยนไปใช้ส่วนขยาย DrawBackground API ใน Modifier เปลี่ยนโครงสร้างภายในโค้ดแล้ว สี พู่กัน และระบายสี การวาดพื้นหลัง การใช้งานเพื่อลดเส้นทางโค้ดด้วยเช่นกัน เป็นข้อกำหนดในการลบตัวปรับแต่งให้สร้างขึ้น เพื่อเป็นส่วนหนึ่งของการเขียน (I0343a)
  • อัปเดตระดับสูงขึ้นแล้ว เขียน API ที่เปิดเผย Canvas ต่อ แสดง CanvasScope แทน การดำเนินการนี้จะนำ ความต้องการของผู้บริโภคในการรักษา เป็นเจ้าของออบเจ็กต์ Paint สำหรับผู้บริโภคที่ ยังคงต้องการเข้าถึง Canvas ก็สามารถใช้ส่วนขยาย DrawCanvas ที่ให้ผลลัพธ์ Callback ไปยังปัญหา ให้วาดคำสั่งด้วยฟังก์ชัน Canvas (I80afd)
  • มีการเปลี่ยนแปลงด้วย WithConstraints ต่อท้าย lambda API จากนี้จะมีเพียง 2 พารามิเตอร์ แต่กลับมีขอบเขตตัวรับ ซึ่งนอกเหนือจากข้อจำกัดและการจัดวางDirection ยังมีคุณสมบัติ minWidth, maxWidth, minHeight และ maxHeight ใน Dp (I91b9a, b/149979702)
  • เพิ่มตัวแก้ไขระยะห่างจากขอบแบบสมมาตรแล้ว (I39840)
  • อัปเดต wrapContentWidth และ wrapContentHeight เพื่อคงการปรับแนวในแนวตั้งหรือแนวนอนแทนการจัดแนวใดๆ อัปเดตเครื่องแก้ไขแรงโน้มถ่วงให้ยอมรับการปรับแนวในแนวตั้งหรือแนวนอน มีการอัปเดตแถว คอลัมน์ และสแต็กเพื่อรองรับการปรับแนวอย่างต่อเนื่องแบบกำหนดเอง (Ib0728)
  • โมดูลข้อความ UI เปลี่ยนชื่อเป็น ui-text-core (I57dec)
  • ปรับปรุง DrawModifier API:
    • สร้างขอบเขตตัวรับสำหรับDraw() ContentDrawScope
    • นำพารามิเตอร์ทั้งหมดในDraw() ออก
    • DrawScope มีอินเทอร์เฟซเดียวกันกับ CanvasScope เดิม
    • ContentDrawScope มีเมธอดDrawContent() (Ibaced, b/152919067)
  • เลิกใช้งาน ColoredRect แล้ว โปรดใช้ Box(Modifier.preferredSize(width, height).drawBackground(color)) แทน (I499fa, b/152753731)
  • เปลี่ยนตัวปรับแต่งและโอเปอเรเตอร์ด้วยฟังก์ชันส่วนขยายจากโรงงาน (I225e4)
  • ขณะนี้สมาชิก RowScope และ ColumnScope สามารถเข้าถึงได้นอกแถวและคอลัมน์ (I3a641)
  • เปลี่ยนชื่อ Layoutแบบยืดหยุ่น เป็น Layoutweight แล้ว เปลี่ยนชื่อพารามิเตอร์ที่เข้มงวดเพื่อเติมแล้ว (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)