รันไทม์คอมโพสิท

องค์ประกอบพื้นฐานของรูปแบบการเขียนโปรแกรมและการจัดการสถานะของ Compose รวมถึงรันไทม์หลักสำหรับกำหนดเป้าหมายปลั๊กอินคอมไพเลอร์ Compose
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
13 พฤศจิกายน 2024 1.7.5 - - 1.8.0-alpha06

โครงสร้าง

คอมโพซเป็นชุดค่าผสมของรหัสกลุ่ม Maven 7 รายการภายใน androidx กลุ่มแต่ละกลุ่มประกอบด้วยชุดฟังก์ชันการทำงานย่อยที่กำหนดเป้าหมายไว้ โดยแต่ละกลุ่มจะมีชุดหมายเหตุการเผยแพร่ของตัวเอง

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

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

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

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

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

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

ความคิดเห็น

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

สร้างปัญหาใหม่

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

การติดตามรันไทม์เวอร์ชัน 1.7

เวอร์ชัน 1.7.0-rc01

18 กันยายน 2024

androidx.compose.runtime:runtime-tracing:1.7.0-rc01 ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-rc01 มีการคอมมิตเหล่านี้

การติดตามรันไทม์เวอร์ชัน 1.0

เวอร์ชัน 1.0.0-beta01

29 พฤศจิกายน 2023

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

เวอร์ชัน 1.0.0-alpha05

15 พฤศจิกายน 2023

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

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

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

เวอร์ชัน 1.0.0-alpha04

23 สิงหาคม 2023

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

ฟีเจอร์ใหม่

  • เข้ากันได้กับ Perfetto เวอร์ชันล่าสุดสำหรับการเปรียบเทียบและการติดตาม ซึ่งจะรองรับการติดตามการคอมโพสิชันเมื่อแอปเริ่มต้น (การเริ่มต้นแบบ Cold Start) เช่น ใน AndroidX Benchmark และ Android Studio (ตั้งแต่ Hedgehog เบต้า 2 เป็นต้นไป)

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

  • เปลี่ยนชื่อ androidx.tracing.perfetto.Trace เป็น androidx.tracing.perfetto.PerfettoSdkTrace แล้ว (I44af8)
  • ทําให้ Tracing Perfetto SDK API สอดคล้องกับ android.os.Trace (I73ba0, b/282199917)
  • ข้อกําหนดเบื้องต้นในการติดตามเมื่อเริ่มต้นแอป (Iad890)
  • ผสานไฟล์ API เวอร์ชันทดลองและเวอร์ชันสาธารณะ (I0f2e1, b/278769092)

เวอร์ชัน 1.0.0-alpha02

8 กุมภาพันธ์ 2023

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

ฟีเจอร์ใหม่

  • ไม่มีการเปลี่ยนแปลงฟังก์ชันการทำงาน การเพิ่มประสิทธิภาพหลายรายการในรายการที่ขึ้นต่อกันในลำดับถัดไป androidx.tracing:tracing-perfetto*

เวอร์ชัน 1.0.0-alpha01

7 กันยายน 2022

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

ฟีเจอร์ใหม่

  • androidx.compose.runtime:runtime-tracing เป็นไลบรารีที่ช่วยให้สามารถติดตามเพิ่มเติมในแอป Compose ได้เมื่อมีเครื่องมือที่รองรับ (เร็วๆ นี้) เวอร์ชันเริ่มต้นนี้คือ 1.0.0-alpha01

เวอร์ชัน 1.8

เวอร์ชัน 1.8.0-alpha06

13 พฤศจิกายน 2024

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

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

  • การเปลี่ยนแปลงใน PausableComposition API การเปลี่ยนแปลงเหล่านี้เป็นการเปลี่ยนแปลงที่ส่งผลต่อรุ่นก่อนหน้าของ 1.8.0-alpha (ตั้งแต่ 1.8.0-alpha02) แต่เนื่องจากเป็น API ใหม่ใน 1.8.0 จึงไม่มีการรองรับการทำงานร่วมกันแบบย้อนหลังเนื่องจาก API ยังอยู่ในรุ่นอัลฟ่า (I39819)
  • เพิ่ม API เครื่องมือเพื่อสังเกตการสร้างการประพันธ์เพลงใหม่ภายใน Recomposer (Iaeb7e)
  • เพิ่ม snapshotId ประเภท Long ไปยัง Snapshot และเลิกใช้งาน id รหัสของสแนปชอตเปลี่ยนจาก Int เป็น Long เพื่อไม่ให้รหัสสแนปชอตเกินขอบเขตในระบบที่มีอัตราเฟรมสูงมากและภาพเคลื่อนไหวที่ทำงานเป็นเวลานาน ประเภทนี้สร้างขึ้นเพื่อคาดหวัง/จริงเพื่อให้ประเภทนี้เป็น Int หรือประเภทอื่นๆ ในแพลตฟอร์มที่ไม่มีประเภท Long เนทีฟ แพลตฟอร์มที่ไม่มี Long ดั้งเดิม เช่น JavaScript ควรหลีกเลี่ยงอัตราเฟรมที่สูง (มากกว่า 1,000 FPS) ซึ่งจะทำให้ Int ล้นทุกๆ 24 วันโดยประมาณ (I38ac3, b/374821679)

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

  • providesDefault แบบคงที่สำหรับ provides รายการเดียว (aosp/3318540 b/374263387)
  • เพิ่มประสิทธิภาพ ChangeList (3318538)

เวอร์ชัน 1.8.0-alpha05

30 ตุลาคม 2024

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

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

  • แก้ไขข้อผิดพลาดที่หน่วยความจำสำรองไม่เพียงพอเมื่อเพิ่ม Int.MAX_VALUE ลงใน SnapshotIdSet (b/370536104, Ic4179f6)
  • การเพิ่มประสิทธิภาพแบบไมโครรันไทม์ (I50c60)
  • อนุญาตให้ R8 นำการเรียกใช้ runtimeCheck สำหรับการแก้ไขข้อบกพร่องออก (I8c44)
  • ทําให้ compoundKeyOf เป็นแบบซ้ำแทนแบบเรียกซ้ำ (I5817f)

การมีส่วนร่วมจากภายนอก

  • ใช้กองกับรายการคอลเล็กชัน (I7d47c)

เวอร์ชัน 1.8.0-alpha04

16 ตุลาคม 2024

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

การปรับปรุงประสิทธิภาพ

  • ระบุรหัสสแนปชอตสำหรับระเบียนสถานะในคอนสตรัคเตอร์ (85c00f)
  • ปรับโครงสร้าง SnapshotState*** เพื่อหลีกเลี่ยงข้อผิดพลาดในการยืนยันชั้นเรียน (6ee4a6)
  • แก้ไขกฎ R8 เพื่อป้องกันการจัดวางบรรทัดคำสั่ง Throw (5beb92)
  • เพิ่มประสิทธิภาพการดำเนินการแบบละเอียด (d73c5c)
  • เพิ่มประสิทธิภาพการจัดสรร SynchronizedObject ใน JVM (2b043f)

เวอร์ชัน 1.8.0-alpha03

2 ตุลาคม 2024

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

การปรับปรุงประสิทธิภาพ

  • สร้างบริบทย่อยสําหรับ rememberCoroutineScope (f61464) แบบล่าช้า
    • โดยทั่วไป rememberCoroutineScope จะใช้เพื่อเปิดใช้ coroutine เพื่อตอบสนองต่อเหตุการณ์ที่เกิดขึ้นหลังการคอมโพสิชัน ในบางสถานการณ์ เหตุการณ์เหล่านี้อาจไม่เกิดขึ้นเลย ซึ่งจะทำให้เกิดค่าใช้จ่ายเพิ่มเติมในการสร้างและการยกเลิกงานโดยไม่มีสิทธิประโยชน์ใดๆ
    • ทําให้ขอบเขตที่ rememberCoroutineScope แสดงผลสร้าง coroutineContext แบบล่าช้าเมื่อเข้าถึง ซึ่งจะหลีกเลี่ยงการสร้างและการยกเลิกงานโดยสิ้นเชิงหากไม่มีการใช้ขอบเขต

เวอร์ชัน 1.8.0-alpha02

18 กันยายน 2024

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

ฟีเจอร์ใหม่

  • เพิ่ม PausableComposition ซึ่งช่วยให้สร้างการคอมโพสิตย่อยที่หยุดชั่วคราวระหว่างการคอมโพสิตได้ และนำไปใช้กับองค์ประกอบแบบไม่พร้อมกัน จำเป็นต้องมีการรองรับคอมไพเลอร์สำหรับการหยุดชั่วคราว ซึ่งอยู่ระหว่างการพัฒนา (I3394b)

เวอร์ชัน 1.8.0-alpha01

4 กันยายน 2024

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

เวอร์ชัน 1.7

เวอร์ชัน 1.7.5

30 ตุลาคม 2024

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

เวอร์ชัน 1.7.4

16 ตุลาคม 2024

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

เวอร์ชัน 1.7.3

2 ตุลาคม 2024

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

เวอร์ชัน 1.7.2

18 กันยายน 2024

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

เวอร์ชัน 1.7.1

10 กันยายน 2024

  • ไม่มีการเปลี่ยนแปลงอาร์ติแฟกต์ Android นําอาร์ติแฟกต์ -desktop รายการออกและเพิ่มอาร์ติแฟกต์ -jvmStubs และ -linuxx64Stubs รายการ เป้าหมายเหล่านี้ไม่ได้มีไว้เพื่อใช้งาน แต่เป็นตัวยึดตําแหน่งเพื่อช่วยในการใช้งาน Jetbrains Compose

เวอร์ชัน 1.7.0

4 กันยายน 2024

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.6.0

  • เพิ่มความสามารถในการระบุองค์ประกอบในเครื่องที่คำนวณตามค่าขององค์ประกอบในเครื่องอื่นๆ โดยค่าเริ่มต้น โดยใช้ compositionLocalWithComputedDefault() หรือโดยการระบุ Lambda เพื่อใช้คำนวณค่าโดยใช้ providesComputed แทน provides
  • คุณดูค่าของคอมโพสิชันภายในได้โดยใช้พร็อพเพอร์ตี้ currentValue ของคอมโพสิชันภายในที่เข้าถึงได้จากภายใน lambda ที่คำนวณค่า ใช้แทน current ซึ่งเข้าถึงได้ในฟังก์ชัน @Composable เท่านั้น (Iadbc0)
  • ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลางด้วยสถานะเริ่มต้น คุณจะไม่เห็นการแก้ไขใดๆ ในภายหลังจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
  • สถานะเริ่มต้นของ mutableStateOf() รวมถึงเวอร์ชันพื้นฐานของ mutableStateOf() คือค่าที่ส่งเป็นพารามิเตอร์ไปยัง mutableStateOf() สถานะเริ่มต้นของ mutableStateListOf() และ mutableStateMapOf() ว่างเปล่า
  • เพิ่ม Snapshot.isInSnapshot และ Snapshot.PreexistingSnapshotId ที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้เข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้าง
  • ออบเจ็กต์สถานะที่กําหนดเองสามารถเข้าถึงได้ทันทีโดยทําตามรูปแบบการเปลี่ยนแปลงที่เกิดขึ้นกับออบเจ็กต์สแนปชอตในตัว (I84a17)
  • เปิดใช้ nonSkippingGroupOptimization สำหรับคลังการเขียน ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันคอมโพสิเบิลที่ไม่สามารถรีสตาร์ทได้ทั้งหมดใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08)
  • ทำให้ Lambda แบบคอมโพสิเบิลในคอมโพสิชันย่อยในเฟรมเดียวกันเป็นโมฆะ (98301c)
  • โทรกลับ onRelease ตามลําดับเดียวกับ onForgotten (2cd790)
  • เปิดใช้โหมดข้ามที่มีประสิทธิภาพ (ed1766)
  • ทําให้ currentCompoundHashKey ไม่เหมือนใครในหลายๆ กรณี (d4a872)

เวอร์ชัน 1.7.0-rc01

21 สิงหาคม 2024

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

เวอร์ชัน 1.7.0-beta07

7 สิงหาคม 2024

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

เวอร์ชัน 1.7.0-beta06

24 กรกฎาคม 2024

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

เวอร์ชัน 1.7.0-beta05

10 กรกฎาคม 2024

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

เวอร์ชัน 1.7.0-beta04

26 มิถุนายน 2024

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

เวอร์ชัน 1.7.0-beta03

12 มิถุนายน 2024

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

เวอร์ชัน 1.7.0-beta02

29 พฤษภาคม 2024

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

เวอร์ชัน 1.7.0-beta01

14 พฤษภาคม 2024

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

เวอร์ชัน 1.7.0-alpha08

1 พฤษภาคม 2024

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

เวอร์ชัน 1.7.0-alpha07

17 เมษายน 2024

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

ฟีเจอร์ใหม่

  • เพิ่มความสามารถในการระบุองค์ประกอบในเครื่องที่คำนวณตามค่าขององค์ประกอบในเครื่องอื่นๆ โดยค่าเริ่มต้น โดยใช้ compositionLocalWithComputedDefault() หรือโดยการระบุ Lambda เพื่อใช้คำนวณค่าโดยใช้ providesComputed แทน provides
  • คุณดูค่าของคอมโพสิชันภายในได้โดยใช้พร็อพเพอร์ตี้ currentValue ของคอมโพสิชันภายในที่เข้าถึงได้จากภายใน lambda ที่คำนวณค่า ใช้แทน current ซึ่งเข้าถึงได้ในฟังก์ชัน @Composable เท่านั้น (Iadbc0)

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

  • ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลางด้วยสถานะเริ่มต้น คุณจะไม่เห็นการแก้ไขใดๆ ในภายหลังจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
  • สถานะเริ่มต้นของ mutableStateOf() รวมถึงเวอร์ชันพื้นฐานของ mutableStateOf() คือค่าที่ส่งเป็นพารามิเตอร์ไปยัง mutableStateOf() สถานะเริ่มต้นของ mutableStateListOf() และ mutableStateMapOf() ว่างเปล่า
  • เพิ่ม Snapshot.isInSnapshot และ Snapshot.PreexistingSnapshotId ที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้เข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้าง
  • ออบเจ็กต์สถานะที่กําหนดเองสามารถเข้าถึงได้ทันทีโดยทําตามรูปแบบการเปลี่ยนแปลงที่เกิดขึ้นกับออบเจ็กต์สแนปชอตในตัว (I84a17)

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

  • แก้ไขการผสาน readObserver ในสแนปชอตที่ฝัง ซึ่งทําให้สถานะที่มาจากภายในซ้อนกันถูกทำให้เป็นโมฆะไม่เพียงพอเมื่อใช้ใน snapshotFlow (Idf138)

เวอร์ชัน 1.7.0-alpha06

3 เมษายน 2024

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

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

  • แก้ไขการจัดการค่าเดี่ยว providesDefault (538f45)
  • หลีกเลี่ยงการล็อกตายใน Recomposer ที่เข้าถึงนาฬิกาเฟรม (07e5c6)

เวอร์ชัน 1.7.0-alpha05

20 มีนาคม 2024

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

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

  • ล้างการเปลี่ยนแปลงล่าสุดในผลงานที่ปิดใช้งาน (5950bc)

เวอร์ชัน 1.7.0-alpha04

6 มีนาคม 2024

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

การปรับปรุงประสิทธิภาพ

  • เรียก Snapshot.current 1 ครั้งต่อการประเมินสถานะที่ได้จากข้อมูล (ee7daf)
  • อ่าน currentRecord 1 ครั้งต่อการตรวจสอบในองค์ประกอบ (b882b2)
  • นำการจัดสรรตัวนับโดยไม่ตั้งใจใน snapshotFlow (231e56) ออก
  • เปิดใช้ nonSkippingGroupOptimization สำหรับคลังการเขียน ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันคอมโพสิเบิลที่ไม่สามารถรีสตาร์ทได้ทั้งหมดใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08)

เวอร์ชัน 1.7.0-alpha03

21 กุมภาพันธ์ 2024

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

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

  • เปิดตัวกลุ่ม "แทนที่" เพื่อปรับปรุงการตรวจหาการเปลี่ยนแปลง (0941b5)

การปรับปรุงประสิทธิภาพ

  • ปรับปรุงการจัดสรรหน่วยความจำเมื่อตรวจพบการเปลี่ยนแปลง (53e7fd)
  • แก้ไขหน่วยความจำรั่วไหลในคอมโพเซอร์ (0e097d)
  • ใช้ ScopeMap เพื่อส่งการลบล้างเมื่อจัดเรียงใหม่ (e19a7e)
  • เพิ่มประสิทธิภาพแผนที่การระบุว่าไม่ถูกต้องเพื่อเก็บเฉพาะสถานะที่มาจากแหล่งที่มา (f11c44)
  • แทนที่การใช้ IdentityArraySet ด้วย ScatterSet (db572e)
  • เพิ่มประสิทธิภาพ removeScope ใน ScopeMap (bb0530)

เวอร์ชัน 1.7.0-alpha02

7 กุมภาพันธ์ 2024

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

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

  • ทำให้ Lambda แบบคอมโพสิเบิลในคอมโพสิชันย่อยในเฟรมเดียวกันเป็นโมฆะ (98301c)
  • โทรกลับ onRelease ตามลําดับเดียวกับ onForgotten (2cd790)
  • กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน snapshotFlow (796b80)

การปรับปรุงประสิทธิภาพ

  • แก้ไขเครื่องมือสังเกตการณ์ภาพนิ่งในตำแหน่งเดิมเมื่อภาพนิ่งนั้นโปร่งใสอยู่แล้ว (f60f30)
  • เพิ่มประสิทธิภาพ SnapshotIdSet.lowest() (7ae149)
  • ใช้ fold() ที่ไม่มีการจัดสรรใน SnapshotIdSet (532b7d)
  • นําการจัดสรรตัวนับออก (83f96b)

เวอร์ชัน 1.7.0-alpha01

24 มกราคม 2024

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

การเพิ่มประสิทธิภาพ

  • เพิ่มความสามารถในการสร้างช่องหลังจากที่เพิ่มกลุ่มย่อยแล้ว (b5960c)
  • เพิ่มประสิทธิภาพการบันทึกการแก้ไขสถานะสแนปชอต (28c3fe)
  • เปิดใช้โหมดข้ามที่มีประสิทธิภาพ (ed1766)

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

  • พิจารณาเมตาพารามิเตอร์เริ่มต้นในการจดจําโดยปริยาย (096665)
  • ทําให้ currentCompoundHashKey ไม่เหมือนใครในหลายๆ กรณี (d4a872)
  • แสดงกลุ่มเมื่อออกจากการเรียกใช้ฟังก์ชันในบรรทัด (2a90fc)

เวอร์ชัน 1.6

เวอร์ชัน 1.6.8

12 มิถุนายน 2024

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

เวอร์ชัน 1.6.7

1 พฤษภาคม 2024

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

เวอร์ชัน 1.6.6

17 เมษายน 2024

androidx.compose.runtime:runtime-*:1.6.6 ได้รับการปล่อยแล้ว ไม่มีการเปลี่ยนแปลงนับตั้งแต่รุ่นล่าสุด

เวอร์ชัน 1.6.5

3 เมษายน 2024

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

เวอร์ชัน 1.6.4

20 มีนาคม 2024

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

เวอร์ชัน 1.6.3

6 มีนาคม 2024

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

เวอร์ชัน 1.6.2

21 กุมภาพันธ์ 2024

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

เวอร์ชัน 1.6.1

7 กุมภาพันธ์ 2024

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

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

  • โทรกลับ onRelease ตามลําดับเดียวกับ onForgotten (2cd790)
  • กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน snapshotFlow (796b80)

เวอร์ชัน 1.6.0

24 มกราคม 2024

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.5.0

ฟีเจอร์ใหม่

  • โยนข้อยกเว้นที่กลืนไประหว่างลูปการจัดองค์ประกอบใหม่อีกครั้ง (4dff9a)

การเพิ่มประสิทธิภาพ

  • เพิ่มประสิทธิภาพการบันทึกการแก้ไขสถานะสแนปชอต (28c3fe)
  • เพิ่มประสิทธิภาพ rememberSaveable (f01d79)
  • เลื่อนการอ่านสถานะที่มาจากแหล่งข้อมูลอีกครั้งจนกว่าจะมีการบันทึกการเปลี่ยนแปลง (f38099)
  • ปรับปรุงการระบุค่าในภาษาท้องถิ่นขององค์ประกอบ (a337ea)

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

  • แก้ไขการสูญเสียหน่วยความจำของตารางสล็อต (73fcfe)
  • ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
  • ทริกเกอร์วงจร RememberObserver เฉพาะเมื่อจัดเก็บไว้ในการคํานวณการจดจําเท่านั้น (f6b4dc)
  • จำกัดการจับ $dirty ไว้สำหรับ Lambda ในบรรทัด (acfca0)
  • แก้ไขเนื้อหาที่ย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบในภาษาที่ไม่ถูกต้อง (035cd6)

เวอร์ชัน 1.6.0-rc01

10 มกราคม 2024

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

เวอร์ชัน 1.6.0-beta03

13 ธันวาคม 2023

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

เวอร์ชัน 1.6.0-beta02

29 พฤศจิกายน 2023

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

เวอร์ชัน 1.6.0-beta01

15 พฤศจิกายน 2023

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

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

  • เผยแพร่ค่าความเสถียรบางอย่างในการกำกับเนื้อหา (274a4c)

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

  • ใช้นโยบายอ้างอิงสำหรับสถานะขอบเขตภายในขององค์ประกอบในบริบท (83361c)
  • จำกัดการบันทึก $dirty ไว้สำหรับ Lambda ในบรรทัด (acfca0)
  • แก้ไขเนื้อหาที่ย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบในภาษาที่ไม่ถูกต้อง (035cd6)
  • ใช้แฮชแมปที่ไม่จัดสรรที่เร็วขึ้นใน RecomposeScopeImpl (d79494)
  • ใช้ ObjectIntMap ใน DerivedState (21862e)
  • ใช้ IntRef สำหรับ 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)
  • เพิ่มสถานะและ MutableState เวอร์ชันพื้นฐาน (fb3d89)
  • เพิ่ม Snapshot.isApplyObserverNotificationPending (I672a5)
  • เพิ่ม State API เวอร์ชันพื้นฐาน ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์ State ได้โดยไม่เสียค่าปรับสำหรับการแปลงค่าอัตโนมัติ ใช้เมธอดใหม่ของ Factory อย่าง mutableIntState(Int), mutableFloatStateOf(Float) เป็นต้น เพื่อใช้สิ่งเหล่านี้ (I48e43)

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

  • ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
  • อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน ComposerImpl (0206f7)
  • อย่าใช้การคอมโพสิชัน 2 ครั้ง (f5791b)
  • ตรวจสอบการทำให้ค่าสถานะแบบอนุพันธ์ที่ยังไม่ได้เริ่มต้นใช้งานเป็นโมฆะ (aa2a92)
  • โทรหา onEndChanges ระหว่างการทิ้งองค์ประกอบ (62cc8c)
  • แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
  • แก้ไขการล็อกตายที่อาจเกิดขึ้น (c1a425 และ 8edce0)
  • ตอนนี้ เครื่องมือจัดเรียงใหม่ที่สร้างสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียก withFrameNanos แทนการจัดเรียงทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดไว้จะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกใช้ withFrameNanos รายอื่นจะบล็อก (Id9e7f, b/240975572)
  • เรียกใช้การเรียกกลับเพื่อปิดใช้งานสำหรับ LayoutNode ก่อนทิ้งผลลัพธ์ 3784073
  • แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
  • แก้ไขการถดถอยของการแก้ไขแบบเรียลไทม์สําหรับ Composable ที่มีโหนด 73fd4d8
  • ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพสิชัน ae276f1
  • ทำให้ขอบเขต SnapshotStateObserver สำหรับสถานะแบบอนุมานที่ไม่มีการเปลี่ยนแปลงเป็นโมฆะ 84d9b1c
  • แก้ไขข้อขัดข้องที่เกิดขึ้นได้เมื่อกำจัดองค์ประกอบ 28761fc
  • แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156
  • แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
  • เรียกใช้การเรียกกลับเพื่อปิดใช้งานสําหรับ LayoutNode ก่อนทิ้งผล (8b0fa4)
  • แก้ไข endToMarker() เมื่อสิ้นสุดกลุ่มโหนด (d71d980)
  • ใช้กลุ่ม SlotWriter ปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b)
  • นำ fill ใน SlotTable.moveSlotGapTo() ออกแล้วย้ายไปปิด (81f9935)
  • แก้ไขการลบล้างที่ขาดหายไปขณะที่เนื้อหาที่ย้ายได้กำลังย้าย (1d7c024)
  • แก้ไขการทำให้เนื้อหาที่ย้ายได้เสียความถูกต้องทันที (8676618)

การปรับปรุงประสิทธิภาพ

  • หลีกเลี่ยงการคํานวณ readableHash ใน DerivedState หากไม่ได้แก้ไขภาพรวม (307102)
  • การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808 )
  • การยกเลิกการเขียน CoroutineScopes อย่างรวดเร็ว (a55362 และ bd382f)
  • เขียนทับระเบียนของออบเจ็กต์สถานะด้วยระเบียนสถานะที่เข้าถึงไม่ได้ (c986960)
  • ใช้คอมโพเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
  • ใช้ IdentityArraySet เพื่อจัดเก็บการระบุว่าสแนปชอตไม่ถูกต้อง (7f60cca)
  • ลดการจัดสรรสําหรับการสังเกตการณ์ภาพรวม (5bc535f)

เวอร์ชัน 1.5.0-rc01

26 กรกฎาคม 2023

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

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

  • เลื่อนการอ่านสถานะที่มาจากแหล่งข้อมูลอีกครั้งจนกว่าจะมีการบันทึกการเปลี่ยนแปลง (f38099)

  • การตรวจสอบที่ไม่บังคับเพื่อแนะนําให้ย้ายข้อมูลการเรียก mutableStateOf() ไปยังประเภทเฉพาะสําหรับองค์ประกอบพื้นฐานที่เกี่ยวข้องพร้อมใช้งาน รหัส Lint ของโปรเจ็กต์คือ AutoboxingStateCreation ก่อนหน้านี้ การตรวจสอบนี้จะเปิดใช้โดยค่าเริ่มต้นสำหรับทุกโปรเจ็กต์ หากต้องการดูคำเตือนนี้ในเครื่องมือแก้ไขของ Android Studio และเอาต์พุตของ Lint ของโปรเจ็กต์ ให้เปลี่ยนระดับความรุนแรงจากข้อมูลเป็นคำเตือน (หรือสูงกว่า) ด้วยการประกาศ warning "AutoboxingStateCreation" ภายในการกำหนดค่า build.gradle หรือ build.gradle.kts ของโมดูลดังที่แสดง (I34f7e)

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

เวอร์ชัน 1.5.0-beta03

28 มิถุนายน 2023

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

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

  • ข้ามการจัดเรียงองค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)

เวอร์ชัน 1.5.0-beta02

7 มิถุนายน 2023

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

การปรับปรุงประสิทธิภาพ

  • หลีกเลี่ยงการคํานวณ readableHash ใน DerivedState หากไม่ได้แก้ไขภาพรวม (307102)

เวอร์ชัน 1.5.0-beta01

24 พฤษภาคม 2023

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

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

  • นำการจัดสรรในการเปลี่ยนการจัดองค์ประกอบใหม่ ภาพเคลื่อนไหวสี และ AndroidComposeView (Ib2bfa) ออก
  • เพิ่มคำอธิบายประกอบ @StateFactoryMarker เพื่อทําเครื่องหมายฟังก์ชันที่สร้างสถานะและต้องรวมไว้ในการเรียก remember (I64550)
  • เพิ่มสถานะและ MutableState เวอร์ชันพื้นฐาน (fb3d89)
  • เพิ่ม Snapshot.isApplyObserverNotificationPending (I672a5)

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

  • การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808 )
  • อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน ComposerImpl (0206f7)
  • การยกเลิกการเขียน CoroutineScopes อย่างรวดเร็ว (a55362 และ bd382f)
  • อย่าใช้การคอมโพสิชัน 2 ครั้ง (f5791b)
  • ตรวจสอบการทำให้ค่าสถานะแบบอนุพันธ์ที่ยังไม่ได้เริ่มต้นใช้งานเป็นโมฆะ (aa2a92)
  • โทรหา onEndChanges ระหว่างการทิ้งองค์ประกอบ (62cc8c)
  • แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
  • แก้ไขการล็อกตายที่อาจเกิดขึ้น (c1a425
  • ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพส (f4a2d1)
  • แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
  • เรียกใช้การเรียกกลับเพื่อปิดใช้งานสําหรับ LayoutNode ก่อนทิ้งผล (8b0fa4)

การมีส่วนร่วมจากภายนอก

  • เพิ่ม Snapshot.isApplyObserverNotificationPending (I672a5)

เวอร์ชัน 1.5.0-alpha04

10 พฤษภาคม 2023

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

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

  • เพิ่ม State API เวอร์ชันพื้นฐาน ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์ State ได้โดยไม่เสียค่าปรับสำหรับการแปลงค่าอัตโนมัติ ใช้เมธอดใหม่ของ Factory อย่าง mutableIntState(Int), mutableFloatStateOf(Float) เป็นต้น เพื่อใช้สิ่งเหล่านี้ (I48e43)

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

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

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

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

    การเปลี่ยนแปลงนี้จะจัดลําดับการอ่านสถานะที่มาจากแหล่งข้อมูลและการล้างข้อมูลพึ่งพาใหม่ เพื่อให้การลบล้างเกิดขึ้นในสถานะที่ถูกต้องเสมอ (c472be6)

เวอร์ชัน 1.5.0-alpha03

19 เมษายน 2023

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

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

  • ตอนนี้ เครื่องมือจัดเรียงใหม่ที่สร้างสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียก withFrameNanos แทนการจัดเรียงทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดไว้จะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกใช้ withFrameNanos รายอื่นจะบล็อก (Id9e7f, b/240975572)

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

  • แก้ไขข้อขัดข้องที่เกิดขึ้นได้กับรายการสแนปชอตและแผนที่ 5c1a425
  • เรียกใช้การเรียกกลับเพื่อปิดใช้งานสำหรับ LayoutNode ก่อนทิ้งผลลัพธ์ 3784073
  • แก้ไข Flag ที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
  • แก้ไขการถดถอยของการแก้ไขแบบเรียลไทม์สําหรับ Composable ที่มีโหนด 73fd4d8
  • ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพสิชัน ae276f1
  • ทำให้ขอบเขต SnapshotStateObserver สำหรับสถานะแบบอนุมานที่ไม่มีการเปลี่ยนแปลงเป็นโมฆะ 84d9b1c
  • แก้ไขข้อขัดข้องที่เกิดขึ้นได้เมื่อกำจัดองค์ประกอบ 28761fc
  • แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156

เวอร์ชัน 1.5.0-alpha02

5 เมษายน 2023

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

ฟีเจอร์ใหม่

  • ตอนนี้โอเปอเรเตอร์ getValue ของ Kotlin คอมโพสิเบิลได้แล้ว (f174f6e)

การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ

  • เขียนทับระเบียนของออบเจ็กต์สถานะด้วยระเบียนสถานะที่เข้าถึงไม่ได้ (c986960)
  • ใช้คอมโพเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
  • แก้ไข endToMarker() เมื่อสิ้นสุดกลุ่มโหนด (d71d980)
  • ใช้กลุ่ม SlotWriter ปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b)
  • ใช้ IdentityArraySet เพื่อจัดเก็บการระบุว่าสแนปชอตไม่ถูกต้อง (7f60cca)
  • นำ fill ใน SlotTable.moveSlotGapTo() ออกแล้วย้ายไปปิด (81f9935)
  • แก้ไขการลบล้างที่ขาดหายไปขณะที่เนื้อหาที่ย้ายได้กำลังย้าย (1d7c024)
  • แก้ไขการทำให้เนื้อหาที่ย้ายได้เสียความถูกต้องทันที (8676618)
  • ลดการจัดสรรสําหรับการสังเกตการณ์ภาพรวม (5bc535f)

เวอร์ชัน 1.5.0-alpha01

22 มีนาคม 2023

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

ฟีเจอร์ใหม่

  • เพิ่ม Modifier.Node#coroutineScope เพื่ออนุญาตให้ Modifier.Nodes เปิดใช้งาน coroutine (I76ef9)
  • อนุญาตให้ Modifier.Nodes อ่าน CompositionLocals โดยใช้อินเทอร์เฟซ CompositionLocalConsumerModifierNode (Ib44df)

เวอร์ชัน 1.4

เวอร์ชัน 1.4.3

3 พฤษภาคม 2023

androidx.compose.runtime:runtime-*:1.4.3 เผยแพร่โดยไม่มีการเปลี่ยนแปลง

เวอร์ชัน 1.4.2

19 เมษายน 2023

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

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

  • แก้ไขข้อขัดข้องที่เกิดขึ้นได้กับรายการสแนปชอตและแผนที่ 2eb6570

  • การเพิ่มเนื้อหาลงใน SnapshotStateList หรือ SnapshotStateMap อาจเกิดปัญหาการล็อกตายได้หากการแก้ไขเกิดขึ้นพร้อมกันกับการเขียนโดยตรงไปยังระเบียนสถานะ ปัญหานี้เกิดขึ้นบ่อยขึ้นมากเมื่อมีการเปิดตัวการเปลี่ยนแปลงใน 93fcae828b ที่ใช้การเขียนโดยตรงเพื่อปล่อยระเบียนที่ไม่ได้ใช้

  • ตอนนี้ระบบจะจัดเรียงการล็อกในลักษณะที่จะไม่พยายามล็อกภาพรวมเมื่อมีการล็อกแผนที่หรือรายการ

เวอร์ชัน 1.4.1

5 เมษายน 2023

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

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

  • แก้ไข endToMarker() เมื่อสิ้นสุดกลุ่มโหนด d71d980

เวอร์ชัน 1.4.0

22 มีนาคม 2023

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.3.0

  • ใช้ค่าเริ่มต้นจาก LiveData สำหรับองค์ประกอบแรก 3680e25
  • เพิ่ม ComposeNodeLifecycleCallback เพื่อดูวงจรชีวิตของโหนดคอมโพสิท 8b6a258
  • เพิ่มพร็อพเพอร์ตี้ parameterTypes ไปยัง ComposableMethod 7b6c7ad

การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ

  • ล้างดัชนีขอบเขตทั้ง 2 รายการใน SnapshotStateObserver 29f4a3e
  • เพิ่มกลุ่มที่จําเป็นในส่วนเนื้อหาของ Lambda แบบข้ามไม่ได้ 7d06752
  • ปรับปรุงลักษณะการอ้างอิงหน่วยความจําของสถานะสแนปชอต 93fcae8
  • นำการบรรจุกล่องในการค้นหาองค์ประกอบในเครื่องออก 0875717
  • ใช้คีย์ที่ถูกต้องสำหรับกลุ่มโหนดที่ใช้ซ้ำไม่ได้ 6388d8d
  • ปกป้อง SnapshotStateObserver จากการเรียกใช้แบบซ้ำและพร้อมกัน 98cb6ba
  • เพิ่มการตรวจสอบ check-index-bounds ในเมธอด IdentityArraySet "get" 35a77d3
  • อัปเดตโมดูลการเขียนเพื่อใช้ส่วนขยาย ViewTreeLifecycleOwner 21c2122
  • ส่งการแจ้งเตือนการสมัครหลังจาก Recomposer ตัดเฟรมเสร็จแล้ว 98f2641
  • แก้ไขข้อขัดข้องเกี่ยวกับดัชนีที่อยู่นอกขอบเขตเมื่อยกเลิกการคอมไพล์ใหม่ 8f8656f
  • บังคับให้จัดองค์ประกอบใหม่เสมอหากผู้ให้บริการหลักขององค์ประกอบมีการเปลี่ยนแปลง 9526fcc
  • ความคลาดเคลื่อนของการจัดเรียงใหม่สำหรับงานที่ยกเลิก a55f7ed
  • ปรับปรุงการจัดการการทำให้ข้อมูลไม่ถูกต้องสำหรับนักแต่งเพลงจำนวนมาก 9b7ed67
  • แก้ไขการสร้างกลุ่มปิดสำหรับผลตอบแทนที่ไม่ใช่ในร้าน b6f590c

เวอร์ชัน 1.4.0-rc01

8 มีนาคม 2023

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

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

เวอร์ชัน 1.4.0-beta02

22 กุมภาพันธ์ 2023

androidx.compose.runtime:runtime:1.4.0-beta02 และ androidx.compose.runtime:runtime-saveable:1.4.0-beta02 เผยแพร่แล้ว เวอร์ชัน 1.4.0-beta02 มีการคอมมิตเหล่านี้

เวอร์ชัน 1.4.0-beta01

8 กุมภาพันธ์ 2023

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

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

  • เพิ่ม ComposeNodeLifecycleCallback ซึ่งช่วยให้สังเกตวงจรชีวิตของโหนดคอมโพสิทได้ (I3731b)
  • เพิ่ม @TestOnly ลงใน Composer.disableSourceInformation() เนื่องจากฟังก์ชันนี้ปลอดภัยที่จะเรียกใช้ในการทดสอบเท่านั้น (I896c8)

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

  • นำการบรรจุกล่องในการค้นหาองค์ประกอบในเครื่องออก (62f66a)
  • ปรับปรุงลักษณะการอ้างอิงหน่วยความจําของสถานะสแนปชอต (dfb451)

เวอร์ชัน 1.4.0-alpha05

25 มกราคม 2023

androidx.compose.runtime:runtime:1.4.0-alpha05 และ androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 เผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha05 มีการคอมมิตเหล่านี้

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

  • ประเภท/Nullability เพิ่มเติมของฟังก์ชันแบบอินไลน์/ฟังก์ชันที่เลิกใช้งานแล้ว (I24f91)

เวอร์ชัน 1.4.0-alpha04

11 มกราคม 2023

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

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

  • TestMonotonicFrameClock ใช้คำอธิบายประกอบการทดสอบที่ถูกต้องแล้ว (I95c9e)

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

  • ปกป้อง SnapshotStateObserver จากการเรียกใช้แบบซ้ำและแบบพร้อมกัน (d902fb)

เวอร์ชัน 1.4.0-alpha03

7 ธันวาคม 2022

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

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

  • การเพิ่มเมธอดสาธารณะใหม่ในคลาส ComposableMethod ที่คล้ายกับ java.lang.reflect.Method#getParameterTypes() (Iab0c3)

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

  • ตอนนี้ระบบจะส่งการแจ้งเตือนการใช้ภาพรวมหลังจากที่ Recomposer ใช้การเปลี่ยนแปลงเสร็จแล้ว (Iad6c0, b/222093277)

เวอร์ชัน 1.4.0-alpha02

9 พฤศจิกายน 2022

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

เวอร์ชัน 1.4.0-alpha01

24 ตุลาคม 2022

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

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

  • ตอนนี้ SnapshotStateList และ SnapshotStateMap มีการใช้งาน toList() และ toMap() อย่างชัดแจ้งแล้ว วิธีการเหล่านี้จะแสดงเนื้อหาปัจจุบันโดยไม่ต้องทำสำเนา เนื่องจากจะแสดงข้อมูลที่แก้ไขไม่ได้ภายในซึ่งใช้เพื่อจัดเก็บเนื้อหา ค่านี้อาจใช้เพื่อผลิตลําดับค่าโดยใช้ snapshotFlow โดยไม่ต้องคัดลอกข้อมูล (Ica2bd)

เวอร์ชัน 1.3

เวอร์ชัน 1.3.3

11 มกราคม 2023

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

  • ไม่มีการเปลี่ยนแปลงนับตั้งแต่ 1.3.2

เวอร์ชัน 1.3.2

7 ธันวาคม 2022

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

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

  • อัปเดตให้รองรับ androidx.compose.ui 1.3.2

เวอร์ชัน 1.3.1

9 พฤศจิกายน 2022

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

เวอร์ชัน 1.3.0

24 ตุลาคม 2022

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

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.2.0

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

การติดตามการเขียนโค้ด

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) เวอร์ชันทดลอง
  • เพิ่ม Snapshot.asContextElement() API เวอร์ชันทดลอง (Iff072)
  • ตอนนี้คุณใช้คำอธิบายประกอบ @ComposableTarget และคำอธิบายประกอบที่ทําเครื่องหมายด้วย @ComposableTargetMarker ในระดับไฟล์ได้โดยใช้คำนำหน้า @file การใช้คำอธิบายประกอบเป้าหมายในระดับขอบเขตไฟล์จะทำให้คอมไพเลอร์ถือว่าฟังก์ชันแบบคอมโพสิเบิลทั้งหมดในไฟล์มีไว้เพื่อกำหนดเป้าหมายไปยังแอปเพลเยอร์ที่เกี่ยวข้อง เช่น การใช้ @file:UiComposable จะประกาศว่าฟังก์ชัน @Composable ทั้งหมดกำหนดเป้าหมายไปยังตัวใช้ UI ของ Compose ฟังก์ชันที่ต้องกำหนดเป้าหมายไปยังแอปพลิเคชันอื่นต้องระบุคำอธิบายประกอบเครื่องหมายเป้าหมายสำหรับแอปพลิเคชันที่ต้องการอย่างชัดเจน (I40804)

เวอร์ชัน 1.2.0-alpha08

20 เมษายน 2022

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

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

  • เพิ่ม TracingInProgress ไปยังอินเทอร์เฟซ CompositionTracer แล้ว (Ic6f12)
  • เพิ่ม recomposeScopeIdentity ไปยัง Composer (I0c873)
  • จำกัด API การติดตาม (Composer.setTracer) เป็น OptIn(InternalComposeTracingApi) (I9187f)
  • เพิ่ม ResuableContentHost ซึ่งช่วยให้ควบคุมอายุการใช้งานของสถานะที่สร้างขึ้นสําหรับเนื้อหาที่นํามาใช้ซ้ำได้ดีขึ้น เช่น หากไม่มีการใช้องค์ประกอบย่อยชั่วคราว ระบบจะปิดใช้งานเนื้อหา ซึ่งจะทำให้ระบบลืมสถานะที่จดจำไว้ทั้งหมดในองค์ประกอบ เช่น เอฟเฟกต์ที่ใช้แล้วทิ้งทั้งหมด (I2c0f2, b/220322704)

เวอร์ชัน 1.2.0-alpha07

6 เมษายน 2022

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

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

  • เพิ่มฟังก์ชันใหม่ Snapshot.withoutReadObservation { ... } แล้ว ซึ่งช่วยให้ผู้ใช้เรียกใช้ Lambda ที่ส่งมาได้โดยไม่ต้องติดตามการเปลี่ยนแปลงของค่าสถานะที่อ่านระหว่างบล็อกนี้ คุณอาจพบว่าการดำเนินการนี้มีประโยชน์ใน Use Case เมื่อต้องการใช้ประโยชน์จากการเขียน/อ่านที่ปลอดภัยสำหรับเธรดซึ่งอิงตามสแนปชอต แต่ต้องการอ่านค่าได้โดยไม่ก่อให้เกิดการคอมโพสิชันใหม่หรือการวัดผลอีกครั้งที่ไม่จำเป็น (I9f365, b/214054486)

เวอร์ชัน 1.2.0-alpha06

23 มีนาคม 2022

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

เวอร์ชัน 1.2.0-alpha05

9 มีนาคม 2022

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

การมีส่วนร่วมจากภายนอก

  • อัปเดตให้ใช้ Kotlinx coroutines 1.6.0 (I3366d)

เวอร์ชัน 1.2.0-alpha04

23 กุมภาพันธ์ 2022

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

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

  • เพิ่ม ComposableTarget, ComposableTargetMarker และ ComposableOpenTarget ซึ่งช่วยให้รายงานเวลาคอมไพล์ได้เมื่อมีการเรียกใช้ฟังก์ชันที่ประกอบกันได้ซึ่งกำหนดเป้าหมายไปยังแอปพลิเคชันที่ไม่ได้ออกแบบมาเพื่อใช้งาน

    ในกรณีส่วนใหญ่ ปลั๊กอินคอมไพเลอร์ของ Compose จะอนุมานคำอธิบายประกอบได้ คุณจึงควรใช้คำอธิบายประกอบเหล่านี้โดยตรงในบางกรณีเท่านั้น กรณีที่ไม่สามารถอนุมานได้ ได้แก่ การสร้างและการใช้ Applier ที่กําหนดเอง ฟังก์ชันที่คอมโพสิเบิลแบบนามธรรม (เช่น เมธอดอินเทอร์เฟซ) ฟิลด์หรือตัวแปรส่วนกลางที่เป็น Lambda ที่คอมโพสิเบิล (ระบบจะอนุมานตัวแปรและพารามิเตอร์ภายใน) หรือเมื่อใช้ ComposeNode หรือฟังก์ชันที่คอมโพสิเบิลที่เกี่ยวข้อง

    สําหรับตัวใช้ที่กําหนดเอง ฟังก์ชันแบบคอมโพสิเบิลที่เรียก ComposeNode หรือ ReusableComposeNode จะต้องเพิ่มแอตทริบิวต์ CompoableTarget สําหรับฟังก์ชันและพารามิเตอร์ LAMBDA ประเภทใดก็ได้ที่คอมโพสิเบิล อย่างไรก็ตาม เราขอแนะนำให้สร้างคำอธิบายประกอบที่มีคำอธิบายประกอบด้วย ComposableTargetMarker แล้วใช้คำอธิบายประกอบที่มีเครื่องหมายแทนการใช้ ComposableTarget โดยตรง คําอธิบายประกอบแบบคอมโพสิเบิลที่มีเครื่องหมาย ComposableTargetMarker เทียบเท่ากับ ComposbleTarget ที่มีชื่อแบบเต็มของคลาสแอตทริบิวต์เป็นพารามิเตอร์ applier ดูตัวอย่างการใช้ ComposableTargetMarker ได้ที่ anroidx.compose.ui.UiComposable (I38f11)

เวอร์ชัน 1.2.0-alpha03

9 กุมภาพันธ์ 2022

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

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

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

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

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

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

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • เพิ่ม InternalComposeScope ซึ่งจะช่วยให้เครื่องมือระบุคอมโพสิเบิลได้ในระหว่างการจัดองค์ประกอบใหม่ (I07a3f)

เวอร์ชัน 1.2.0-alpha02

26 มกราคม 2022

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

เวอร์ชัน 1.2.0-alpha01

12 มกราคม 2022

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

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

  • เพิ่มช่อง identity ลงใน CompositionData เพื่อสร้างรหัสแบบคงที่ในเครื่องมือตรวจสอบเลย์เอาต์ (Ic116e)

การอัปเดตทรัพยากร Dependency

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

เวอร์ชัน 1.1

เวอร์ชัน 1.1.1

23 กุมภาพันธ์ 2022

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

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

  • แก้ไข NullPointerException ที่ androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList (aosp/1947059, b/206677462)
  • แก้ไขข้อขัดข้องที่เกิดขึ้นจากเนื้อหาในคลิปบอร์ดขณะอ่านจากคลิปบอร์ดใน Android (I06020, b/197769306)
  • แก้ไข RTL ใน LazyVerticalGrid (aosp/1931080, b/207510535)

เวอร์ชัน 1.1.0

9 กุมภาพันธ์ 2022

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.0.0

  • การรองรับเอฟเฟกต์การเลื่อนผ่านของ Android 12 อย่างเสถียร
  • การปรับปรุงขนาดเป้าหมายการสัมผัส
  • โปรดทราบว่าสำหรับ Compose 1.0 คอมโพเนนต์ Material จะขยายพื้นที่เลย์เอาต์เพื่อให้เป็นไปตามหลักเกณฑ์การช่วยเหลือพิเศษของ Material สำหรับขนาดเป้าหมายการสัมผัส เช่น เป้าหมายการสัมผัสของปุ่มจะขยายให้มีขนาดขั้นต่ำ 48x48dp แม้ว่าคุณจะตั้งค่าขนาดของปุ่มให้เล็กกว่านี้ก็ตาม ซึ่งจะช่วยให้ Compose Material ทำงานในลักษณะเดียวกับคอมโพเนนต์ Material Design เพื่อให้ทำงานได้อย่างสอดคล้องกันหากคุณใช้ทั้ง Views และ Compose การเปลี่ยนแปลงนี้ยังช่วยให้มั่นใจด้วยว่าเมื่อคุณสร้าง UI โดยใช้คอมโพเนนต์ Compose Material คุณจะมีคุณสมบัติตรงตามข้อกำหนดขั้นต่ำสำหรับการช่วยเหลือพิเศษสำหรับเป้าหมายการสัมผัส
  • รองรับแถบข้างสำหรับไปยังส่วนต่างๆ อย่างเสถียร
  • เปลี่ยน API เวอร์ชันทดลองจำนวนหนึ่งเป็นเวอร์ชันเสถียร
  • รองรับ Kotlin เวอร์ชันใหม่

เวอร์ชัน 1.1.0-rc03

26 มกราคม 2022

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

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

  • อัปเดตเพื่อรองรับ Compose Material 1.1.0-rc03

เวอร์ชัน 1.1.0-rc01

15 ธันวาคม 2021

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

เวอร์ชัน 1.1.0-beta04

1 ธันวาคม 2021

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

ฟีเจอร์ใหม่

  • อัปเดตให้ใช้งานร่วมกับ Kotlin 1.6.0 ได้

เวอร์ชัน 1.1.0-beta03

17 พฤศจิกายน 2021

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

เวอร์ชัน 1.1.0-beta02

3 พฤศจิกายน 2021

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

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

  • โค้ดสแนปชอตแบ่งออกเป็นหลายไฟล์ แต่ทั้งหมดยังคงอยู่ในคลาส JVM เดียวกัน (Ic6c98)

เวอร์ชัน 1.1.0-beta01

27 ตุลาคม 2021

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

เวอร์ชัน 1.1.0-alpha06

13 ตุลาคม 2021

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

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

  • นำ InternalCompilerApi ออกจากเมธอด Composer ที่ต้องเรียกข้ามโมดูล (I1aa0b)
  • Recomposer.state เลิกใช้งานแล้วและแทนที่ด้วย Recomposer.currentState เพื่อเปลี่ยนประเภทเป็น StateFlow (Ic2ab3, b/197773820)

เวอร์ชัน 1.1.0-alpha05

29 กันยายน 2021

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

เวอร์ชัน 1.1.0-alpha04

15 กันยายน 2021

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

เวอร์ชัน 1.1.0-alpha03

1 กันยายน 2021

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

ฟีเจอร์ใหม่

  • ตอนนี้คอมไพเลอร์ Compose รองรับรันไทม์ Compose เวอร์ชันเก่า (1.0) แล้ว ก่อนการเปลี่ยนแปลงนี้ คอมไพเลอร์ Compose ใช้ได้กับรันไทม์ Compose เวอร์ชันเดียวกันหรือเวอร์ชันที่ใหม่กว่าเท่านั้น หลังจากการเปลี่ยนแปลงนี้ คอมไพเลอร์ Compose จะใช้งานร่วมกับรันไทม์ Compose เวอร์ชันเก่า (1.0) ได้ (aosp/1796968)
  • อัปเดต Compose 1.1.0-alpha03 ให้ใช้ 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 มีการคอมมิตเหล่านี้

การอัปเดตทรัพยากร Dependency

  • อัปเดตให้ใช้ Kotlin 1.5.31

เวอร์ชัน 1.0.3

29 กันยายน 2021

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

การอัปเดตทรัพยากร Dependency

  • อัปเดตให้ใช้ Kotlin 1.5.30

เวอร์ชัน 1.0.2

1 กันยายน 2021

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

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

เวอร์ชัน 1.0.1

4 สิงหาคม 2021

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

การอัปเดตทรัพยากร Dependency

  • อัปเดตให้ใช้ Kotlin 1.5.21

เวอร์ชัน 1.0.0

28 กรกฎาคม 2021

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

ฟีเจอร์หลักของ 1.0.0

นี่เป็นเวอร์ชันเสถียรครั้งแรกของ Compose โปรดดูรายละเอียดเพิ่มเติมในบล็อกการเผยแพร่อย่างเป็นทางการของ Compose

ปัญหาที่ทราบ

  • หากคุณใช้ Android Studio Bumblebee Canary 4 หรือ AGP 7.1.0-alpha04/7.1.0-alpha05 คุณอาจพบข้อขัดข้องต่อไปนี้

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

    วิธีแก้ไขคือเพิ่ม minSdkVersion เป็น 24 ขึ้นไปชั่วคราวในไฟล์ build.gradle ปัญหานี้จะได้รับการแก้ไขใน Android Studio Bumblebee และ AGP 7.1 เวอร์ชันถัดไป (b/194289155)

เวอร์ชัน 1.0.0-rc02

14 กรกฎาคม 2021

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

  • แก้ไขเงื่อนไขการแข่งขันใน SnapshotStateObserver ซึ่งทําให้มีข้อยกเว้น NullPointer เกิดขึ้นเป็นระยะ (aosp/1763445, aosp/1758105, b/192677711)
  • แก้ไขปัญหาเกี่ยวกับภาพรวมรันไทม์ที่ทําให้ java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied ขัดข้อง (b/193006595, b/192570897)

เวอร์ชัน 1.0.0-rc01

1 กรกฎาคม 2021

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

เวอร์ชัน 1.0.0-beta09

16 มิถุนายน 2021

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

เพิ่มกฎโปรไฟล์

รุ่นนี้เพิ่มกฎโปรไฟล์ลงในข้อบังคับการเขียนต่อไปนี้ (I14ed6)

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

กฎโปรไฟล์คืออะไร

  • กฎโปรไฟล์สำหรับไลบรารีจะระบุไว้ในไฟล์ข้อความ baseline-prof.txt ซึ่งอยู่ในไดเรกทอรี src/main หรือไดเรกทอรีที่เทียบเท่า ไฟล์จะระบุกฎต่อบรรทัด โดยที่กฎในกรณีนี้คือรูปแบบสำหรับการจับคู่กับเมธอดหรือคลาสในไลบรารี ไวยากรณ์ของกฎเหล่านี้เป็นชุดที่ใหญ่กว่ารูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ซึ่งใช้เมื่อใช้ adb shell profman --dump-classes-and-methods ... กฎเหล่านี้มี 2 รูปแบบเพื่อกำหนดเป้าหมายไปยังเมธอดหรือคลาส

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

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

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

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

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

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

กฎมีไว้เพื่ออะไร

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

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

  • เมธอดที่มี Flag P บ่งบอกว่าเป็นเมธอดที่เรียกใช้หลังจากการเริ่มต้น

  • คลาสที่อยู่ในไฟล์นี้บ่งบอกว่ามีการใช้คลาสดังกล่าวระหว่างการเริ่มต้นระบบและควรจัดสรรล่วงหน้าในกองเพื่อหลีกเลี่ยงค่าใช้จ่ายในการโหลดคลาส

ระบบนี้ทำงานอย่างไร

  • ไลบรารีสามารถกำหนดกฎเหล่านี้ซึ่งจะรวมอยู่ในอาร์ติแฟกต์ AAR เมื่อสร้างแอปที่มีอาร์ติแฟกต์เหล่านี้ ระบบจะผสานกฎเหล่านี้เข้าด้วยกันและใช้กฎที่ผสานเพื่อสร้างโปรไฟล์ ART แบบไบนารีที่กะทัดรัดซึ่งเจาะจงสำหรับแอป จากนั้น ART จะใช้โปรไฟล์นี้เมื่อติดตั้งแอปในอุปกรณ์เพื่อคอมไพล์ชุดย่อยที่เฉพาะเจาะจงของแอปพลิเคชันล่วงหน้าเพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน โดยเฉพาะการใช้งานครั้งแรก โปรดทราบว่าการดำเนินการนี้จะไม่ส่งผลต่อแอปพลิเคชันที่แก้ไขข้อบกพร่องได้

เวอร์ชัน 1.0.0-beta08

2 มิถุนายน 2021

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

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

  • State<T> เปลี่ยนชื่อเป็น State<out T> (I69049)
  • ControlledComposition การเปลี่ยนแปลง API เพื่อเปิดใช้การจัดเรียงใหม่ การเปลี่ยนแปลงในการจัดเรียงใหม่แบบผ่านรายการเดียว (Iaafd1, b/184173932)

เวอร์ชัน 1.0.0-beta07

18 พฤษภาคม 2021

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

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

  • เพิ่ม API คอมไพเลอร์คอมโพสิทใหม่ที่ช่วยในการนําข้อมูลแหล่งที่มาที่คอมไพเลอร์สร้างขึ้นออกในระหว่างการลดขนาดแหล่งที่มา (Ia34e6)
  • เปิดตัว ReusableContent ซึ่งจะพยายามนําโหนดมาใช้ซ้ำในเนื้อหาแทนที่จะแทนที่เมื่อมีการทําการเปลี่ยนแปลงคีย์ เมื่อเปลี่ยนคีย์ ระบบจะไม่สนใจค่าก่อนหน้าในตารางสล็อตสําหรับเนื้อหา ยกเว้นโหนดที่สร้างขึ้นและค่าที่ใช้อัปเดตโหนด

    เปิดตัว ReusableComposeNode ที่จะนําโหนดที่ส่งออกมาใช้ซ้ำแทนการแทนที่โหนดนั้น เช่นเดียวกับที่ใช้กับ ComposeNode (I1dd86)

  • @ComposeCompilerApi ไม่@RequiresOptInแล้ว (Iab690)

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

  • ตอนนี้ LazyColumn/Row จะเก็บรายการที่มองเห็นก่อนหน้านี้ไว้สูงสุด 2 รายการ (ไม่ทิ้ง) แม้ว่าจะเลื่อนออกไปแล้วก็ตาม ซึ่งช่วยให้คอมโพเนนต์นําคอมโพสิชันย่อยที่ใช้งานอยู่มาใช้ซ้ำได้เมื่อเราต้องคอมโพสิชันรายการใหม่ ซึ่งจะช่วยปรับปรุงประสิทธิภาพการเลื่อน (Ie5555)

เวอร์ชัน 1.0.0-beta06

5 พฤษภาคม 2021

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

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

  • @ComposeCompilerApi ไม่@RequiresOptInแล้ว (Iab690)

เวอร์ชัน 1.0.0-beta05

21 เมษายน 2021

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

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

  • นำ@InternalComposeApi ออกสำหรับการบันทึกการอ่านและเขียนสแนปชอต (Id134d)

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

  • ตอนนี้ไฟล์ AndroidManifest จาก ui-test-manifest และ ui-tooling-data ใช้ได้กับ Android 12 แล้ว (I6f9de, b/184718994)

เวอร์ชัน 1.0.0-beta04

7 เมษายน 2021

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

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

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

    สรุปคือ ให้ดูตัวอย่างต่อไปนี้

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

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

  • แก้ไขปัญหาเมื่อ rememberSaveable() กู้คืนค่าเดิมเมื่อใช้กับพารามิเตอร์อินพุต (I1b110, b/182403380)

เวอร์ชัน 1.0.0-beta03

24 มีนาคม 2021

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

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

  • DefaultMonotonicFrameClock เลิกใช้งานแล้ว การเรียกใช้ withFrameNanos หรือ Recomposer.runRecomposeAndApplyChanges โดยไม่มี MonotonicFrameClock จะแสดง IllegalStateException (I4eb0d)

เวอร์ชัน 1.0.0-beta02

10 มีนาคม 2021

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

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

  • บังคับใช้ข้อจํากัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)
  • แก้ไข rememberSaveable { mutableStateOf(0) } ที่ไม่ทำงานเมื่อใช้ในปลายทางของ navigation-compose (I1312b, b/180042685, b/180701630)

เวอร์ชัน 1.0.0-beta01

24 กุมภาพันธ์ 2021

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

นี่เป็นรุ่นแรกของ Compose 1.0.0 เบต้า

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

  • เพิ่ม Recomposer.runRecomposeConcurrentlyAndApplyChanges API เวอร์ชันทดลองสำหรับการคอมโพสองค์ประกอบที่ลบล้างออกจากลูปเฟรมหลักอีกครั้ง (I342d0)
  • ตอนนี้คอมโพสิเบิลที่มีเครื่องหมาย @ReadOnlyComposable จะได้รับการตรวจสอบเมื่อคอมไพล์เพื่อให้แน่ใจว่ามีการเรียกใช้เฉพาะ @ReadOnlyComposable อื่นๆ เท่านั้น (I58961)
  • ตอนนี้ defaultFactory สำหรับ compositionLocalOf และ staticCompositionLocalOf จำเป็นต้องระบุแล้ว ไม่ใช่แค่ไม่บังคับ

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

    สําหรับประเภทที่อนุญาตค่า Null ให้ลองระบุ { null } เป็นฟีเจอร์เริ่มต้น

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

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

  • emptyContent() ที่เลิกใช้งานแล้วถูกนําออก ให้ใช้ {} แทน (Idb33f, b/179432510)

  • เปลี่ยนชื่อ Providers เป็น CompositionLocalProvider แล้ว

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

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

  • เปลี่ยนแปลง Material API ดังต่อไปนี้

    • เพิ่มพารามิเตอร์ contentPadding ลงใน Top/BottomAppBar เพื่ออนุญาตให้ปรับแต่งการเว้นวรรคเริ่มต้น
    • จัดเรียงพารามิเตอร์ใน BackdropScaffold ใหม่เพื่อให้เป็นไปตามหลักเกณฑ์ของ API ที่กำหนดให้พารามิเตอร์ที่จำเป็นอยู่ก่อนพารามิเตอร์ที่ไม่บังคับ
    • ย้ายพารามิเตอร์ icon ใน BottomNavigationItem ไปไว้หลัง selected และ onClick
    • เปลี่ยนชื่อพารามิเตอร์ alwaysShowLabels ใน BottomNavigationItem เป็น alwaysShowLabel
    • เปลี่ยนชื่อพารามิเตอร์ bodyContent ในคอมโพเนนต์ 2-3 รายการเป็น content
    • พารามิเตอร์ที่จัดเรียงใหม่ใน ButtonDefaults.buttonColors() โปรดทราบว่าเนื่องจากประเภทของพารามิเตอร์ไม่เปลี่ยนแปลง การดำเนินการนี้จะไม่ทำให้เกิดข้อผิดพลาดในโค้ด โปรดตรวจสอบว่าคุณใช้พารามิเตอร์ที่มีชื่อหรืออัปเดตลําดับด้วยตนเอง ไม่เช่นนั้นโค้ดจะไม่ทํางานเหมือนเดิม
    • เพิ่มพารามิเตอร์ secondaryVariant ไปยัง darkColors() แล้ว โดยปกติแล้วสีนี้จะเหมือนกับ secondary ในธีมมืด แต่เพิ่มเข้ามาเพื่อความสอดคล้องและการปรับแต่งเพิ่มเติม
    • นํา ElevationDefaults และ animateElevation() ออกจากแพลตฟอร์ม API สาธารณะเนื่องจากไม่ค่อยมีการใช้งาน / มีประโยชน์
    • เปลี่ยนชื่อ onValueChangeEnd ใน Slider เป็น onValueChangeFinished และกำหนดให้มีค่า Null ได้
    • เปลี่ยนชื่อพารามิเตอร์ text ใน Snackbar เป็น content เพื่อให้สอดคล้องกัน
    • เพิ่มพารามิเตอร์ contentPadding ลงใน DropdownMenuItem เพื่ออนุญาตให้ปรับแต่งการเยื้องเริ่มต้น และทําให้ content เป็นส่วนขยายของ RowScope
    • เปลี่ยนชื่อ ModalDrawerLayout เป็น ModalDrawer แล้ว
    • เปลี่ยนชื่อ BottomDrawerLayout เป็น BottomDrawer แล้ว
    • (I1cc66)

เวอร์ชัน 1.0.0-alpha12

10 กุมภาพันธ์ 2021

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

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

  • นำการรองรับ ViewGroups ออกจาก UiApplier แล้ว นําคอมโพสิชัน emitView ที่เลิกใช้งานออกแล้ว (Ifb214)
  • เปลี่ยนชื่อ CompositionReference เป็น CompositionContext (I53fcb)
  • ComponentActivity.setContent ได้ย้ายไปอยู่ใน androidx.activity.compose.setContent ในโมดูล androidx.activity:activity-compose (Icf416)
  • เราได้อัปเดต Snapshot API เพื่อให้สอดคล้องกับหลักเกณฑ์ API มากขึ้น รวมถึงซ่อนคลาสการติดตั้งใช้งานภายในจาก API สาธารณะ (Id9e32)
  • เปลี่ยนชื่อ "ภาพพักหน้าจอ" ให้ตรงกับ "ภาพพักหน้าจอ" -> เปลี่ยนชื่อ CompositionLocal เดิมองค์ประกอบรอบข้างมีชื่อว่า AmbientFoo แต่ตอนนี้ CompositionLocals มีชื่อว่า LocalFoo (I2d55d)
  • เปลี่ยนชื่อ "Ambient" เป็น "CompositionLocal" และ "ambientOf" / "staticAmbientOf" เป็น "compositionLocalOf" / "staticCompositionLocalOf" ตามลำดับ การเปลี่ยนแปลงนี้ช่วยให้ทราบวัตถุประสงค์ของ CompositionLocal ชัดเจนยิ่งขึ้น ซึ่งเป็นกลไกในการระบุ / ดึงค่าในคอมโพสิชัน อินสแตนซ์ CompositionLocal ควรขึ้นต้นด้วย Local เช่น val LocalFoo = compositionLocalOf { Foo() } (Ia55b6)
  • เราย้าย takeMutableSnapshot และ takeSnapshot ไปไว้เป็นเมธอดเสริมของสแนปชอตแล้ว (I91f19)
  • @ComposableContract เลิกใช้งานแล้วเพื่อใช้คำอธิบายประกอบที่เฉพาะเจาะจงมากขึ้น 3 รายการ

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

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

  • snapshotFlow และ withMutableSnapshot ไม่ได้อยู่ในรุ่นทดลองอีกต่อไป (I6a45f)

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

  • เราได้เลิกใช้งานอาร์ติแฟกต์ compose:runtime-dispatch แล้ว ตอนนี้ MonotonicFrameClock จะอยู่ใน compose:runtime และ AndroidUiDispatcher จะอยู่ใน compose:ui (Ib5c36)

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

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

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

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

  • นำ Recomposer.current() ออก [Abstract]ComposeView ตอนนี้จะใช้ Recomposer ระดับหน้าต่างที่สร้างขึ้นแบบเลื่อนเวลาโดย ViewTreeLifecycleOwner สำหรับหน้าต่างนั้นๆ โดยค่าเริ่มต้น การคอมโพสิชันใหม่และการนับภาพเคลื่อนไหวตาม withFrameNanos จะหยุดชั่วคราวขณะที่วงจรชีวิตของโฮสต์หยุดลง (I38e11)

  • ตอนนี้ Recomposer.runningRecomposers มี StateFlow ทั่วโลกของ RecomposerInfo แบบอ่านอย่างเดียวสําหรับสังเกตสถานะการคอมโพสิชันที่กําลังดําเนินอยู่ในระหว่างกระบวนการ ใช้ API นี้แทน Recomposer.current() ซึ่งเลิกใช้งานแล้ว (If8ebe)

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

เวอร์ชัน 1.0.0-alpha11

28 มกราคม 2021

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

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

  • เราเลิกใช้งาน onCommit, onDispose และ onActive แล้วเพื่อหันมาใช้ SideEffect และ DisposableEffect API (If760e)
  • เราได้เลิกใช้งาน emit() API และ Overload ทั้งหมดแล้ว และเปลี่ยนชื่อเป็น ComposeNode API เหล่านี้เหมือนกัน เพียงแต่มีชื่อต่างกันเพื่อเป็นไปตามรูปแบบการตั้งชื่อของ Compose (I4137b)
  • ตอนนี้เราเลิกใช้งาน invalidate และ compositionReference() แล้ว และใช้ currentRecomposeScope และ rememberCompositionReference แทน (I583a8)
  • RememberObserver จะมาแทนที่ CompositionLifecycleObserver และตอนนี้ CompositionLifecycleObserver เลิกใช้งานแล้ว

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

    RememberObserver เพิ่ม onAbandoned ซึ่งจะเรียกใช้หากระบบแสดงผลอินสแตนซ์ RememberObserver จากคอลแบ็กที่ส่งไปยัง remember แต่ระบบไม่ได้จดจำไว้ในสถานะการคอมโพสิชัน และจะไม่มีการคอล onRemembered กรณีนี้อาจเกิดขึ้นได้หากข้อยกเว้นสิ้นสุดการคอมโพสิชันก่อนเสร็จสมบูรณ์ หรือระบบทิ้งการคอมโพสิชันเนื่องจากสถานะที่ใช้สร้างการคอมโพสิชันนั้นไม่ทันสมัยอีกต่อไปหรือไม่จําเป็นต้องใช้อีกต่อไป หากอินสแตนซ์ของ RememberObserver ที่ทําตามคําแนะนําแหล่งข้อมูลอ้างอิงเดียวข้างต้นกําลังติดตามแหล่งข้อมูลภายนอก ทั้ง onForgotten และ onAbandoned จะระบุว่าไม่จําเป็นต้องใช้แหล่งข้อมูลนั้นอีกต่อไป หากออบเจ็กต์ติดตามงานที่เริ่มต้นหรือทรัพยากรที่จัดสรรใน onRemembered ระบบจะละเว้น onAbandoned เนื่องจากระบบจะไม่เรียกใช้หากมีการเรียกใช้ onRemembered (I02c36)

  • อย่าทำเครื่องหมายฟังก์ชัน collectAsState() ว่าเป็นแบบแทรก (Ia73e4)

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

  • WithConstraints ได้รับการปรับโฉมใหม่เป็น BoxWithConstraints และย้ายไปอยู่ใน foundation.layout (I9420b, b/173387208)
  • ใช้ประโยชน์จาก TestCoroutineDispatcher ในการทดสอบ (I532b6)

เวอร์ชัน 1.0.0-alpha10

13 มกราคม 2021

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

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • การจัดโครงสร้างใหม่ของคอมไพเลอร์ภายใน API ช่วยให้สามารถรวมการเปลี่ยนแปลงของโหนดที่สร้างขึ้นจากคอมโพสิชันไว้ในระยะ "ใช้การเปลี่ยนแปลง" ของคอมโพสิชันได้ หลังจากที่ฟังก์ชัน @Composable ทั้งหมดทำงานเสร็จแล้ว

    การเปลี่ยนแปลงนี้เป็นการทําให้ลักษณะการทํางานเปลี่ยนแปลงไปซึ่งอาจส่งผลต่อโค้ดแอปพลิเคชัน เนื่องจากโหนดจะใช้ไม่ได้จาก API ภายในและ API ทดลองอีกต่อไปจนกว่าจะมีการใช้การเปลี่ยนแปลง โดยปกติแล้ว ปัญหานี้สามารถแก้ไขได้โดยการล้อมรอบโค้ดที่มี Dependency ดังกล่าวใน SideEffect composable เพื่อเลื่อนเวลาการเรียกใช้โค้ดจนกว่าจะสร้างและเริ่มต้นโหนดแล้ว (I018da)

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

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

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

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

  • ตอนนี้ Recomposer แสดงสถานะปัจจุบันของโฟลว์ ซึ่งช่วยให้คุณตรวจสอบกิจกรรมของ Recomposer และกิจกรรมของเอฟเฟกต์ที่เกี่ยวข้องได้ (Ifb2b9)
  • ตอนนี้คุณเข้าถึงเหตุการณ์แป้นพิมพ์แบบดั้งเดิมผ่าน keyEvent.nativeKeyEvent ได้แล้ว (I87c57, b/173086397)

เวอร์ชัน 1.0.0-alpha09

16 ธันวาคม 2020

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

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

  • นํา SlotTable, SlotReader และ SlotWriter ออกจาก API สาธารณะแล้ว ก่อนหน้านี้มีการทำเครื่องหมายเป็น InternalComposeAPI ตอนนี้เป็นข้อมูลภายในของข้อบังคับการเขียน

    เราได้เพิ่ม CompositionData และ CompositionGroup เข้ามาเพื่อแทนที่ ui-tooling API ที่ใช้ดึงข้อมูลการคอมโพส ข้อมูลเหล่านี้เป็นแบบสาธารณะ แต่ไม่ได้มีไว้เพื่อใช้งานนอก ui-tooling API เนื่องจากให้ข้อมูลที่ยังไม่ได้ประมวลผลซึ่ง ui-tooling API จะตีความ (I31a9c)

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

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

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

    เพิ่มวิธีการใหม่ insertBottomUp() แล้ว

    ตัวใช้จะแทรกโหนดลงในต้นไม้ที่แก้ไขอยู่โดยใช้ insertTopDown() หรือ insertBottomUp() ทั้งนี้ขึ้นอยู่กับว่าวิธีใดมีประสิทธิภาพดีกว่า

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

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

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

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

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

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

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

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

  • AndroidOwner เปลี่ยนเป็นภายใน (Ibcad0, b/170296980)
  • subcomposeInto(LayoutNode) เปลี่ยนเป็นแบบภายใน (Id724a)

เวอร์ชัน 1.0.0-alpha08

2 ธันวาคม 2020

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

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

  • เพิ่มการตรวจสอบ Lint สําหรับการตั้งชื่อและตําแหน่งพารามิเตอร์ Lambda ที่คอมโพสิเบิล เพื่อตรวจสอบความสอดคล้องตามหลักเกณฑ์ของ Compose รวมถึงย้ายข้อมูล API บางรายการที่ใช้ children เป็นชื่อของ lambda ต่อท้ายเป็น content ตามการตรวจสอบและคำแนะนำของ Lint (Iec48e)
  • Recomposer ไม่รับ EmbeddingContext อีกต่อไป ระบบจะรับข้อมูลที่จำเป็นสำหรับการกำหนดเวลาจาก effectCoroutineContext FrameManager เลิกใช้งานแล้ว การผสานรวมแพลตฟอร์มควรเริ่มต้นการจัดการสแนปชอตทั่วโลกของตนเอง (I02369)
  • เปลี่ยนชื่อฟังก์ชัน RestorableStateHolder.withRestorableState เป็น RestorableStateProvider (I66640)

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

  • เลิกใช้งานแอมเบียนท์ที่มีชื่อต่อท้ายด้วย Ambient และแทนที่ด้วยพร็อพเพอร์ตี้ใหม่ที่ขึ้นต้นด้วยแอมเบียนท์ตามหลักเกณฑ์อื่นๆ ของแอมเบียนท์และ Compose API (I33440)
  • นําโมดูล ui-test เก่าและสตับออก (I3a7cb)

เวอร์ชัน 1.0.0-alpha07

11 พฤศจิกายน 2020

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

ฟีเจอร์ใหม่

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

  • เราเลิกใช้งานคำอธิบายประกอบ@UnionTypeแล้ว (I57cde)
  • มีการเพิ่ม provideDefault เพื่อเป็นทางเลือกในการระบุค่าแอมเบียนท์ และสามารถใช้เพื่อระบุค่าแอมเบียนท์ที่จะตั้งค่าก็ต่อเมื่อไม่มีค่าแอมเบียนท์ที่ระบุไว้แล้วเท่านั้น (Id6635, b/171024925)
  • เปลี่ยนชื่อ LaunchedTask เป็น LaunchedEffect เพื่อให้สอดคล้องกับ API ของ SideEffect และ DisposableEffect ไม่อนุญาตให้ใช้ LaunchedEffect ที่ไม่มีพารามิเตอร์เรื่องเพื่อส่งเสริมแนวทางปฏิบัติแนะนำ (Ifd3d4)
  • ตอนนี้ Applier มีการเรียกกลับ onBeginChanges/onEndChanges ที่เรียกใช้เมื่อ Composer เริ่ม/เสร็จสิ้นการใช้การเปลี่ยนแปลงกับต้นไม้ ซึ่งอาจใช้สำหรับการจัดการทรัพยากรแบบเป็นกลุ่มหากจำเป็น (Icf476)
  • ตอนนี้ Recomposer ต้องใช้ CoroutineContext ในการสร้าง (Ic4610)
  • การเปลี่ยนแปลงการใช้งาน SlotTable ภายในซึ่งไม่ควรส่งผลต่อ API สาธารณะ (If9828)
  • นำอะแดปเตอร์ rxjava2 ที่เลิกใช้งานซึ่งไม่ใช้ค่าเริ่มต้นออกแล้ว (Idb72f)

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

  • เราเลิกใช้งาน foundation.Text แล้วและแทนที่ด้วย material.Text สำหรับ API ข้อความพื้นฐานที่ไม่แสดงความคิดเห็นซึ่งไม่ใช้ค่าจากธีม โปรดดู androidx.compose.foundation.BasicText (If64cb)
  • เลิกใช้งาน BaseTextField แล้ว ให้ใช้ BasicTextField แทน (I896eb)
  • ย้ายสัญลักษณ์ที่เกี่ยวข้องกับเลย์เอาต์หลายรายการจาก androidx.compose.ui ไปยัง androidx.compose.layout.ui แล้ว (I0fa98, b/170475424)

การมีส่วนร่วมจากภายนอก

  • เพิ่มโมดูล runtime-rxjava3 สำหรับองค์ประกอบ คล้ายกับ runtime-rxjava2 (I02cbf)

เวอร์ชัน 1.0.0-alpha06

28 ตุลาคม 2020

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

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

  • ตอนนี้ Recomposer เป็น CompositionReference และเป็นองค์ประกอบหลักที่ถูกต้อง ตอนนี้คุณต้องใช้ Explicit Recomposer ในตำแหน่งที่น้อยลง (I4036f)
  • เพิ่ม API ของ DisposableEffect คู่กับ SideEffect ซึ่งทำหน้าที่เป็น onCommit-with-params แต่ต้องมี onDispose
    • เพิ่ม rememberUpdatedState API เพื่อเผยแพร่ข้อมูลจากการจัดเรียงใหม่ไปยังกระบวนการต่อเนื่องหรือที่ทำงานอยู่เป็นเวลานาน เช่น DisposableEffects หรือ LaunchedTasks
    • (Id50b9)
  • ตอนนี้ MutableVector ใช้ RandomAccess แล้ว (I85d73, b/170461551)
  • เพิ่มคอมโพสิชัน SideEffect สำหรับการใช้ผลข้างเคียงของคอมโพสิชันกับออบเจ็กต์ที่คอมโพสิชันจัดการ SideEffect มีไว้เพื่อแทนที่คอมโพสิชัน onCommit (Ia77c2)
  • API ใหม่สำหรับทดสอบ RestorableStateHolder ซึ่งช่วยให้บันทึกสถานะที่กําหนดด้วย [savedInstanceState] และ [rememberSavedInstanceState] สําหรับซับต้นไม้ได้ก่อนที่จะทิ้ง เพื่อให้สามารถคอมโพสิชันกลับได้อีกครั้งในครั้งถัดไปด้วยสถานะที่กู้คืน (I66884, b/166586419)

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

  • เปิดใช้ทรานซิชันใน ComposeTestRule นำตัวเลือกในการเปิดใช้เคอร์เซอร์ที่กะพริบออกจาก ComposeTestRule (If0de3)

เวอร์ชัน 1.0.0-alpha05

14 ตุลาคม 2020

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

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

  • Modifier.pointerInput ที่อยู่ระหว่างการทดสอบซึ่งระงับตัวแก้ไขอินพุต (Ia77d2)
  • ประสิทธิภาพการเลื่อนของ LazyColumn/Row ได้รับการปรับปรุงโดยทำงานน้อยลงในองค์ประกอบย่อยทุกครั้งที่เลื่อน เพิ่มเมธอด hasInvalidations() ใหม่สำหรับคลาส Composition เปลี่ยนชื่อเมธอด hasPendingChanges() จาก Recomposer เป็น hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
  • เพิ่ม produceState API สําหรับการเริ่มโคโรทีนจากคอมโพสิชันซึ่งอัปเดตค่า State<T> รายการเดียวเมื่อเวลาผ่านไป (Id4a57)
  • เปลี่ยนชื่อ launchInComposition เป็น LaunchedTask เพื่อให้สอดคล้องกับหลักเกณฑ์ Compose API (I99a8e)
  • ตอนนี้ลําดับการเรียกใช้ place() ในเลย์เอาต์ที่กําหนดเองจะกําหนดลําดับการวาดสําหรับองค์ประกอบย่อย (Ibc9f6)

เวอร์ชัน 1.0.0-alpha04

1 ตุลาคม 2020

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

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

  • เพิ่ม OwnerScope เพื่ออนุญาตให้รวบรวมขอบเขตการสังเกตเลย์เอาต์และการวาดเมื่อไม่มีผลแล้ว (Ic4cf8)
  • เพิ่ม derivedStateOf API เพื่อสร้างออบเจ็กต์สถานะตามการคำนวณที่อาจอ่าน (และดึงมาจาก) ออบเจ็กต์สถานะอื่นๆ (If758b)
  • เพิ่ม TestOnly API สําหรับ SnapshotStateObserver (I6e2a9)

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

  • เลิกใช้งาน foundation.Box แล้ว โปรดใช้ foundation.layout.Box แทน (Ie5950, b/167680279)

เวอร์ชัน 1.0.0-alpha03

16 กันยายน 2020

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

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

  • CompositionCoroutineScope ไม่ได้ติดตั้งใช้งานอีกต่อไป MonotonicFrameClock ผู้เรียกใช้ withFrameNanos ควรนําเข้าฟังก์ชันระดับบนสุดอย่างชัดเจน (Icb642, b/166778123)

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

  • เราได้เลิกใช้งานฟังก์ชันการทดสอบส่วนกลาง เช่น onNode หรือ waitForIdle แล้ว โปรดเปลี่ยนไปใช้ฟังก์ชันใหม่ที่กำหนดไว้ใน ComposeTestRule (I7f45a)
  • launchInComposition ไม่เปิด Coroutine ที่ไม่ได้ส่งแล้วอีกต่อไป (Ief6af, b/166486000)

เวอร์ชัน 1.0.0-alpha02

2 กันยายน 2020

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

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

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

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

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

  • เลิกใช้งาน onPreCommit แล้ว ตอนนี้ onCommit มีลักษณะการทํางานของ onPreCommit

    ตอนนี้ onCommit และ onActive จะทํางานในเฟรม Choreographer เดียวกับที่คอมโพสิชันมีการเปลี่ยนแปลงที่ commit ไว้ ไม่ใช่ที่จุดเริ่มต้นของเฟรม Choreographer ถัดไป (I70403)

เวอร์ชัน 1.0.0-alpha01

26 สิงหาคม 2020

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

เวอร์ชัน 0.1.0-dev

เวอร์ชัน 0.1.0-dev17

19 สิงหาคม 2020

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

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

  • ตอนนี้การระบุข้อมูลที่กำหนดเองสามารถประกาศว่าตัวตั้งค่าอย่างน้อย 1 รายการสามารถข้ามและคอมโพสิชันใหม่ได้โดยไม่เกี่ยวข้องกับการระบุข้อมูล (Ibbd13)
  • นำการเรียก FrameManager ที่เลิกใช้งานออกแล้ว

    มีการเปลี่ยนแปลง API การคอมโพสิทภายในเพื่อลดปริมาณการเรียกใช้ทรัพยากรเพิ่มเติมในการติดตามออบเจ็กต์สถานะ เช่น mutableStateof() (I80ba6)

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

  • ตอนนี้ Flow.collectAsState จะกำหนดตัวจัดเตรียมเริ่มต้นจากคอมโพสิชันเองแทนที่จะใช้ Dispatchers.Main เป็นค่าเริ่มต้น (I9c1d9)

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

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

  • emitView เลิกใช้งานแล้ว ใช้ AndroidView แทนหากเป็นไปได้สำหรับการส่งออกมุมมองภายใน Compose โปรดทราบว่าระบบจะไม่รองรับการคอมโพสิชัน View และ ViewGroup โดยตรงในอนาคต เว้นแต่ว่าองค์ประกอบเหล่านี้จะเป็นใบไม้ในต้นไม้คอมโพสิชัน ซึ่งในกรณีนี้จะใช้ AndroidView ได้ (I29b1e, b/163871221)

เวอร์ชัน 0.1.0-dev16

5 สิงหาคม 2020

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

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

  • นโยบายการกลายพันธุ์เริ่มต้นของ mutableStateOf(), ambientOf() และ savedInstanceStateOf() เปลี่ยนเป็น structuralEqualityPolicy() แทน referentialEqualityPolicy()

    ค่าเริ่มต้นในการพิจารณาว่าค่าใหม่ที่กําหนดให้กับอินสแตนซ์ mutableStateOf() ถือว่าเป็นการเปลี่ยนแปลงหรือไม่ ตอนนี้จะเปลี่ยนไปใช้ == แทนการใช้ ===

    ดู https://kotlinlang.org/docs/reference/equality.html

    ambientOf() และ savedInstanceStateOf() ใช้ mutableStateOf() ในการติดตั้งใช้งาน จึงมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับ mutableStateOf()

    การใช้ความเท่าเทียมเชิงโครงสร้างจะตรงกับความต้องการของนักพัฒนาแอปมากกว่า

    ตัวอย่างเช่น

    val state = mutableStateOf(1f)
    

    ตามด้วย

    state.value = 1f
    

    จะถือว่าไม่มีการเปลี่ยนแปลงstateอีกต่อไป และการใช้stateระหว่างการประพันธ์เพลงจะไม่จำเป็นต้องเรียบเรียงใหม่อีกต่อไป

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

    ชั้นเรียนที่ลบล้าง equals() เช่น ชั้นเรียน data อาจมีประสิทธิภาพลดลงเนื่องจากระบบจะเรียกใช้เมธอด equals() ของชั้นเรียนเหล่านั้นโดยค่าเริ่มต้นเมื่อมอบหมายให้กับ mutableStateOf()

    คุณคืนค่าลักษณะการทํางานก่อนหน้าได้โดยการเพิ่มพารามิเตอร์นโยบาย policy = referentialEqualityPolicy() ลงในคําเรียก mutableStateOf(), ambientOf() และ savedInstanceStateOf() (Ic21a7)

  • ตอนนี้ Row และ Column เป็นฟังก์ชันอินไลน์ที่ช่วยลดค่าใช้จ่ายในการเรียกใช้อย่างมีนัยสำคัญ (I75c10)

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

  • เลิกใช้งาน setViewContent แล้ว ควรใช้ setContent แทน (I7e497, b/160335130)
  • เพิ่ม MonotonicFrameAnimationClock ที่ช่วยให้คุณใช้ MonotonicFrameClock เป็น AnimationClockObservable เพื่อเชื่อมช่องว่างระหว่างนาฬิกาแบบโคโริวทีนใหม่กับ API ที่ยังคงใช้นาฬิกาแบบการเรียกกลับแบบเก่า

    ตอนนี้ MonotonicFrameClock ที่เทียบเท่า ManualAnimationClock เปลี่ยนชื่อเป็น ManualFrameClock แล้ว (I111c7, b/161247083)

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

  • เลิกใช้งาน Modifier.plus แล้ว ให้ใช้ Modifier.then แทน "Then" มีสัญญาณการจัดเรียงที่ชัดเจนกว่า ทั้งยังห้ามไม่ให้พิมพ์ Modifier.padding().background() + anotherModifier ซึ่งทำให้ลำดับคำขาดตอนกลางและอ่านยากขึ้น (Iedd58, b/161529964)

  • เพิ่ม SubcomposeLayout แล้ว องค์ประกอบนี้เป็นองค์ประกอบพื้นฐานระดับล่างที่อนุญาตให้คอมโพสิชันย่อยในระหว่างการวัดได้หากเราต้องการใช้ค่าบางอย่างที่พร้อมใช้งานในภายหลังระหว่างการวัดสำหรับองค์ประกอบย่อย เช่น ไม่ได้ใช้ WithConstraints โดยใช้ SubcomposeLayout (I25cc8)

  • เปลี่ยนชื่อ Material FilledTextField เป็น TextField และเปลี่ยนชื่อ TextField พื้นฐานเป็น BaseTextField เพื่อให้ค้นพบและใช้งาน API ที่ต้องการได้ง่ายที่สุด (Ia6242, b/155482676)

  • เปลี่ยนชื่อ Modifier.drawBackground เป็น Modifier.background (I13677)

เวอร์ชัน 0.1.0-dev15

22 กรกฎาคม 2020

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

การอัปเดตทรัพยากร Dependencies

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

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

  • เลิกใช้งานคำอธิบายประกอบ @Model แล้ว ใช้ state และ mutableStateOf แทน เราตัดสินใจเลิกใช้งานฟีเจอร์นี้หลังจากได้หารือกันอย่างรอบคอบแล้ว

    เหตุผล

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

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

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

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

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

    ทางเลือกที่ 1: ใช้ State<OriginalClass> และสร้างสำเนา

    แนวทางนี้ทำได้ง่ายขึ้นด้วยคลาสข้อมูลของ Kotlin โดยพื้นฐานแล้ว ให้เปลี่ยนพร็อพเพอร์ตี้ var ทั้งหมดก่อนหน้านี้ให้เป็นพร็อพเพอร์ตี้ val ของคลาสข้อมูล จากนั้นใช้ state แทน remember และกำหนดค่าสถานะให้กับสำเนาที่โคลนจากต้นฉบับโดยใช้เมธอด copy(...) ที่สะดวกของคลาสข้อมูล

    โปรดทราบว่าแนวทางนี้จะได้ผลก็ต่อเมื่อมีการดัดแปลงคลาสนั้นในขอบเขตเดียวกับที่สร้างอินสแตนซ์ State เท่านั้น หากคลาสมีการกลายพันธุ์ภายในตัวเองนอกขอบเขตการใช้งาน และคุณอาศัยการสังเกตการณ์นั้น คุณควรใช้แนวทางถัดไป

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    วิธีที่ 2: ใช้ mutableStateOf และตัวรับพร็อพเพอร์ตี้

    แนวทางนี้ทำได้ง่ายขึ้นด้วยตัวดำเนินการแทนพร็อพเพอร์ตี้ของ Kotlin และ mutableStateOf API ซึ่งช่วยให้คุณสร้างอินสแตนซ์ MutableState นอกการคอมโพสิชันได้ โดยพื้นฐานแล้ว ให้แทนที่พร็อพเพอร์ตี้ var ทั้งหมดของคลาสเดิมด้วยพร็อพเพอร์ตี้ var ที่มี mutableStateOf เป็นตัวแทนพร็อพเพอร์ตี้ ข้อดีคือการใช้งานคลาสจะไม่เปลี่ยนแปลงเลย มีเพียงการใช้งานภายในเท่านั้น อย่างไรก็ตาม ลักษณะการทํางานจะไม่เหมือนกับตัวอย่างเดิมทั้งหมด เนื่องจากตอนนี้ระบบจะสังเกต/ติดตามพร็อพเพอร์ตี้แต่ละรายการแยกกัน ดังนั้นการคอมโพสิชันใหม่ที่คุณเห็นหลังจากการรีแฟกทอริงนี้อาจแคบลง (ซึ่งเป็นเรื่องดี)

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)

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

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

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

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

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

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

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

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

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

  • เพิ่ม sortWith และ removeRange ลงใน MutableVector (Icccf7)

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

  • ตอนนี้ Applier ต้องใช้เมธอด clear() ในการทิ้งคอมโพสิชัน (Ibe697)

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

  • เพิ่ม rememberCoroutineScope() เพื่อรับ CoroutineScope ที่มีการจัดการในคอมโพสิชันสำหรับการเปิดใช้งานงานเพื่อตอบสนองต่อเหตุการณ์ (I0e264)

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

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

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

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

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

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

  • คําอธิบายประกอบ @Composable ใช้กับคลาสไม่ได้อีกต่อไป (Ia5f02)

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

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

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

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

  • @Direct ถูกเลิกใช้งานแล้ว โปรดใช้ @ComposableContract(restartable=false) (If4708)

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

  • เพิ่มอะแดปเตอร์สำหรับ Flow ตัวอย่างการใช้งาน: val value by flow.collectAsState() (If2198, b/153375923)

  • [Mutable]ย้ายโอเปอเรเตอร์ตัวรับมอบสิทธิ์พร็อพเพอร์ตี้สถานะไปยังส่วนขยายเพื่อรองรับการเพิ่มประสิทธิภาพตัวรับมอบสิทธิ์พร็อพเพอร์ตี้ของ Kotlin 1.4 ผู้โทรต้องเพิ่มการนําเข้าเพื่อใช้ by state { ... } หรือ by mutableStateOf(...) ต่อ (I5312c)

  • ย้าย androidx.compose.ViewComposer ไปยัง androidx.ui.node.UiComposerแล้ว และนํา androidx.compose.Emittable ออกแล้ว เนื่องจากมี ComponentNode อยู่แล้ว androidx.compose.ViewAdapters ถูกนําออกแล้ว กรณีการใช้งานเหล่านี้ไม่รองรับแล้ว เลิกใช้งาน Compose.composeInto แล้ว ใช้ setContent หรือ setViewContent แทน เลิกใช้งาน Compose.disposeComposition แล้ว ใช้เมธอด dispose ใน Composition ที่ setContent แสดงผลแทน androidx.compose.Compose.subcomposeInto ย้ายไปที่ androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt เปลี่ยนชื่อเป็น ComponentNode#insertAt ComponentNode#emitRemoveAt เปลี่ยนชื่อเป็น ComponentNode#removeAt ComponentNode#emitMode เปลี่ยนชื่อเป็น ComponentNode#move (Idef00)

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

  • การเปลี่ยนแปลงที่สำคัญใน Ambients API ดูรายละเอียดได้ในบันทึกและเอกสารประกอบของ Ambient<T> (I4c7ee, b/143769776)

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

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

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

  • ตอนนี้ savedInstanceState() ใช้กับประเภทที่อนุญาตค่า Null ได้แล้ว (I6847f, b/153532190)

  • listSaver() และ mapSaver() ใหม่เพื่อเขียนออบเจ็กต์ Saver ที่กําหนดเองได้ง่ายขึ้น (I8cf68, b/152331508)

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

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

  • เปลี่ยนชื่อ runOnIdleCompose เป็น runOnIdle (I83607)
  • เปลี่ยน LayoutNode เป็น API เวอร์ชันทดลอง (I4f2e9)
  • เลิกใช้งาน androidx.ui.foundation.TextFieldValue และ androidx.ui.input.EditorValue แล้ว คอมโพสิเบิล TextField, FilledTextField และ CoreTextField ที่ใช้ประเภทดังกล่าวก็เลิกใช้งานด้วย โปรดใช้ androidx.ui.input.TextFieldValue แทน (I4066d, b/155211005)
  • นำ DrawBackground API ที่เลิกใช้งานออกแล้ว และใช้ Extension DrawBackground API ใน Modifier แทน ปรับแต่งการใช้สี แปรง และสีวาดพื้นหลังเพื่อลดเส้นทางโค้ด รวมถึงนำข้อกำหนดในการสร้างตัวแก้ไขออกเพื่อเป็นส่วนหนึ่งของการคอมโพสิชัน (I0343a)
  • อัปเดต API ระดับที่สูงขึ้นเพื่อแสดง Canvas ให้แสดง CanvasScope แทน ซึ่งทำให้ผู้บริโภคไม่ต้องดูแลรักษาออบเจ็กต์ Paint ของตนเอง สําหรับผู้บริโภคที่ยังคงต้องการเข้าถึง Canvas อยู่ สามารถใช้เมธอดของส่วนขยาย drawCanvas ซึ่งจะให้การเรียกกลับเพื่อออกคําสั่งวาดด้วย Canvas ที่อยู่เบื้องหลัง (I80afd)
  • มีการเปลี่ยนแปลง API ของแลมดาต่อท้าย WithConstraints ตอนนี้มีขอบเขตผู้รับแทนพารามิเตอร์ 2 รายการ ซึ่งนอกเหนือจากข้อจำกัดและ layoutDirection แล้วยังมีพร็อพเพอร์ตี้ minWidth, maxWidth, minHeight และ maxHeight ใน Dp (I91b9a, b/149979702)
  • เพิ่มตัวแก้ไขการถ่วงสมมาตร (I39840)
  • อัปเดต wrapContentWidth และ wrapContentHeight เพื่อใช้การวางแนวแนวตั้งหรือแนวนอนแทนการวางแนว เราได้อัปเดตตัวแก้ไขแรงโน้มถ่วงให้ยอมรับการจัดแนวแนวตั้งหรือแนวนอน อัปเดตแถว คอลัมน์ และกองเพื่อรองรับการจัดแนวต่อเนื่องที่กำหนดเอง (Ib0728)
  • เปลี่ยนชื่อโมดูล ui-text เป็น ui-text-core (I57dec)
  • ปรับปรุง DrawModifier API
    • สร้างขอบเขตผู้รับสำหรับ ContentDrawScope ของ draw()
    • นําพารามิเตอร์ทั้งหมดใน draw() ออก
    • DrawScope มีอินเทอร์เฟซเดียวกับ CanvasScope เดิม
    • ContentDrawScope มีเมธอด drawContent() (Ibaced, b/152919067)
  • เลิกใช้งาน ColoredRect แล้ว ให้ใช้ Box(Modifier.preferredSize(width, height).drawBackground(color)) แทน (I499fa, b/152753731)
  • แทนที่โอเปอเรเตอร์ตัวเพิ่มตัวแก้ไขด้วยฟังก์ชันส่วนขยายของโรงงาน (I225e4)
  • ตอนนี้สมาชิก RowScope และ ColumnScope สามารถเข้าถึงได้นอกแถวและคอลัมน์ (I3a641)
  • เปลี่ยนชื่อ LayoutFlexible เป็น LayoutWeight เปลี่ยนชื่อพารามิเตอร์แบบแน่นเป็น "fill" (If4738)
  • WithConstraints ได้พารามิเตอร์ LayoutDirection (I6d6f7)
  • เปลี่ยนชื่อพื้นหลังเป็น DrawBackground และทําให้ระบบจดจําโดยค่าเริ่มต้น (Ia0bd3)
  • แทนที่ ButtonStyle ด้วยฟังก์ชันที่แยกต่างหากและนำการโอเวอร์โหลดข้อความ (สตริง) ออก ดูข้อมูลการใช้งานจากตัวอย่างที่อัปเดตแล้ว (If63ab, b/146478620, b/146482131)
  • ตอนนี้ runOnIdleCompose และ runOnUiThread เป็นฟังก์ชันส่วนกลางแทนเมธอดใน ComposeTestRule (Icbe8f)

การมีส่วนร่วมจากภายนอก

  • นำ API ที่ไม่จำเป็น เช่น Looper และ Handler ออกจากเลเยอร์การพอร์ตรันไทม์ของ Compose (I6847d)
  • เลิกใช้งาน Flow<T>.collectAsState() ที่ไม่มีค่าเริ่มต้น ให้ใช้ StateFlow<T> หรือส่งค่าเริ่มต้นที่ชัดเจนแทน (I63f98, b/157674865)