כתיבת זמן ריצה
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(עיינו במסמכי העזר של ה-API לגבי כל חבילות הכתיבה)
העדכון האחרון | גרסה יציבה | מועמד לפרסום | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
7 באוגוסט 2024 | 1.6.8 | - | 1.7.0-beta07 | - |
מבנה
תהליך הכתיבה הוא שילוב של 7 מזהי קבוצות Maven בתוך androidx
. כל קבוצה
מכיל קבוצת משנה מטורגטת של פונקציונליות, שלכל אחת מהן יש גרסה משלה
הערות.
בטבלה הזו מוסבר על הקבוצות והקישורים לכל קבוצה של נתוני גרסה.
קיבוץ | תיאור |
---|---|
compose.animation | יוצרים אנימציות באפליקציות 'Jetpack פיתוח נייטיב' כדי להעשיר את חוויית המשתמש. |
compose.compiler | שינוי פונקציות @Composable והפעלת אופטימיזציות באמצעות פלאגין מהדר של Kotlin. |
compose.foundation | כתיבת אפליקציות ב-Jetpack פיתוח נייטיב עם אבני בניין מוכנות לשימוש והרחבת היסודות לבניית חלקים משלכם במערכת העיצוב. |
compose.material | בניית ממשקי משתמש ב-Jetpack פיתוח נייטיב עם רכיבים מוכנים לשימוש ב-Material Design. זו נקודת הכניסה ברמה הגבוהה יותר של 'כתיבה', שנועדה לספק רכיבים שתואמים לאלה שמתוארים באתר www.material.io. |
compose.material3 | בניית ממשקי משתמש ב-Jetpack פיתוח נייטיב עם רכיבי Material Design 3, הפיתוח הבא של עיצוב Material Design. Material 3 כולל עיצוב ורכיבים מעודכנים ותכונות התאמה אישית של Material You, כמו צבעים דינמיים, ונועד להיות אחיד עם הסגנון החזותי החדש של Android 12 וממשק המשתמש של המערכת. |
compose.runtime | אבני הבניין הבסיסיות של מודל התכנות וניהול המצבים של Compose, ושל זמן הריצה העיקרי של הפלאגין Compose Compiler לטירגוט. |
compose.ui | רכיבים בסיסיים בממשק המשתמש של הרכבה שנדרשים לאינטראקציה עם המכשיר, כולל פריסה, שרטוט וקלט. |
הצהרה על יחסי תלות
כדי להוסיף תלות בכתיבה, צריך להוסיף את מאגר Google Maven פרויקט. למאגר Maven של Google אפשר לקבל מידע נוסף.
מוסיפים את יחסי התלות של פריטי המידע הנדרשים בקובץ build.gradle
בשביל
האפליקציה או המודול שלך:
מגניב
dependencies { implementation "androidx.compose.runtime:runtime:1.6.8" implementation "androidx.compose.runtime:runtime-livedata:1.6.8" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.8") implementation("androidx.compose.runtime:runtime-livedata:1.6.8") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
למידע נוסף על יחסי תלות, אפשר לעיין במאמר הוספת יחסי תלות של build.
משוב
המשוב שלך עוזר לנו לשפר את Jetpack. נשמח לשמוע אם גילית בעיות חדשות או אם יש לך רעיונות לשיפור הספרייה הזו. מומלץ לעיין בעיות קיימות בספרייה הזו לפני שיוצרים ספר חדש. אפשר להוסיף את ההצבעה שלך לבעיה קיימת על ידי לחיצה על לחצן הכוכב.
מקורות מידע בנושא מעקב אחר בעיות אפשר לקבל מידע נוסף.
גרסה 1.0 של מעקב זמן ריצה
גרסה 1.0.0-beta01
29 בנובמבר 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
משוחרר. גרסה 1.0.0-beta01 מכילה את התחייבויות אלה.
גרסה 1.0.0-alpha05
15 בנובמבר 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
משוחרר. גרסה 1.0.0-alpha05 מכילה את התחייבויות אלה.
תיקוני באגים
- הצמדת יחסי תלות לגרסאות היציבות הכי נמוכות (כלומר, זמן ריצה של כתיבה ו-tracing-perfetto) – תיקון בעיה שבה מעקב אחרי זמן ריצה של כתיבת הודעה יוביל לגרסה חדשה יותר של זמן ריצה של כתיבת הודעה לאפליקציה.
גרסה 1.0.0-alpha04
23 באוגוסט 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את התחייבויות אלה.
תכונות חדשות
- תאימות לגרסאות העדכניות של נקודת ההשוואה ו-Tracing Perfetto, שמאפשרים תמיכה במעקב אחר הרכב בזמן ההפעלה של האפליקציה (הפעלה במצב התחלתי), למשל. בנקודת השוואה של AndroidX וב-Android Studio (החל מ-Hdgehog Beta 2).
שינויים ב-API
- השם של
androidx.tracing.perfetto.Trace
השתנה. השם החדש הואandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - מעקב אחר ממשקי ה-API של Perfetto SDK תואם ל-
android.os.Trace
. (I73ba0, b/282199917) - דרישות מוקדמות למעקב אחר הפעלת האפליקציה. (Iad890)
- קובצי API ניסיוניים וציבוריים מוזגו (I0f2e1, b/278769092)
גרסה 1.0.0-alpha02
8 בפברואר 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את התחייבויות אלה.
תכונות חדשות
- אין שינויים פונקציונליות. אופטימיזציות מרובות של ביצועים ביחסי תלות במורד הזרם
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
היא ספרייה שמאפשרת הוספה של כלים שתומכים בה (בקרוב) תאפשר מעקב מורחב באפליקציית 'כתיבה'. הגרסה הראשונית הזו היא 1.0.0-alpha01.
גרסה 1.7
גרסה 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
- אובייקטים של מצב חדש שנוצרו נגישים באופן מיידי מקובצי snapshot אחרים, כולל תמונת המצב הגלובלית, עם המצב הראשוני שלהם. שינויים שיבוצעו לאחר מכן לא יהיו גלויים עד להחלת תמונת המצב שבה האובייקט נוצר.
- המצב הראשוני של
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
פעם אחת לפי הערכת מצב נגזרת (ee7daf) - קריאה אחת של
currentRecord
לכל תצפית ביצירה (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
ל-lambdas מוטבעות. (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 ל-lambdas בתוך השורה. (acfca0)
- לפעמים, אפשר לתקן תוכן שניתן להעביר בפורמט מקומי שגוי. (035cd6)
- מומלץ להשתמש במיפויי גיבוב (hash) מהירים יותר שלא מקצים ב-
RecomposeScopeImpl
. (d79494) - שימוש בחשבון
ObjectIntMap
ב-DerivedState
. (21862e) - אפשר להשתמש ב-
IntRef
עבור IntSnapshotThreadLocal
ב-DerivedState
. (04eaf4)
גרסה 1.6.0-alpha08
18 באוקטובר 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
משוחרר. גרסה 1.6.0-alpha08 מכילה את התחייבויות אלה.
תיקוני באגים
- הפעלה של מחזורי חיים של
RememberObserver
רק אם היא מאוחסנת בחישוב של זכירת הזיכרון. (f6b4dc) - שיפור ההקצאות של רשימות הפסילות. (954d63)
- שימוש במפות חדשות שלא מוקצות ב-
SnapshotStateObserver
. (4303ce) - ניקוי ביטולי תוקף כשהיצירה מושבתת. (e001be)
גרסה 1.6.0-alpha07
4 באוקטובר 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
משוחרר. גרסה 1.6.0-alpha07 מכילה את התחייבויות אלה.
שינויים ב-API
SnapshotStateList
מסומן עכשיו כ-RandomAccess
כדי לאפשר שימוש בגרסה הישירה של הוספה לאינדקס של עוזרים ברשימה. (I5210c, b/219554654)
גרסה 1.6.0-alpha06
20 בספטמבר 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
משוחרר. גרסה 1.6.0-alpha06 מכילה את התחייבויות אלה.
גרסה 1.6.0-alpha05
6 בספטמבר 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
משוחרר. גרסה 1.6.0-alpha05 מכילה את התחייבויות אלה.
גרסה 1.6.0-alpha04
23 באוגוסט 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
משוחרר. גרסה 1.6.0-alpha04 מכילה את התחייבויות אלה.
תכונות חדשות
- חריגים להטמעה מחדש שנבלעו במהלך לולאת הרכבה מחדש (4dff9a)
שינויים ב-API
- נוספה שיטה להשבתת
ReusableComposition
, הסרת תצפיות אבל שמירת הצמתים במקומם. אפשר להפעיל שוב את היצירה המושבתת באמצעות קריאה אלsetContent
. (Ib7f31) - הוספת ממשק
ReusableComposition
לניהול מחזור חיים ושימוש חוזר בהרכבת משנה. (I812d1, b/252846775)
גרסה 1.6.0-alpha03
9 באוגוסט 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
משוחרר. גרסה 1.6.0-alpha03 מכילה את התחייבויות אלה.
תיקוני באגים
- תיקון אופטימיזציה חדשה של
CompositionLocalProvider
(3118e88) - תיקון האופן שבו מפרקים צמתים של תוכן שניתן להזיז. (5e3d59b)
גרסה 1.6.0-alpha02
26 ביולי 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
משוחרר. גרסה 1.6.0-alpha02 מכילה את התחייבויות אלה.
תכונות חדשות ו שיפורי ביצועים
- אופטימיזציה
rememberSaveable
(f01d79) - דחייה של קריאה מחדש של מצבים נגזרים עד לתיעוד השינויים (f38099)
- שיפור של מתן ערכים מקומיים ליצירה (a337ea)
- כדי למנוע יצירה של קבוצה, התווית
SideEffect
מסומנת בתור@ExplicitGroupsComposable
. (I74815) - נמנעים מהשוואה של מפות מקומיות מסוג קומפוזיציה במקרה של שימוש חוזר (782071)
שינויים ב-API
- נוספה עומס יתר של אותיות רישיות עבור
CompositionLocalProviders
, שמבטל את התקורה שמשמשת להאצה של הזנת ערכים מרובים, אבל גבוהה יותר כשמספקים ערך יחיד. (I6d640, b/288169379)
תיקוני באגים
- תיקון דליפת זיכרון בטבלת מיקומי מודעות (73fcfe)
- תיקון האופן שבו אנחנו משחזרים את
rememberSaveable
כאשרstateSaver
מחזירה null (90748c)
גרסה 1.6.0-alpha01
21 ביוני 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
משוחרר. גרסה 1.6.0-alpha01 מכילה את התחייבויות אלה.
תיקוני באגים
- דילוג על הרכבה מחדש של הרכבות משנה שיוסרו. (Ieeb99, b/254645321)
- הקצאות מצומצמות יותר בהחלת תמונות מצב. (I65c09)
- לא לחשב את
readableHash
בDerivedState
אם תמונת המצב לא שונתה (68c565)
גירסה 1.5
גרסה 1.5.4
18 באוקטובר 2023
androidx.compose.runtime:runtime-*:1.5.4
משוחרר. גרסה 1.5.4 כוללת את ההתחייבויות האלה.
גרסה 1.5.3
4 באוקטובר 2023
androidx.compose.runtime:runtime-*:1.5.3
משוחרר. גרסה 1.5.3 כוללת את ההתחייבויות האלה.
גרסה 1.5.2
27 בספטמבר 2023
androidx.compose.runtime:runtime-*:1.5.2
משוחרר. גרסה 1.5.2 כוללת את ההתחייבויות האלה.
גירסה 1.5.1
6 בספטמבר 2023
androidx.compose.runtime:runtime-*:1.5.1
משוחרר. גרסה 1.5.1 כוללת את ההתחייבויות האלה.
גרסה 1.5.0
9 באוגוסט 2023
androidx.compose.runtime:runtime-*:1.5.0
משוחרר. גרסה 1.5.0 כוללת את ההתחייבויות האלה.
שינויים ב-API
- הוסרו הקצאות הרכבה מחדש, אנימציות בצבע ו-
AndroidComposeView
. (Ib2bfa) - נוספה הערה מסוג
@StateFactoryMarker
, לסימון פונקציות שיוצרות מצבים שחובה לכלול בתוך קריאה ל-remember
. (I64550) - הוספה של גרסאות פרימיטיביות של State ושל
MutableState
(fb3d89) - נוסף
Snapshot.isApplyObserverNotificationPending
(I672a5) - נוספו גרסאות פרימיטיביות של ה-API
State
, שיאפשרו מעקב אחרי ערכים מסוג Int, Long, Float ו-2 אובייקטים ב-State
בלי לצבור עונשים על Autoboxing. כדי להשתמש בהן, צריך להשתמש בשיטות המקוריותmutableIntState(Int)
,mutableFloatStateOf(Float)
וכו'. (I48e43)
תיקוני באגים
- דילוג על הרכבה מחדש של הרכבות משנה שיוסרו. (Ieeb99, b/254645321)
- אני לא רוצה לשמור קובץ עזר של תמונת מצב ב-
ComposerImpl
(0206f7) - אין להשתמש בהרכבה פעמיים (f5791b)
- מוודאים ביטול התוקף של ערכי מצב נגזרים לא מאותחלים (aa2a92)
- קוראים לפונקציה
onEndChanges
במהלך נפטרים מהיצירה. (62cc8c) - תיקון של העברת תוכן להרכבה (4beb41)
- תיקון מבוכים אפשריים (c1a425 ו-8edce0)
- כלי הכתיבה שנוצר לחלון של Android יחסום מעכשיו רק קריאות ל
withFrameNanos
במקום כל ההרכבה, כאשר תתקבל הודעת ON_STOP. המשמעות היא שחלונות המשויכים לפעילויות שהופסקו ימשיכו להתעדכן בשינויים בנתונים, אבל האנימציות, או כל קריאה אחרת שלwithFrameNanos
, ייחסמו. (Id9e7f, b/240975572) - צריך לבצע קריאה חוזרת (callback) להשבתה עבור
LayoutNode
לפני הסרת ההשפעות 3784073 - תיקון דגלים שהשתנו ב-lambdas שהופעלו מחדש ea81df9
- תיקון רגרסיה של עריכה בזמן אמת במצב קומפוזבילי עם צמתים 73fd4d8
- ON_STOP צריך להשהות את השידורים של שעון הפריים במקום השידורים מסוג ae276f1
- ביטול התוקף של היקפים
SnapshotStateObserver
למצבים נגזרים ללא שינוי 84d9b1c - פתרון בעיות פוטנציאליות של מבוי סתום במהלך מחיקת יצירות 28761fc
- תיקון של העברת תוכן ליצירה משנה 92d4156
- תיקון דגלים שהשתנו ב-lambdas שהופעלו מחדש (8a03e9)
- ביצוע קריאה חוזרת (callback) להשבתה של
LayoutNode
לפני הסרת ההשפעות (8b0fa4) - צריך לתקן את
endToMarker()
כשמסיימים קבוצות צמתים. (d71d980) - שימוש בקבוצה
SlotWriter
הנוכחית לבדיקת ההשבתה (a0b518b) - מסירים את
fill
ב-SlotTable.moveSlotGapTo()
ומעבירים אותו לסגירה (81f9935) - תיקון שגיאות חסרות בזמן שתוכן שניתן להעברה (1d7c024)
- תיקון פסילות מיידיות של תוכן שהועבר לנייד (8676618)
שיפורים בביצועים
- אין לחשב את הערך של
readableHash
ב-DerivedState
אם תמונת המצב לא שונתה. (307102) - הקצאות מופחתות (I65c09, d7ea77, 727974 ו-445808 )
- ביטול מהיר של כתיבת
CoroutineScopes
(a55362 ו-bd382f) - החלפת רשומות של אובייקטי מצב עם רשומות מצב לא נגישות (c986960)
- צריך להשתמש ברכיב ברמה הנכונה בתהליך היצירה של קבוצות (9a5e5b6)
- שימוש ב-
IdentityArraySet
כדי לשמור תמונות מצב לא תקינות (7f60cca) - הקטנת ההקצאות לתצפיות תמונת מצב (5bc535f)
גרסה 1.5.0-rc01
26 ביולי 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
משוחרר. גרסה 1.5.0-rc01 מכילה את ההתחייבויות האלה.
תיקוני באגים
דחייה של קריאה מחדש של מצבים נגזרים עד לתיעוד השינויים (f38099)
אפשר לבצע בדיקה אופציונלית כדי להמליץ על מיגרציה של קריאות
mutableStateOf()
לסוגים ספציפיים של קריאות פרימיטיביים. המזהה של איתור השגיאות בקוד הואAutoboxingStateCreation
. בעבר, הבדיקה הזו הופעלה כברירת מחדל בכל הפרויקטים. כדי לראות את האזהרה הזו בעורך של Android Studio ובפלט של איתור השגיאות בקוד של הפרויקט, צריך לשנות את חומרת האזהרה מ'אינפורמטיבית' ל'אזהרה' (או גבוהה יותר), באמצעות הצהרה על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) - הוספה של גרסאות פרימיטיביות של State ושל
MutableState
(fb3d89) - נוסף
Snapshot.isApplyObserverNotificationPending
(I672a5)
תיקוני באגים
- הקצאות מופחתות (I65c09, d7ea77, 727974 ו-445808 )
- אני לא רוצה לשמור קובץ עזר של תמונת מצב ב-
ComposerImpl
(0206f7) - ביטול מהיר של כתיבת
CoroutineScopes
(a55362 ו-bd382f) - אין להשתמש בהרכבה פעמיים (f5791b)
- מוודאים ביטול התוקף של ערכי מצב נגזרים לא מאותחלים (aa2a92)
- קוראים לפונקציה
onEndChanges
במהלך נפטרים מהיצירה. (62cc8c) - תיקון של העברת תוכן להרכבה (4beb41)
- תיקון מבוי סתום אפשריים (c1a425)
- על ON_STOP להשהות את השידורים של שעון הפריים במקום בהרכבה (f4a2d1)
- תיקון דגלים שהשתנו ב-lambdas שהופעלו מחדש (8a03e9)
- ביצוע קריאה חוזרת (callback) להשבתה של
LayoutNode
לפני הסרת ההשפעות (8b0fa4)
תרומה חיצונית
- נוסף
Snapshot.isApplyObserverNotificationPending
(I672a5)
גרסה 1.5.0-alpha04
10 במאי 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
משוחרר. גרסה 1.5.0-alpha04 מכילה את התחייבויות אלה.
שינויים ב-API
- נוספו גרסאות פרימיטיביות של ה-API
State
, שיאפשרו מעקב אחרי ערכים מסוג Int, Long, Float ו-2 אובייקטים ב-State
בלי לצבור עונשים על Autoboxing. כדי להשתמש בהן, צריך להשתמש בשיטות המקוריותmutableIntState(Int)
,mutableFloatStateOf(Float)
וכו'. (I48e43)
תיקוני באגים
קוראים לפונקציה
onEndChanges
במהלך נפטרים מהיצירה. צומתי מיקוד שהוסרו במהלךComposition.dispose
נרשמים ל-onEndChanges
כדי לאפס את המיקוד.(03d4a47)מוודאים ביטול התוקף של ערכי מצב נגזרים שלא מאותחלים. כל מצב נגזר משויך לרשימת יחסי התלות שלו ב-
SnapshotStateObserver
, שמשמשת לביטול היקפים שמשויכים למצב הנגזר בכל פעם שבה התלות משתנה. השינוי בתלות נרשם בהתקדמות של תמונת המצב, שיכול להתרחש אחרי קריאת המצב הנגזר (עקב הקריאה ל-Snapshot.notifyObjectsInitialized()
).הלוגיקה הקודמת של תצפיות על מצב שנגזרת ב-
SnapshotStateObserver
הייתה ניקוי של יחסי תלות ישנים יותר ולאחר מכן קריאה של ערך חדש. כתוצאה מכך, מרוץ תהליכים שבו בוטל תוקף התלות במצב נוקה, שבו לא נרשם ביטול תוקף של תלות.השינוי הזה מסדר מחדש את הניקוי של המצב הנגזר וניקוי התלות, כדי להבטיח שביטול התוקף תמיד יהיה במצב תקין. (c472be6)
גרסה 1.5.0-alpha03
19 באפריל 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
משוחרר. גרסה 1.5.0-alpha03 מכילה את התחייבויות אלה.
שינויים ב-API
- כלי הכתיבה שנוצר לחלון של Android יחסום מעכשיו רק קריאות ל
withFrameNanos
במקום כל ההרכבה, כאשר תתקבל הודעת ON_STOP. המשמעות היא שחלונות המשויכים לפעילויות שהופסקו ימשיכו להתעדכן בשינויים בנתונים, אבל האנימציות, או כל קריאה אחרת שלwithFrameNanos
, ייחסמו. (Id9e7f, b/240975572)
תיקוני באגים
- תיקון קיפאון פוטנציאלי ברשימה של תמונות מצב ובמפה 5c1a425
- צריך לבצע קריאה חוזרת (callback) להשבתה עבור
LayoutNode
לפני הסרת ההשפעות 3784073 - תיקון דגלים שהשתנו ב-lambdas שהופעלו מחדש ea81df9
- תיקון רגרסיה של עריכה בזמן אמת במצב קומפוזבילי עם צמתים 73fd4d8
- ON_STOP צריך להשהות את השידורים של שעון הפריים במקום השידורים מסוג ae276f1
- ביטול התוקף של היקפים
SnapshotStateObserver
למצבים נגזרים ללא שינוי 84d9b1c - פתרון בעיות פוטנציאליות של מבוי סתום במהלך מחיקת יצירות 28761fc
- תיקון של העברת תוכן ליצירה משנה 92d4156
גרסה 1.5.0-alpha02
5 באפריל 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
משוחרר. גרסה 1.5.0-alpha02 מכילה את התחייבויות אלה.
תכונות חדשות
- עכשיו האופרטור
getValue
של Kotlin יכול להיות קומפוזבילי (f174f6e)
תיקוני באגים, שיפורים בביצועים
- החלפת רשומות של אובייקטי מצב עם רשומות מצב לא נגישות (c986960)
- צריך להשתמש ברכיב ברמה הנכונה בתהליך היצירה של קבוצות (9a5e5b6)
- צריך לתקן את
endToMarker()
כשמסיימים קבוצות צמתים. (d71d980) - שימוש בקבוצה
SlotWriter
הנוכחית לבדיקת ההשבתה (a0b518b) - שימוש ב-
IdentityArraySet
כדי לשמור תמונות מצב לא תקינות (7f60cca) - מסירים את
fill
ב-SlotTable.moveSlotGapTo()
ומעבירים אותו לסגירה (81f9935) - תיקון שגיאות חסרות בזמן שתוכן שניתן להעברה (1d7c024)
- תיקון פסילות מיידיות של תוכן שהועבר לנייד (8676618)
- הקטנת ההקצאות לתצפיות תמונת מצב (5bc535f)
גרסה 1.5.0-alpha01
22 במרץ 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
משוחרר. גרסה 1.5.0-alpha01 מכילה את התחייבויות אלה.
תכונות חדשות
- הוספה של
Modifier.Node#coroutineScope
כדי לאפשר ל-Modifier.Nodes
להפעיל קורוטינים (I76ef9) - מתן הרשאה ל-
Modifier.Nodes
לקרוא אתCompositionLocals
על ידי הטמעת הממשק שלCompositionLocalConsumerModifierNode
. (Ib44df)
גרסה 1.4
גרסה 1.4.3
3 במאי 2023
ההשקה של androidx.compose.runtime:runtime-*:1.4.3
ללא שינויים.
גרסה 1.4.2
19 באפריל 2023
androidx.compose.runtime:runtime-*:1.4.2
משוחרר. גרסה 1.4.2 כוללת את ההתחייבויות האלה.
תיקוני באגים
תיקון קיפאון פוטנציאלי ברשימה של תמונות מצב ובמפה 2eb6570
הוספת תוכן אל
SnapshotStateList
אוSnapshotStateMap
עלולה להוביל למבוי סתום אם השינוי מתבצע במקביל לכתיבה ישירה ברשומת המדינה. קיים סיכוי גבוה באופן משמעותי למקרים שבהם השינויים האלה מיושמים על ידי 93fcae828b, העושים שימוש בכתיבה ישירה כדי לפרסם רשומות שאינן בשימוש.הסדרת המנעולים מסודרת כך שלעולם לא תנסה לבצע נעילה של תמונת מצב כשמתבצעת נעילה של מפה או רשימה.
גרסה 1.4.1
5 באפריל 2023
androidx.compose.runtime:runtime-*:1.4.1
משוחרר. גרסה 1.4.1 כוללת את ההתחייבויות האלה.
תיקוני באגים
- צריך לתקן את
endToMarker()
כשמסיימים קבוצות צמתים. d71d980
גרסה 1.4.0
22 במרץ 2023
androidx.compose.runtime:runtime-*:1.4.0
משוחרר. גרסה 1.4.0 כוללת את ההתחייבויות האלה.
שינויים חשובים מאז 1.3.0
- שימוש בערך שאותחל מ-
LiveData
ליצירה הראשונה 3680e25 - צריך להוסיף את
ComposeNodeLifecycleCallback
כדי לצפות במחזור החיים של צומתי הכתיבה. 8b6a258 - הוספת הנכס
parameterTypes
ל-ComposableMethod
7b6c7ad
תיקוני באגים שיפורי ביצועים
- ניקוי שני האינדקסים של היקפי ההרשאות ב-
SnapshotStateObserver
29f4a3e - הוספה של קבוצות נדרשות בגוף lambdas שלא ניתן לדלג עליהן 7d06752
- שיפור מאפייני ההפניה לזיכרון במצב תמונת מצב 93fcae8
- הסרת אגרוף בחיפושים מקומיים בנושא יצירה 0875717
- שימוש במפתח הנכון לקבוצות צמתים שלא ניתנות לשימוש חוזר 6388d8d
- הגנה על
SnapshotStateObserver
מפני רקורסיביות ו בו-זמניות על ידי החלת 98cb6ba - נוספה בדיקת גבולות אינדקס ב-"get" של
IdentityArraySet
method 35a77d3 - צריך לעדכן את מודול הכתיבה כדי להשתמש בתוספי
ViewTreeLifecycleOwner
21c2122 - שליחת ההתראות ל'החלת ההתראות' אחרי שה-Recomposer יסיים את המסגרת. 98f2641
- תיקון קריסת האינדקס מחוץ לתחום כשמבטלים את Recomposer 8f8656f
- תמיד לאלץ הזנה מחדש אם ספקי ההורה של הרכב שינו את 9526fcc
- סבלנות בנושא Recomposer לגבי משימות שבוטלו 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
- עוד סוג/יכולת null של פונקציות inline/הוצא משימוש (I24f91)
גרסה 1.4.0-alpha04
11 בינואר 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
משוחרר. גרסה 1.4.0-alpha04 מכילה את התחייבויות אלה.
שינויים ב-API
TestMonotonicFrameClock
משתמש עכשיו בהערה ניסיונית נכונה. (I95c9e)
תיקוני באגים
- הגנה על
SnapshotStateObserver
מפני רקורסיביות ו בו-זמניות (d902fb)
גרסה 1.4.0-alpha03
7 בדצמבר 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
משוחרר. גרסה 1.4.0-alpha03 מכילה את התחייבויות אלה.
שינויים ב-API
- הוספת שיטה ציבורית חדשה למחלקה
ComposableMethod
מקבילה ל-java.lang.reflect.Method#getParameterTypes()
(Iab0c3)
תיקוני באגים
- התראות על החלת תמונת מצב נשלחות עכשיו אחרי החלת השינויים על
Recomposer
. (Iad6c0, b/222093277)
גרסה 1.4.0-alpha02
9 בנובמבר 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
משוחרר. גרסה 1.4.0-alpha02 מכילה את התחייבויות אלה.
גרסה 1.4.0-alpha01
24 באוקטובר 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
משוחרר. גרסה 1.4.0-alpha01 מכילה את התחייבויות אלה.
שינויים ב-API
- עכשיו, ב-
SnapshotStateList
וב-SnapshotStateMap
יש הטמעות מפורשות שלtoList()
ושלtoMap()
, בכבוד. השיטות האלה מחזירות את התוכן הנוכחי בלי ליצור עותק שלהן, כי הן מחזירה את הנתונים הפנימיים שלא ניתנים לשינוי שמשמשים לאחסון התוכן שלהם. לדוגמה, אפשר להשתמש בערך הזה כדי ליצור זרם של ערכים באמצעותsnapshotFlow
בלי שיהיה צורך להעתיק את הנתונים. (Ica2bd)
גרסה 1.3
גרסה 1.3.3
11 בינואר 2023
androidx.compose.runtime:runtime-*:1.3.3
משוחרר. גרסה 1.3.3 כוללת את ההתחייבויות האלה.
- אין שינויים מאז 1.3.2
גרסה 1.3.2
7 בדצמבר 2022
androidx.compose.runtime:runtime-*:1.3.2
משוחרר. גרסה 1.3.2 כוללת את ההתחייבויות האלה.
תיקוני באגים
- עודכן לתמיכה ב-androidx.compose.ui 1.3.2
גרסה 1.3.1
9 בנובמבר 2022
androidx.compose.runtime:runtime-*:1.3.1
משוחרר. גרסה 1.3.1 כוללת את ההתחייבויות האלה.
גרסה 1.3.0
24 באוקטובר 2022
androidx.compose.runtime:runtime-*:1.3.0
משוחרר. גרסה 1.3.0 כוללת את ההתחייבויות האלה.
שינויים חשובים מאז 1.2.0
טיפול בחריגים / תמיכה בעריכה בזמן אמת
- כדי לתמוך טוב יותר בעריכה בזמן אמת, הוספנו ממשקי API כדי לאפשר טיפול בחריגים במהלך היצירה
- טיפול בשגיאות הרכב לטעינה מחדש מתוך הזיכרון
- טיפול בשגיאות עריכה בזמן אמת בלחיצה על 'שמירה' או 'שחזור'
מעקב אחר יצירה
- נוספו ממשקי API למעקב אחר זמן ריצה כדי לתמוך בכלים חדשים למעקב אחר הרכבים
- יצירת קריאות התחלה וסיום של אירועי מעקב קומפוזביליים
- Re-Add ComposerKt.traceEventStart(Int, String)
ממשקי API של Reflection בקומפוזביליות
- הוספנו API חדש של
ComposableMethod
כדי לאפשר הפעלות אמינות יותר של ממשקי API קומפוזביליים שמבוססים על השתקפות. - העברת invokeComposable לכתיבה של סביבת זמן הריצה
- Rework API להפעלת method קומפוזביליות
תיקונים בזמן הריצה
- תיקון טווח פגום של בדיקת סמנים בטבלת מיקומי המודעות
- איך לאפשר העברה של תוכן שניתן להעביר אל SubcomposeLayout ויציאה ממנו
- תיקון של העברת תוכן לתוכן חדש של הרכב משנה
מערכת Snapshot
- במערכת תמונת המצב בוצעו שיפורים שונים שקשורים לניהול הזיכרון, לביצועים ולנכונות.
- ביצוע אופטימיזציה של הסרת היקף ב-SnapStateObserver
- הסרת תמונות מצב מקוננות שנוצרו מקובצי snapshot שקופים
- תיקון מרוץ תהליכים בקריאת המצב מקובץ ה-snapshot הגלובלי
- תמיכה ב-DerivedState ב-SnapStateObserver
- מניעת הסרה של מצב נגזר מההרכבה כשקוראים אותו בהיקפים אחרים
- שימוש ב-IdentityArrayMap במקום ב-HashMap בתוך DerivedState
- עדכון התצפיתנים של המצב הנגזר לשימוש בווקטור ניתן לשינוי
- עדכון ניקוי המצב של SnapshotStateObserver
- מחליפים את SnapshotStateObserver.invalidated ב-ArraySet
- תיקון מרוץ תהליכים בקריאת המצב מקובץ ה-snapshot הגלובלי
- תיקון שימוש ברשומה לא פעילה בחישוב גיבוב של DerivedState
- תיקון מרוץ תהליכים כשמתקדמים בתמונת המצב הגלובלית
- האצת הניקוי של תצפיות היקף ב- SnapshotStateObserver
גרסה 1.3.0-rc01
5 באוקטובר 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
משוחרר. גרסה 1.3.0-rc01 מכילה את ההתחייבויות האלה.
תיקוני באגים
- תוקן
ArrayIndexOutOfBoundsException
שמגיע מטבלת מיקומי המשבצות (b/249076084)
גרסה 1.3.0-beta03
21 בספטמבר 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
משוחרר. גרסה 1.3.0-beta03 מכילה את התחייבויות אלה.
שינוי הגורם לשיבושים בהתנהגות
- הפרמטר
remember
ו-rememberCoroutineScope
השתנה ל-crossinline
. פעולה זו תדווח על שגיאה בהחזרות מוקדמות במקום לאפשר החזרה מוקדמת, שתגרום לדיווח על שגיאה פנימית מאוחרת יותר. - השינוי הזה עלול לגרום לדיווחים על שגיאות מהדר חדשות שמחייבות הסרה של החזרות לא מקומיות מ-lambdas שמועברות לפונקציות האלה. (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 כוללת את ההתחייבויות האלה.
תיקוני באגים
- תיקון דליפת זיכרון: השמטת תמונות מצב בתוך תמונות שנוצרו מקובצי snapshot שקופים b/239603305
גרסה 1.2.0
27 ביולי 2022
androidx.compose.runtime:runtime-*:1.2.0
משוחרר. גרסה 1.2.0 כוללת את ההתחייבויות האלה.
שינויים חשובים מאז 1.1.0
סביבת זמן הריצה של Compose Runtime כללה מספר תכונות שנוספו בגרסה 1.2.0, יחד עם הרבה תיקוני באגים מיוצבים. התכונה החדשה המשמעותית ביותר הייתה הקדמה ל-
movableContentOf
API, שיכול לשמש כדי להפעיל חוויית משתמש מורכבת כמו מעברים משותפים בין רכיבים. ה-API שלmovableContentOf
ממיר lambda קומפוזבילי ל-lambda שמעבירה את המצב, ואת הצמתים התואמים, לכל מיקום חדש שנקרא לו. כשהקריאה הקודמת יוצאת מההרכב, המצב נשמר באופן זמני ואם קריאה חדשה ל-lambda נכנסת להרכב, המצב והצמתים המשויכים עוברים למיקום של הקריאה החדשה. אם לא תתווסף שיחה חדשה, המדינה תוסר באופן סופי והצופים יקבלו הודעה.אם lambda של
movableContentOf
נקרא מספר פעמים באותו קומפוזיציה, נוצרים מצב חדש וצמתים חדשים לכל קריאה, וכשקריאות עוזבות את ההרכבה והקריאות החדשות נכנסות, המצב מועבר מהקריאות הראשונות לקריאות הנכנסות לפי הסדר שבו הן נקראות. שיחות חדשות שלא תבעו עליהן בעלות יוסרו באופן סופי.בנוסף לתכונות החדשות האלה ולכמה תכונות חדשות אחרות, הוקדש זמן רב לייצוב מערכת המצב של סביבת זמן הריצה ו-Snapshot. דליפות זיכרון שונות הוסרו ונתיבי הקוד עברו אופטימיזציה.
בהמשך מופיעה רשימה מסכמת של השינויים:
תכונות חדשות ב-1.2
- הוספת תמונת מצב ניסיונית (safeEnter/יציאה)
- הוספת snapshot.asContextElement API ניסיוני
- הצגה של התכונה 'תמונת מצב.ללא הקראה'
- מתן הרשאה למצב לנוע בתוך הרכב
- מעקב אחר הרכבות מחדש ב-Compose
ביצועים ב1.2
תיקוני באגים ב-1.2
- הסרת פרטי מעקב מהיקפים של פיתוח מחדש של הגרסאות
- מניעת הסרה של מצב נגזר מההרכבה כשקוראים אותו בהיקפים אחרים
- שימוש יעיל יותר ב-removeScope() ב-SnapStateObserver
- תיקון יחסי תלות נגזרים של מצבים בהרכבת
- תיקון שינוי של currentCompositeKeyHash אחרי הרכבה מחדש בתוך תוכן שניתן להעביר
- ניקוי יצירות שלא תקפות במהלך ההשלכה
- תיקון קריאת מצב הנגזרת במהלך הרכבה מחדש
- תיקון דליפת זיכרון במהלך צפייה באובייקטים במצב נגזר
- תיקון מפתח גיבוב מורכב של movableContent כדי לשמור על עקביות
- תיקון פינה שבה המלחין קורס
- לוודא ביטול תוקף מאולץ של הרכבה מחדש של כוחות קבוצה
- תיקון באג כשאפשר לשמור את הקלט באמצעות קלט משוחזר בסדר שגוי
גרסה 1.2.0-rc03
29 ביוני 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
משוחרר. גרסה 1.2.0-rc03 מכילה את שמירות האלה.
תיקוני באגים
- תצפיות על מצבים נגזרות הוסרו בעבר ללא תנאי מההיקף ומההרכבה מחדש יחד, דבר שהפר היקפים אחרים שאולי עדיין צפו במצב הנגזר. השינוי הזה מסיר מופעים של מצבים נגזרים רק אם הוא לא מזוהה יותר בהיקפים אחרים. (b/236618362)
גרסה 1.2.0-rc02
22 ביוני 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
משוחרר. גרסה 1.2.0-rc02 מכילה את שמירות האלה.
גרסה 1.2.0-rc01
15 ביוני 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
משוחרר. גרסה 1.2.0-rc01 מכילה את שמירות האלה.
שינויים ב-API
- ממשקים בספריות הרכבה נוצרים עכשיו באמצעות שיטות ברירת מחדל של jdk8 (I5bcf1)
גרסה 1.2.0-beta03
1 ביוני 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
משוחרר. גרסה 1.2.0-beta03 מכילה את התחייבויות אלה.
גרסה 1.2.0-beta02
18 במאי 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
משוחרר. גרסה 1.2.0-beta02 מכילה את התחייבויות אלה.
גרסה 1.2.0-beta01
11 במאי 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
משוחרר. גרסה 1.2.0-beta01 מכילה את התחייבויות אלה.
תכונות חדשות
- זוהי גרסת הבטא הראשונה של 1.2!
שינויים ב-API
- נוסף
Snapshot.unsafeEnter/unsafeLeave
(I108f3) ניסיוני - נוסף ממשק API ניסיוני של
Snapshot.asContextElement()
(Iff072) - עכשיו אפשר להשתמש בהערות ובהערות
@ComposableTarget
שמסומנות על ידי@ComposableTargetMarker
בהיקף הקובץ באמצעות הקידומת@file
. אם תשתמשו בהערת יעד בהיקף הקובץ, המהדר צריך להניח שכל הפונקציות הקומפוזביליות בקובץ נועדו לטרגט למיישם המשויך. לדוגמה, שימוש ב-@file:UiComposable
מצהיר על כך שכל הפונקציות של@Composable
מטרגטות לאפליקציה של ממשק המשתמש של 'כתיבה'. פונקציה שצריך לטרגט אליה מערכת הפעלה אחרת חייבת לספק באופן מפורש את ההערה של סמן היעד עבור הכלי הרצוי. (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 שמועברת בלי להירשם לשינויים בערכי המדינה שנקראים במהלך החסימה. הוא יכול להיות שימושי במקרים שבהם אתם רוצים להפיק תועלת מכתיבה/קריאה בטוחה של שרשורים על סמך תמונת המצב, אבל אתם רוצים לקרוא את הערך בלי לגרום להתחשבות או למדידה מחדש ללא צורך. (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
שמאפשר לקבל דיווח על זמן שבו פונקציה קומפוזבילית נקראת טירגוט לאפליקציה שהיא לא שמיועד לשימוש.ברוב המקרים, רכיב הכתיבה יכול להסיק את ההערות של המהדר (compiler), כך שהשימוש באנוטציות האלה ישירות צריך להיות נדיר . המקרים שלא ניתן להסיק כוללים יצירה ו באמצעות פונקציות קומפוזביליות מופשטות בהתאמה אישית (כמו שיטות ממשק), שדות או משתנים גלובליים lambdas קומפוזביליים (מסיקים משתנים ופרמטרים מקומיים), או כשמשתמשים ב-
ComposeNode
או בפונקציות קומפוזביליות קשורות.לאפליקציות קומפוזביליות בהתאמה אישית, פונקציה זו מפעילה את הפונקציות הקומפוזביליות
ComposeNode
אוReusableComposeNode
צריכים להוסיף הערתCompoableTarget
לפונקציה ולכל הערה אחרת סוגי פרמטרים קומפוזביליים של lambda. עם זאת, מומלץ כדי ליצור הערה שנוספהComposableTargetMarker
ולאחר מכן ייעשה שימוש בהערה המסומנת במקוםComposableTarget
ישירות. הערה קומפוזבילית שמסומן ב-ComposableTargetMarker
שווה ערך ל-ComposbleTarget
בשם המוגדר במלואו של המאפיין class בתור הפרמטר 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 ל-lambda שמעבירה את המצב, ואת הצמתים התואמים, לכל מיקום חדש ששמו נקרא. מתי השיחה הקודמת עוזבת ההרכב, המצב נשמר באופן זמני ואם מתבצעת קריאה חדשה ללמבדה נכנס ליצירה ואז למדינה, צמתים יועברו למיקום של הקריאה החדשה. אם לא התקבלה שיחה חדשה שהמדינה תוסר באופן סופי, וחשוב לזכור שהצופים נשלחה הודעה.אם lambda מסוג
movableContentOf
נקרא כמה פעמים במצב אחד, נוצרים מצב חדש וצמתים חדשים לכל קריאה, וכמו כן, כשהשיחות מתחילות את היצירה, והשיחות החדשות נכנסות, המצב מועבר מהשיחות הראשונות ועד לשיחות שנכנסות, לפי הסדר נקראים. כל המדינות שלא נתבעו עליהן בעלות על ידי שיחות חדשות יוסרו באופן קבוע. (Ib4850)הוספנו API למעקב אחרי הרכבה כדי לאפשר לכלים לבצע מספקים מעקב מפורט יותר אחרי פונקציות קומפוזביליות. המהדר יוצרת עכשיו קריאות ל-API למעקב, שכוללות מידע. (Ib0eb5)
כדי להסיר את הקריאות האלה ואת המקור המשויך אליהן מגרסת build של גרסה, מוסיפים את כלל 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)
עדכונים בנושא תלות
- עכשיו תלוי ב-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
- שיפורים בגודל משטחי מגע
- חשוב לשים לב: בכל הנוגע לניסוח 1.0, רכיבי Material ירחיבו את שטח הפריסה שלהם כך שיעמדו בהנחיות הנגישות של Material עבור גודל יעד המגע. לדוגמה, משטח המגע של הלחצן יתרחב לגודל מינימלי של
48x48dp
, גם אם הגדרת את גודל הלחצן קטן יותר. זה מאפשר התאמה של חומרי הלימוד לאותה התנהגות של רכיבי Material Design, שמספק התנהגות עקבית אם משלבים בין תצוגות מפורטות לבין 'כתיבה'. השינוי הזה גם מבטיח שכשיוצרים את ממשק המשתמש באמצעות רכיבי 'חומר הכתיבה', צריך לעמוד בדרישות המינימליות לנגישות במשטח מגע. - תמיכה יציבה במסילת הניווט
- שדרוג של מספר ממשקי API ניסיוניים שכבר היו ניסיוניים לגרסה יציבה
- תמיכה בגרסאות חדשות יותר של Kotlin
גרסה 1.1.0-rc03
26 בינואר, 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
משוחרר. גרסה 1.1.0-rc03 מכילה את ההתחייבויות האלה.
תיקוני באגים
- עודכנה לתמיכה בחומר 'כתיבה'
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 מכילה את התחייבויות אלה.
תכונות חדשות
- הכלי לכתיבה תומך עכשיו בגרסאות ישנות יותר של זמן הריצה לכתיבה (1.0). לפני השינוי הזה, הכלי לכתיבה היה תואם רק לזמן הריצה של 'כתיבה' של אותה גרסה ואילך. לאחר השינוי הזה, הכלי לכתיבה יתאים לגרסה ישנה יותר של זמן הריצה של 'כתיבה' (1.0). (aosp/1796968)
- הכתיבה
1.1.0-alpha03
עודכנה בהתאם ל-Kotlin1.5.30
. (I74545)
גרסה 1.1.0-alpha02
18 באוגוסט 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
משוחרר. גרסה 1.1.0-alpha02 מכילה את התחייבויות אלה.
גרסה 1.1.0-alpha01
4 באוגוסט 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
משוחרר. גרסה 1.1.0-alpha01 מכילה את התחייבויות אלה.
גירסה 1.0
גרסה 1.0.5
3 בנובמבר 2021
androidx.compose.runtime:runtime-*:1.0.5
משוחרר. גרסה 1.0.5 כוללת את ההתחייבויות האלה.
תיקוני באגים
- תוקן מכונות של נגזרת מעקב אחרי קריסה. (aosp/1792247)
גרסה 1.0.4
13 באוקטובר 2021
androidx.compose.runtime:runtime-*:1.0.4
משוחרר. גרסה 1.0.4 כוללת את ההתחייבויות האלה.
עדכונים בנושא תלות
- עודכן לתלוי ב-Kotlin
1.5.31
גרסה 1.0.3
29 בספטמבר 2021
androidx.compose.runtime:runtime-*:1.0.3
משוחרר. גרסה 1.0.3 מכילה את ההתחייבויות האלה.
עדכונים בנושא תלות
- עודכן לתלוי ב-Kotlin
1.5.30
גרסה 1.0.2
1 בספטמבר 2021
androidx.compose.runtime:runtime-*:1.0.2
משוחרר. גרסה 1.0.2 כוללת את ההתחייבויות האלה.
עודכנה לתמיכה בגרסה 'כתיבה' 1.0.2
. הכתיבה 1.0.2
עדיין תואמת ל-Kotlin 1.5.21
.
גרסה 1.0.1
4 באוגוסט 2021
androidx.compose.runtime:runtime-*:1.0.1
משוחרר. גרסה 1.0.1 כוללת את ההתחייבויות האלה.
עדכונים בנושא תלות
- עודכן ל-Kotlin
1.5.21
גרסה 1.0.0
28 ביולי 2021
androidx.compose.runtime:runtime-*:1.0.0
משוחרר. גרסה 1.0.0 מכילה את ההתחייבויות האלה.
התכונות העיקריות של 1.0.0
זוהי הגרסה היציבה הראשונה של 'כתיבה'. לפרטים נוספים, מומלץ לעיין בבלוג הרשמי של תוכנית 'כתיבת תוכן'.
בעיות מוכרות
אם אתם משתמשים ב-Android Studio Bumblebee Canary 4 או ב-AGP
7.1.0-alpha04
/7.1.0-alpha05
, עלולים להיתקל בקריסה הבאה:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
כדי לפתור את הבעיה, צריך להגדיל באופן זמני את ה-minSdkVersion ל-24+ בקובץ
build.gradle
. הבעיה הזו תיפתר בגרסה הבאה של Android Studio Bumblebee ו-AGP7.1
. (b/194289155)
גרסה 1.0.0-rc02
14 ביולי 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
משוחרר. גרסה 1.0.0-rc02 מכילה את ההתחייבויות האלה.
- מרוץ תהליכים תוקן ב-SnapStateObserver שגורם לדורבן חריגים מסוג NullPointer. (aosp/1763445, aosp/1758105, b/192677711)
- תוקנו בעיות בקובצי snapshot של זמן ריצה, שגרמו ל-
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
או בספרייה מקבילה. הקובץ מציין כלל בכל שורה, כאשר כלל במקרה הזה הוא דפוס להתאמה ל-methods או מחלקות בספרייה. התחביר של הכללים האלה הוא קבוצת-על של פורמט פרופיל ART קריא לאנשים, שנעשה בו שימוש כשמשתמשים ב-adb shell profman --dump-classes-and-methods ...
. לכללים אלה יש אחת משתי דרכים לטירגוט שיטות או מחלקות.כלל שיטה יכלול את הדפוס הבא:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
וכלל מחלקה יהיה הדפוס הבא:
<CLASS_DESCRIPTOR>
הערך
<FLAGS>
הוא אחד או יותר מהתוויםH
,S
ו-P
כדי לציין אם יש לסמן את השיטה הזו כ'חם', 'הפעלה' או 'פוסט סטארט-אפ'.<CLASS_DESCRIPTOR>
הוא התיאור של המחלקה שאליה שייכת שיטת הטירגוט. לדוגמה, המחלקהandroidx.compose.runtime.SlotTable
תקבל מתאר שלLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
הוא החתימה של השיטה, והוא כולל את השם, סוגי הפרמטרים וסוגי ההחזרה של השיטה. לדוגמה, השיטהfun isPlaced(): Boolean
ב-LayoutNode
כוללת את החתימהisPlaced()Z
.לתבניות האלה יכולים להיות תווים כלליים לחיפוש (
**
,*
ו-?
) כדי שכלל יחיד יכלול כמה שיטות או מחלקות.
למה משמשים הכללים?
שיטה עם הדגל
H
מציינת שהשיטה הזו היא 'חם' וצריך להרכיב אותה מראש.שיטה עם הדגל
S
מציינת שזו שיטה שנקראת בזמן ההפעלה, וצריך להרכיב אותה מראש כדי למנוע את עלות ההידור והפירוש של השיטה בזמן ההפעלה.שיטה עם הדגל
P
מציינת שזו שיטה שנקראת אחרי ההפעלה.מחלקה שנמצאת בקובץ הזה מצביעה על כך שנעשה בו שימוש במהלך ההפעלה וצריך להקצות אותו מראש בערימה כדי למנוע את עלות הטעינה של הכיתה.
איך זה עובד?
- ספריות יכולות להגדיר את הכללים האלה, שיישמרו בפריטי מידע שנוצרו בתהליך הפיתוח (Artifact) של AAR. לאחר מכן, כשמתבצעת בנייה של אפליקציה שכוללת את פריטי המידע האלה שנוצרו בתהליך הפיתוח (Artifact), הכללים האלה ממוזגים יחד, והכללים הממוזגים משמשים כדי ליצור פרופיל ART בינארי קומפקטי שמותאם ספציפית לאפליקציה. לאחר מכן, ART יכול להשתמש בפרופיל הזה כשהאפליקציה מותקנת במכשירים כדי ליצור מראש קבוצת משנה ספציפית של האפליקציה ולשפר את הביצועים שלה, במיוחד בהפעלה הראשונה. הערה: לא תהיה לכך השפעה על אפליקציות שניתנות לניפוי באגים.
גרסה 1.0.0-beta08
2 ביוני 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
משוחרר. גרסה 1.0.0-beta08 כוללת את ההתחייבויות האלה.
שינויים ב-API
State<T>
נקראת עכשיוState<out T>
(I69049)- שינוי אחד ב-API של
ControlledComposition
כדי לאפשר כתיבה מחדש בכתיבה מחדש של כרטיס יחיד. (Iaafd1, b/184173932)
גרסה 1.0.0-beta07
18 במאי 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
משוחרר. גרסה 1.0.0-beta07 מכילה את התחייבויות אלה.
שינויים ב-API
- נוספו ממשקי API חדשים של מהדר כתיבה שמאפשרים פרטי המקור שהמהדר יצר מוסר במהלך הקטנת המקור. (Ia34e6)
מציגה את
ReusableContent
, שינסה להשתמש שוב צמתים בתוכן שלו במקום להחליף אותם כשהמפתח השתנה. כשהמפתח משתנה, הערכים הקודמים ב- המערכת מתעלמת מטבלת המיקומים של התוכן, מלבד את הצמתים שנוצרו וגם הערכים ששימשו לעדכון צמתים.מציגה את
ReusableComposeNode
שישתמש שוב בצומת נשלח במקום להחליף אותו כפי שנעשה עבורComposeNode
. (I1dd86)@ComposeCompilerApi
כבר לא@RequiresOptIn
(Iab690)
תיקוני באגים
- בשלב הזה, עד 2 פריטים שהיו פעילים בעבר יופיעו ב-LazyColumn/Line, גם אם הם נגללו כלפי מטה. כך הרכיב יכול לעשות שימוש חוזר בהרכבות המשנה הפעילות במקרה שנצטרך להרכיב פריט חדש, וכך תשפר את ביצועי הגלילה. 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) }
כשנעשה שימוש ביעד של כתיבת ניווט. (I1312b, b/180042685, b/180701630)
גרסה 1.0.0-beta01
24 בפברואר 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
משוחרר. גרסה 1.0.0-beta01 מכילה את התחייבויות אלה.
זוהי הגרסה הראשונה של גרסת הבטא של 'פיתוח נייטיב' 1.0.0.
שינויים ב-API
- הוספה של
Recomposer.runRecomposeConcurrentlyAndApplyChanges
API ניסיוני לחיבור מחדש של יצירות לא תקפות מהקובץ הראשי לולאת מסגרות. (I342d0) - כל תוכן קומפוזבילי שמסומן ב- @ReadOnlyComposable עכשיו מאומת בזמן הידור כדי להבטיח שהוא מבצע קריאות רק לתכנים אחרים מסוג @ReadOnlyComposables (I58961)
defaultFactory
שלcompositionLocalOf
וגם השדהstaticCompositionLocalOf
נדרש עכשיו במקום אופציונלי.בעקבות השינוי הזה, תהיה שגיאה מסוג 'סוג אפשרי' במקרה של ערך שאינו null סוגים שלא צוין בהם הגדרות יצרן בברירת מחדל. הפריט הקודם תספק הפניה null עבור סוג שאינו ערך null.
עבור סוגים שאינם יכולים להיות בעלי ערך null, מומלץ לציין את
{ null }
כברירת המחדל במפעל.אנחנו לא ממליצים להשתמש בתושבים מקומיים עם סוגים שאינם ערכי null, אלא אם אפשר לספק ברירת מחדל הגיונית. אם לא קיימת ברירת מחדל הגיונית, ה-lambda של
defaultFactory
אמור לגרום לחריגה. אבל גורם חריג פירושו שהצרכנים המקומיים תלות מרומזת בהינתן שלא נאכפת. לפי מערכת הסוגים. (Ifbd2a)סמלים שהוצאו משימוש הוסרו מזמן הריצה של הכתיבה (I3252c)
emptyContent()
שהוצא משימוש הוסר. במקומה צריך להשתמש במדיניות{}
. (Idb33f, b/179432510)השם 'ספקים' השתנה ל-CompositionLocalProvider
- ה-Composition constructor לא מקבל יותר פרמטר מפתח, והוא הוצא משימוש.
- השדה currentCompositeKeyHash הפך לנכס קומפוזבילי ברמה העליונה במקום לפונקציה קומפוזבילית ברמה העליונה.
- CompositionData ו-CompositionGroup הועברו למרחב השמות androidx.compose.runtime.tooling
- ComposableLambda נוצרה לממשק במקום למחלקה קונקרטית, והיא כבר לא כוללת פרמטרים של סוג.
- הגרסה ComposableLambdaN הפכה לממשק במקום למחלקה קונקרטית, והיא כבר לא כוללת פרמטרים של סוג.
- הפונקציה SnapshotFlow הועברה למרחב השמות androidx.compose.runtime
- שיטת המיזוג של snapshotMutationPolicy כבר לא ניסיונית
- הפונקציה @TestOnly ברמה העליונה clearRoots הוסרה. אין בו יותר צורך.
- הפונקציות keySourceInfoOf ו-resetSourceInfo הוסרו. הם כבר לא נחוצים.
- השדה Composer.collectKeySourceInformation הוסר. אין בו יותר צורך.
- השיטות isjoinedKey, {1}joinKeyLeft ו-joinKeyRight הוסרו. הם כבר לא נחוצים.
- ממשקי API שונים ברמה העליונה הועברו וארגנו מחדש בקבצים שונים. בגלל הסמנטיקה של מחלקות הקבצים של Kotlin, זה פוגע בתאימות בינארית אבל לא בתאימות מקורות, ולכן לא אמורה להיות בעיה עבור רוב המשתמשים.
- (I99b7d, b/177245490)
snapshotStateObserver כבר לא ניסיוני (Id2e6a)
נמחקו כמה ממשקי API שהוצאו בעבר משימוש (Ice5da, b/178633932)
בוצעו השינויים הבאים ב-Material API:
- נוסף פרמטר contentPuter ל-Top/BottomAppBar כדי לאפשר התאמה אישית של המרווח הפנימי שמוגדר כברירת מחדל.
- סדר הפרמטרים של BackdropScaffold תואם להנחיות ה-API כאשר הפרמטרים הנדרשים מופיעים לפני פרמטרים אופציונליים.
- הפרמטר
icon
הועבר ב-BottomNavigationItem אל אחריselected
ו-onClick
. - השם של הפרמטר
alwaysShowLabels
השתנה ב-BottomNavigationItem ל-alwaysShowLabel
. - שינית את השם של הפרמטרים
bodyContent
בכמה רכיבים ל-content
בלבד. - הפרמטרים הוסדרו מחדש ב-
ButtonDefaults.buttonColors()
. לתשומת ליבכם: מכיוון שסוג הפרמטרים לא השתנה, לא תהיה שגיאה בקוד. עליכם לוודא שאתם משתמשים בפרמטרים בעלי שם או לעדכן את הסדר באופן ידני, אחרת הקוד לא יפעל כמו קודם. - הפרמטר
secondaryVariant
נוסף אלdarkColors()
. הצבע הזה בדרך כלל זהה ל-secondary
בעיצוב כהה, אבל הוא מתווסף לעקביות ולהתאמה אישית נוספת. - הוסרו הקיצורים HeightionDefaults ו-animate יוצגו() מפלטפורמת ה-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)
- ElementActivity.setContent עבר אל androidx.activity.compose.setContent androidx.activity:activity-composition. (Icf416)
- תמונת המצב של ה-API עודכנה כדי להיות עקבית יותר עם הנחיות ל-API וגם הסתרת סיווגי הטמעה פנימיים מה-API הציבורי. (Id9e32)
- שינית את השם של 'סביבה' כך שיתאים לאווירה -> שינוי שם של CompositionLocal. לסביבה (I2d55d)
- שינית את השם של Ambient ל-CompositionLocal ו-AmbientOf / staticAmbientOf ל-זניםLocalOf / staticCompositionLocalOf בהתאמה. השינוי הזה עוזר להבהיר את המטרה של CompositionLocal: מנגנון לאספקה או אחזור של ערכים באופן מקומי ליצירה. התחילית של מופעים של CompositionLocal צריכה להיות
Local
, למשל val LocalFoo = communicationLocalOf { Foo() }. (Ia55b6) - וגם 'צילום תמונה' ו'צילום מסך' להיות שיטות נלוות של snapshot. (I91f19)
הוצאנו משימוש את
@ComposableContract
ותשנו שלוש הערות ספציפיות יותר.התפקיד של
@ComposableContract(restartable = false)
השתנה ל-@NonRestartableComposable
התפקיד של@ComposableContract(readonly = true)
השתנה ל-@ReadOnlyComposable
התפקיד של@ComposableContract(preventCapture = true)
השתנה ל-@DisallowComposableCalls
בוצעה הסרה של@ComposableContract(tracked = true)
. (I60a9d)ריקContent() ו-(@Composable () -> Unit).orEmpty() הוצא משימוש כי אין להם יותר השפעה חיובית או ערך חיובי על הביצועים (I0484d)
snapshotFlow
ו-withMutableSnapshot
כבר לא ניסיוני (I6a45f)עכשיו אפשר לסגור את היוצרים מחדש. אחרי שיוצרים מקבצים סגורים להמשיך את ההרכבה מחדש עד להשלמת קורוטין צאצאים. השם של Recomposer.shutDown השתנה כדי לבטל, כדי ליצור ניגודיות ביחס לסגירה. (Ib6d76)
פריט המידע שנוצר בתהליך הפיתוח (Artifact) מסוג
compose:runtime-dispatch
הוצא משימוש. עכשיו ניתן למצוא את MonotonicFrameClock בקובץ פיתוח: הידור:runtime ו- ניתן למצוא את AndroidUiDispatcher ב-Compose:ui. (Ib5c36)ה-API שאליו מיועד הפלאגין של המהדר לכתיבה עבר ארגון מחדש לשימוש בממשק וגם סיווג קונקרטי. הממשק גם כבר לא משתמש פרמטר של סוג.
זהו שינוי פנימי שלא אמור להשפיע על המקור תאימות לקוד, אבל היא שינוי בינארי שעלול לגרום לכשל. (I3b922, b/169406779)
הכניסה של SnapshotMutableState (Icfd03)
השם של DisposableenseDisposable השתנה ל-'Disposale חווית המשתמש' (Ica7c6)
הוסרה Recomposer.current(). [Abstract]ComposeView עכשיו כברירת מחדל של Recomposers שנוצרו באופן עצלני, ברמת החלון, המבוססים על ViewTreeLifecycleOwner לחלון. הרכב מחדש ו סימוני האנימציה המבוססים על withFrameNanos מושהים במהלך מחזור החיים של המארח הופסק. (I38e11)
ב-Recomposer.runningRecomposers יש עכשיו גרסה גלובלית של StateFlow של RecomposerInfo לקריאה בלבד לצורך צפייה במצב הרכב מתמשך את התהליך. יש לתת עדיפות ל-API הזה על פני Recomposer.current(), שעכשיו הוצא משימוש. (If8ebe)
השם של DisposableenseDisposable השתנה ל-'Disposale חווית המשתמש' (I3ea68)
גרסה 1.0.0-alpha11
28 בינואר 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
משוחרר. גרסה 1.0.0-alpha11 מכילה את התחייבויות אלה.
שינויים ב-API
- onCommit , onDispose ו-onActive הוצאו משימוש לטובת ממשקי API של Side Effects ו-Sdisposable Effects (If760e).
- ה-API של emit() וכל עומסי-היתר הוצאו משימוש והשם שלהם השתנה ל-ComposeNode. ממשקי ה-API זהים, רק שם שונה, כדי לפעול בהתאם למוסכמות מתן השמות של 'ניסוח אוטומטי' (I4137b)
- inverify ו-CompositionReference() הוצאו משימוש לטובת currentRecomposeScope ו-MemoryCompositionReference בהתאמה. (I583a8)
remindObserver מחליף את CompositionLifecycleObserver ו-CompositionLifecycleObserver הוצא משימוש.
RememberObserver
הוא תחליף ל-CompositionLifecycleObserver
עם סמנטיקה שונה ו שיטות עם שם חדש. המעבר ל-API החדש יכול להתבצע באופן מכני לאובייקטים שניתן לזכור רק פעם אחת, וממשיכים להיות השיטה המומלצת. אבל אם ההפניה זוכר יותר מפעם אחת ביצירה,onRemembered
נקראת לכל הפניה שבהonEnter
מופעל רק פעם אחת.onEnter
נקרא מספר פעמים אם נעשה שימוש באובייקט בתרכובות משנה, כמוWithConstraints
ו-Scaffold
שהופכים את הסינגל ההתחייבות שלonEnter
לשיחה לא אמינה והיא הוסרה למשךRememberObserver
הפונקציה
RememberObserver
מוסיפה אתonAbandoned
. תתבצע קריאה אם מופע אחד (RememberObserver
) מוחזר מהקריאה החוזרת (callback) שהועברה אלremember
, אבל הוא לא נשמר במצב היצירה ולכן אף פעם לא יתקשרו אלonRemembered
. מי יכול מתרחשת במקרה שחריג מסיים יצירה לפני השלמת היצירה או היצירה בוטלה מכיוון שהמדינה מפיקה יצירה עבור כבר לא עדכנית או שכבר לא זמינה הדרושים. אם המופע שלRememberObserver
שמופיע אחרי הסינגל ההמלצה שצוינה למעלה היא לעקוב אחרי משאב חיצוני גםonForgotten
וגםonAbandoned
מציינים אינו נדרש יותר. אם האובייקט עוקב אחרי עבודה שהתחילו או הוקצו ב-onRemembered
,onAbandoned
אפשר להתעלם ממנו כי לא תיקרא אםonRemembered
שנקראה. (I02c36)אין לסמן פונקציות של
collectAsState()
כפונקציות מוטבעות (Ia73e4)
תיקוני באגים
- בוצע יישום מחדש של withConstraints בתור BoxWithConstraints, ולהשאיר את base.layout. (I9420b, b/173387208)
- להיעזר ב-TestCoroutineDispatcher בבדיקות (I532b6)
גרסה 1.0.0-alpha10
13 בינואר 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
משוחרר. גרסה 1.0.0-alpha10 מכילה את התחייבויות אלה.
שינוי משמעותי בשיבושים
שינוי המבנה של המהדר הפנימי ה-API מאפשר לקבץ שינויים באצווה בצמתים שנוצרו כתוצאה מההרכבה בתיבת 'החלת השינויים' שלב ההרכבה, אחרי כל הפונקציות של
@Composable
הושלמו.זוהי פגיעה התנהגותית שעשוי להשפיע על קוד האפליקציה, צמתים כבר לא זמינים מתוך בממשקי API ניסיוניים עד שהשינויים ייכנסו לתוקף הוחלו. בדרך כלל ניתן לפתור את הבעיה עם יחסי תלות כאלה תוכן קומפוזבילי:
SideEffect
כדי לדחות את הביצוע של עד שהצמתים נוצרו אותחל. (I018da)
שינויים ב-API
- נוספה דרך לעקוב אם recomposer יחיל שינויים. (I1b3e2)
הרחבת ממשקי ה-API של [Abstract]ComposeView כדי לאפשר מיחזור תצוגות שמבוססות על הרכבה, תוך השמטת ההרכב שלהן כדי ליצור מחדש מאוחר יותר. הוספת ממשקי API להתקנה וגילוי של יוצרים מחדש ברמת החלון ו-CompositionReferences ליצירת יצירות צאצא.
הוספה של אסטרטגיית תצוגה-הרכבה להגדרת סילוק של הרכבה האסטרטגיה של [Abstract]ComposeViews; התנהגות ברירת מחדל מושלכת ניתוק חלון. (I860ab)
תיקוני באגים
- עכשיו יוצר מחדש חושף את הזרימה במצב הנוכחי שלו, ומאפשר לעקוב אחרי הפעילות שלו ואחר הפעילות של ההשפעות הקשורות אליו. (Ifb2b9)
- עכשיו ניתן לגשת ל-keyEvent המקורי דרך keyEvent.nativeKeyEvent (I87c57, b/173086397)
גרסה 1.0.0-alpha09
16 בדצמבר 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
משוחרר. גרסה 1.0.0-alpha09 מכילה את התחייבויות אלה.
שינויים ב-API
הוסרו OAuthTable, SlotReader ו- OAuthWriter מה-API הציבורי. האירועים האלה סומנו בתור InternalComposeAPI בעבר. עכשיו הם פנימיים למודול הכתיבה.
CompositionData ו-CompositionGroup נוספו בתור מחליף את ui-tooling API שישמש לחילוץ מידע על היצירה. הקישורים האלה ציבוריים, אבל הם לא מיועד לשימוש מחוץ ל-ui-tooling API, כי הוא מספק המידע הגולמי שה-ui-tooling API מפרש (I31a9c)
סיווג Applier כבר לא נחשב (Id85b0)
הממשק של
Applier
השתנה כדי לפשט את הממשק עצים מלמטה למעלה במקום מלמעלה למטה.השם של ה-method
insert()
השתנה ל-insertTopDown()
.נוספה שיטה חדשה,
insertBottomUp()
.המיישם מוסיף צמתים לעץ שהוא עורך באמצעות
insertTopDown()
אוinsertBottomUp()
, בהתאם עם ביצועים טובים יותר.יש עצים, כמו
LayoutNode
ו-View
, בגובה רב יותר יעיל לבנות מלמטה למעלה מאשר מלמעלה למטה. לפני השינוי הזה, נדרשה ערימה של תוספות כדי להטמיע היה צורך להעתיק לכל אפליקציה שבה נדרש מלמטה למעלה לשיפור הביצועים. לאחר השינוי הזה,Applier
מבטל אתinsertBottomUp()
כדי לבנות עץ מלמטה למעלהinsertTopDown()
כדי לבנות את העץ מלמעלה-למטה. (Icbdc2)התכונה 'כתיבה' תומכת בנמעני מאפיינים שיכולים לאפשר הפעלות קומפוזביליות. התמיכה בכך לא תופסק, אבל התחביר להצהרה על נכס getter כ- @Composable משתנה.
לצורך כך, התחביר שיצא משימוש היה הוספת הערות לנכס עצמו:
@Composable val someProperty: Int get() = ...
כדי לעשות את זה, התחביר הנכון עכשיו הוא הוספת הערות שמקבל את הנכס:
val someProperty: Int @Composable get() = ...
שני התחביר יפעלו במשך זמן מה, אבל בסופו של דבר התחביר הקודם שהוצא משימוש יהפוך לשגיאת הידור. (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, כדי לבדוק אם יש עקביות להנחיות לכתיבה.
בנוסף, חלק מממשקי ה-API הועברו בעזרת
children
כשם של lambda בסוף, ל-content
, בהתאם לבדיקת השגיאות בקוד ולהנחיות. (Iec48e) - Recomposer כבר לא מקבל EmbeddingContext; חובה יחסי תלות של תזמון מתקבלים מה-ImpactCoroutineContext. FrameManager הוצא משימוש; שילובי הפלטפורמה צריכים לאתחל איך להתמודד עם תמונת מצב גלובלית. (I02369)
- השם של הפונקציה ReStatorableStateHolder.withRestructableState השתנה ל-RestorableStateProvider (I66640)
תיקוני באגים
- אלמנטים של אווירה שהוצאו משימוש, שהשם שלהם הוא
Ambient
, והוחלפו במאפיינים חדשים עם קידומת Ambient, שעומדים בהנחיות נוספות של Ambients ו-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 השתנה ל-LaunchedImpact כדי לשמור על עקביות בשילוב עם ממשקי ה-API של Side Effects ו-Seposable Effects. הופעל ללא אין להשתמש בפרמטרים של נושא כדי לעודד שיטות מומלצות. (Ifd3d4)
- ל-Applier יש עכשיו קריאות חוזרות (callbacks) של onBeginChanges/onEndChanges מופעל כשה-Composer מתחיל או מסיים להחיל את השינויים על העץ. אפשר להשתמש בהם לאצוות לניהול משאבים במקרה הצורך. (Icf476)
- Recomposer עכשיו דורש CoroutineContext בזמן הבנייה (Ic4610)
- שינויים בהטמעה הפנימית של OAuthTable לא אמורה להשפיע על ה-API הציבורי. (If9828)
- מתאמי rxjava2 שהוצאו משימוש ולא מקבלים את הערך הראשוני הוסרו (Idb72f)
תיקוני באגים
- Foundation.Text הוצא משימוש והוחלף ב-material.Text. בכתובת 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 ו הורה מסוג קומפוזיציה. עכשיו, פחות מקומות נדרשים להשתמש בכלי המרה מפורש. (I4036f)
- נוסף ממשק API מקביל של חד פעמי לאפקט לוואי, מילוי
את התפקיד של onCommit-with-params אבל עם onDispose.
- נוסף ממשק API של SaveUpdatedState לפרסום נתונים מהרכב מחדש ל- תהליכים מתמשכים או ארוכי טווח, כגון השפעות חד-פעמיות, UnlockedTasks.
- (Id50b9)
- ב-MutableVector מוטמע עכשיו RandomAccess (I85d73, b/170461551)
- נוסף תופעות לוואי קומפוזביליות של החלת תופעות לוואי של לאובייקטים שמנוהלים על ידי ההרכבה. תופעת הלוואי היא שמיועד להחליף את התוכן הקומפוזבילי ב-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/Line משופרים על ידי צמצום העבודה בשיטת המשנה בכל גלילה. ה-method החדש has Invalidations() נוספה למחלקה Composition. השם של המתודה hasPendingChanges() מ-Recomposer השתנה ל-hasUndoations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- הוספת generateState API להשקת קורוטינים מהרכב
שמעדכנים ערך
State<T>
יחיד לאורך זמן (Id4a57) - השם שלlaunchInComposition השתנה ל-LaunchedTask כדי להתאים לכתיבה הנחיות ל-API (I99a8e)
- הסדר של הקריאות Place() בפריסות בהתאמה אישית מגדיר עכשיו את סדר השרטוט של הצאצאים (Ibc9f6)
גרסה 1.0.0-alpha04
1 באוקטובר 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את התחייבויות אלה.
שינויים ב-API
- נוסף היקף הרשאות של בעלים כדי לאפשר איסוף של ולצייר היקפי תצפית ברגע שהם כבר לא בתוקף. (Ic4cf8)
- נוסף זריקת derStateOf API כדי ליצור אובייקטים של מצב על סמך חישוב שעשוי לקרוא אובייקטים אחרים של מצב (If758b) (ולהפיק מהם).
- נוסף ממשק API של TestOnly ל-SnapStateObserver (I6e2a9)
תיקוני באגים
- Foundation.Box הוצא משימוש. במקומם צריך להשתמש ב- הטעינה הקמפיין base.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
לא מפעיל יותר קורוטינים ללא תיקונים (Ief6af, b/166486000)
גרסה 1.0.0-alpha02
2 בספטמבר 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את התחייבויות אלה.
שינויים ב-API
- הוספת ממשקי API של
snapshotFlow
ו-withMutableSnapshot
לצריכה ויצירת שינויים בנתונים של תמונת המצב. (I3e722) לפי המוסכמה של הקריאות לפונקציות קומפוזביליות השתנה. זהו שינוי תוכנה בינארית. כל הספריות חייבות להיות עברה הידור מחדש כדי לעבוד עם הגרסה הזו של הפלאגין מהדר (compiler) לכתיבה.
השינוי הזה לא יוצר שינוי תוכנה שעלול לגרום לכשל ברמת המקור רק ממשקי API שהשתנו הם ממשקי API של מהדר שיש להם להפעיל אותו. (I7afd2, b/158123185)
הוסרו שיטות תזמון מ-EmbeddingContext (I7b9be)
onPreCommit הוצא משימוש; ב-onCommit יש עכשיו או התנהגות המשתמשים.
onCommit ו-onActive פועלים עכשיו באותה מסגרת של כוריאוגרף. את השינויים בהרכב שבוצעו ולא בהתחלה של הפריים הבא של הכוריאוגרף. (I70403)
גרסה 1.0.0-alpha01
26 באוגוסט 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
משוחרר. גרסה 1.0.0-alpha01 מכילה את התחייבויות אלה.
גרסה 0.1.0-dev
גרסה 0.1.0-dev17
19 באוגוסט 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
משוחרר. גרסה 0.1.0-dev17 מכילה את ההתחייבויות האלה.
שינויים ב-API
- עכשיו אנחנו יכולים להצהיר כי אחד או יותר מהקובעים של פליטת אנרגיה בהתאמה אישית אפשר לדלג על השלב הזה ולהרכיב אותו מחדש בנפרד מהפליטות. (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
כדי לפטור תצוגות בתוך 'כתיבה'. הערה: בעתיד לא תהיה תמיכה בכתיבה ישירה של תצוגות (Views) ו-ViewGroups, אלא אם הן נשארות בעץ ההרכבה. במקרה כזה, אפשר יהיה לעשות זאת באמצעות AndroidView. (I29b1e, b/163871221)
גרסה 0.1.0-dev16
5 באוגוסט 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
משוחרר. גרסה 0.1.0-dev16 מכילה את ההתחייבויות האלה.
שינויים ב-API
מדיניות ברירת המחדל בנושא מוטציה של
mutableStateOf()
, התפקיד שלambientOf()
ו-savedInstanceStateOf()
השתנה ועכשיו הואstructuralEqualityPolicy()
במקוםreferentialEqualityPolicy()
.ברירת המחדל להחלטה אם להקצות ערך חדש מופע אחד (
mutableStateOf()
) נחשב כשינוי שברירת המחדל שלו היא באמצעות==
במקום להשתמש ב-===
.פרטים נוספים זמינים בכתובת https://kotlinlang.org/docs/reference/equality.html
ambientOf()
ו-savedInstanceStateOf()
משתמשים ב-mutableStateOf()
בהטמעות שלהם כך שהן שונו כך שיתאימוmutableStateOf()
.שימוש בשוויון מבני דומה יותר למפתח לציפיות שלכם.
לדוגמה,
val state = mutableStateOf(1f)
ולאחר מכן,
state.value = 1f
לא ייחשב יותר כשינוי של
state
ושימושים ב- כבר לא יהיה צורך להרכיב מחדש אתstate
במהלך היצירה.זהו שינוי תוכנה שעלול לגרום לכשלים, אבל ברוב המקרים (למשל, כאשר משתמשים המחלקות שלא מבטלות את
equals()
), לא תהיה להן משמעותית על יישום.מחלקות שכן מבטלות את
equals()
, כמוdata
מחלקות, עשויים להיות ירידה בביצועים במסגרת ה-equals()
של השיטות מופעלים עכשיו כברירת מחדל, כשהם מוקצים ל-mutableStateOf()
.כדי לשחזר את ההתנהגות הקודמת, צריך להוסיף את המדיניות הפרמטר
policy = referentialEqualityPolicy()
לקריאות אלmutableStateOf()
,ambientOf()
וגםsavedInstanceStateOf()
. (Ic21a7)Row
ו-Column
הם עכשיו פונקציות מוטבעות באופן משמעותי ולהפחית את התקורה כתוצאה מהשימוש בהם. (I75c10)
תיקוני באגים
- ההגדרה setViewContent הוצאה משימוש. במקום זאת, צריך להשתמש ב-setContent. (I7e497, b/160335130)
נוספה ההגדרה MonotonicFrameAnimationClock שמאפשרת להשתמש MonotonicFrameClock בתור AnimationClockObservable כדי לגשר על הפער בין השעונים החדשים שמבוססים על שעוני קורוטינים לבין ממשקי ה-API שעדיין משתמשים ושעונים שמבוססים על קריאה חוזרת (callback).
שווה הערך של MonotonicFrameClock ל-ManualAnimationClock עכשיו ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable השתנה לגמרי והשם שלו השתנה אל Modifier.sslideable. הושקה מחלקה חדשה של WAPableState, השדות של DrawerState ו-BottomDrawerState עברו ארגון מחדש והרשת ביניהם בירושה. [Modal/Bottom]DrawerLayout לא מקבל יותר פרמטר onStateChange. (I72332, b/148023068)
השירות Modifier.plus הוצא משימוש. במקומו צריך להשתמש ב-Modifier.then. 'אז' מקבלים אות חזק יותר של הזמנה, וגם אוסר על הקלדת
Modifier.padding().background() + anotherModifier
, דבר ששובר את השרשרת וקשה יותר לקרוא (Iedd58, b/161529964)נוספה פריסת משנה. זהו פרימיטיבי ברמה נמוכה שמאפשר להרכיב את הצאצאים במהלך המדידה אם אנחנו רוצים להשתמש בערכים מסוימים שזמינים רק מאוחר יותר במהלך המדידה של הרכב עץ המשנה. לדוגמה, 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 מכילה את ההתחייבויות האלה.
עדכון של יחסי התלות
- כדי להשתמש בגרסה
0.1.0-dev15
של 'כתיבה', צריך לעדכן את יחסי התלות בהתאם לקטעי הקוד החדשים שמוצגים למעלה בקטע הצהרה על יחסי תלות.
שינויים ב-API
ההערה
@Model
הוצאה משימוש. שימוש ב-State וב-MutableStateOf כחלופות. קיבלנו את ההחלטה הזו לגבי הוצאה משימוש אחרי דיון קפדני מאוד.הצדקה
הנימוקים כוללים, בין היתר:
- צמצום שטח הפנים והמושגים שנדרשים ללמד
- קרוב יותר לערכות כלים דומות אחרות (Swift UI, React, Flutter)
- החלטה שניתן לבטל אותה. תמיד נוכל להחזיר את
@Model
מאוחר יותר. - הסרת השימוש בתרחיש פינתי וקשה לענות על שאלות לגבי הגדרת
@Model
כדברים שדרושים לנו לטיפול @Model
סיווגי נתונים, השווה, hashcode וכו'.- איך אפשר להגדיר נכסים מסוימים כנכסים ש'תועדו' ואחרים לא?
- איך אפשר לציין שוויון מבני לעומת שוויון יחסי לצורך תצפית?
- מפחית את ה"קסם" במערכת. להקטין את הסבירות שמישהו יניח שהמערכת חכמה יותר ממה שהיא (כלומר, היא יודעת איך להבחין בין רשימות)
- הופך את רזולוציית התצפית לאינטואיטיבית יותר.
- שיפור יכולת הארגון מחדש ממשתנה -> נכס בכיתה
- אפשרויות לבצע אופטימיזציות ספציפיות למדינה בעבודת יד
- הפעולה הזו תואמת יותר לשאר המערכת האקולוגית ומפחיתה את אי-הבהירות לגבי בלתי ניתן לשינוי או לגבי "אימוץ מצב ניתן לשינוי".
הערות העברה
כמעט כל השימושים הקיימים ב-
@Model
עוברים טרנספורמציה טריוויאלית למדי באחת משתי הדרכים הבאות. בדוגמה הבאה יש מחלקה@Model
עם שני מאפיינים רק לצורך הדוגמה, ונעשה בה שימוש בתוכן קומפוזבילי.@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: שימוש ב-StateOf ובמשתמשים עם הרשאות גישה לנכס
הגישה הזו קלה יותר בזכות מקבלי ההרשאה של Kotlin עם ה-API
mutableStateOf
, שמאפשרים ליצור מכונות 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/14b/14
שינוי אסטרטגיית יצירת הקוד של המהדר (compiler) ב-Composer. לפני השינוי, המהדר (compiler) לכתיבה היה הופך קריאות לפונקציות קומפוזביליות. בעקבות השינוי הזה אנחנו ממירים עכשיו את הגוף של פונקציה קומפוזבילית ומשאירים את האתר קריאה ללא שינוי (לרוב).
כלומר, רוב הלוגיקה של התקשורת עם סביבת זמן הריצה של הרכבה מתרחשת בתחילת גוף הפונקציה ולא בתחילת ה-callsite.
צריך לבצע את השינוי הזה בהתאם למקור בכל שימוש בכתיבה. רוב המשתמשים בכתיבה לא יצטרכו לעדכן קוד כלשהו כתוצאה מהשינוי הזה.
כדי לתמוך בפעולה הזו, חתימת ה-JVM של כל הפונקציות הקומפוזביליות השתנתה. פונקציה קומפוזבילית שמקבלת פרמטר יחיד הופכת לפונקציה שמקבלת 3 פרמטרים, והפרמטרים הנוספים הם Composer, שהוא מספר שלם 'מפתח'. מספר שלם ב-bitmask שמשמש להפצת מטא-נתונים באמצעות קריאות.
עכשיו גם התכונה 'כתיבה' ממירה ארגומנטים שמוגדרים כברירת מחדל לפונקציה קומפוזבילית. היא עושה זאת בלי להוסיף עומס יתר סינתטי נוסף כברירת מחדל על הפונקציה עצמה, ולכן השינוי הזה יגרום לפחות הגדרה של פונקציות.
שינויים התנהגותיים ידועים הנובעים מכך:
- חלק מהשיחות ידלגו על מקומות שלא היו מגיעים אליהם בעבר
- ביטויים קומפוזביליים בביטויי ארגומנטים שמוגדרים כברירת מחדל נרשמים עכשיו בצורה נכונה ומטופלים
העבודה הזו כללה כמה אופטימיזציות: 1. התוצאה של השוואות של פרמטרים מופצת דרך תרשים הקריאה לפונקציות קומפוזביליות אחרות. התוצאה תהיה פחות השוואות בזמן הריצה, תקטין את גודל הטבלה של מיקומי המשבצות וכן יותר דילוג על פונקציות קומפוזביליות שלא דילגת עליהן בעבר 2. פרמטרים שנקבעים שהם "סטטיים" בזמן הקומפילציה כבר לא מושווים ולא מאוחסנים בזמן הריצה. הפעולה הזו גורמת לצמצום של מספר ההשוואות ולהקטנת טבלת המיקומים. 3. מבנה הזרימה של בקרה בגוף הפונקציות משמש לצמצום מספר הקבוצות שנוצרות. כך גודל הטבלה של מיקומי המשבצות מצטמצם ויש פחות עבודה בסביבת זמן הריצה 4. פרמטרים של שולח ומקלט שאינם בשימוש לפונקציות לא נכללים בקביעת יכולת הדילוג של הפונקציה אם לא נעשה בהם שימוש בתוך גוף הפונקציה.
רוב שינויי התוכנה היו שעלולים לגרום לכשל בממשקי API שהמהדר מטרגט אליהם ישירות, והשימוש האופייני בכתיבה לא יושפע: 1. Composer::startExpr הוסר 2. Composer::endExpr הוסר 3. הממשק Composer::call הוצא משימוש 4. עומסי-החריגים שאינם משתנים של
key
הוסרו. מעכשיו צריך להשתמש בגרסהvararg
. 5. ההערה הזו הוצאה משימוש. אפשר להשתמש ב-key
כתחליף. 6. ScopeUpdateScope::updateScope השתנה כדי לצפות לפונקציה3 במקום פונקציה1 7. הפונקציה startableFunction ו-redeviceableFunctionN עודכנו ועכשיו הם כוללים פרמטרים נוספים של זמן הידור (compile). (I60756, b/143464846)נוספו המיון עם ו-removeRange ל-MutableVector (Icccf7)
נוספו הטמעות של שיטות ברירת מחדל עבור CompositionLifecycleObserver (I24289)
ל-Applier נדרשת עכשיו שיטת clear() כדי להשליך יצירות (Ibe697)
נוספה האפשרות asMutableList() ל-MutableVector כדי לאפשר זאת יועברו ל-API ציבורי בלי שיהיה צורך להעתיק את כל חדשה. (I298df)
נוספה תזכורתCoroutineScope() כדי לקבל נתונים מנוהלים CoroutineScope להשקת משימות בתגובה לאירועים. (I0e264)
MutableVector הוא אוסף חדש שאינו להטמיע כל אחד מהממשק הרגיל של איסוף נתונים. הזה מציע מהירות גבוהה מדרישות אחרות, שמיועדות לשימוש רק בהטמעות פנימיות. (I8ebd6)
בוצעה הסרה זמנית של
StableMutableList
ושלStableMutableMap
כדי להימנע מבעיה בגרסת KotlinCompose. האלה הממשקים יופעלו מחדש אחרי עדכון הגרסה לגרסה של 'אימייל חדש' מ-Kotlin שאין להם את הבעיה.SnapshotStateList
ו-SnapshotStateMap
ציבוריים עכשיו, אבל הם יהיו הוצא משימוש לאחר השחזור שלStableMutableList
ו-StableMutableMap
. (Ia7769)הוספת הפונקציה withFrameNanos ברמה העליונה לתזמון האנימציה (Ie34c5)
הוצאנו משימוש את ההערה @ללא מעקב. מחליפים ב- @ComposableContract(tracked=false) (Id211e)
השם של אתחול הפונקציה מחדש וממשקי ה-API המשויכים אליו השתנה ל-ComosableLambda וכו'. ממשקי ה-API האלה טורגטו רק על ידי המהדר, כך שבאופן רגיל לא אמורה להיות לכך השפעה על תאימות ברמת המקור. שינוי השם נועד בעיקר כדי להסביר מה טוב יותר בכיתה הזו כשהיא מופיעה בדוחות קריסות (I7eb25)
הערה מסוג @Composable כבר לא תקפה במחלקות (Ia5f02)
השם
Ambient<T>
הוא עכשיו @Stable במקום @Immutable (I0b4bb)לפני השינוי הזה, הפלאגין של המהדר לכתיבה היה לא מיירט קריאות למבנים בתוך פונקציה מסוג @Composable אם הייתה לו (I5205a, b/158123804)
התוכן הקומפוזבילי הוא כבר לא הפשטה מועילה. רוב ההרכבה מחדש אמורה להתרחש כתוצאה מהקצאות MutableState. מעבר לזה, מומלץ להשתמש בפונקציה
invalidate
כדי להפעיל הרכבה מחדש של ההיקף הנוכחי. (Ifc992)מדד כבר לא הפשטה מועילה. אם צריך לשכפל אותו, אפשר לשכפל את ההטמעה שלו על ידי יצירת פונקציה קומפוזבילית שמפעילה פרמטר lambda קומפוזבילי. לדוגמה,
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)השימוש ב- @Direct בוטל לטובת @ComposableContract(restartable=false) (If4708)
נוסף מתאם ל-StateFlow שנוסף לאחרונה, שמאפשר לאכלס מראש את הערך הראשוני כך שהמצב המוחזר לא יכול להיות null (I61dd8 , b/156233789)
נוסף מתאם עבור 'זרימה'. דוגמה לשימוש: val value by flow.collectAsState() (If2198, b/153375923)
[ניתן לשינוי]האופרטורים להענקת גישה לנכסים במדינה עברו לתוספים לתמיכה באופטימיזציות של מקבלי גישה לנכס 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)הדגל
ComposeFlags.COMPOSER_PARAM
עודכן ועכשיו הואtrue
, והוא ישנה את אסטרטגיית יצירת הקוד של הפלאגין של כתיבת הקוד. ברמה הכללית, זה גורם ליצירת פונקציות @Composable עם פרמטר סינתטי נוסף, שמועבר אל הפעלות @Composable נוספות כדי שסביבת זמן הריצה תוכל לנהל כראוי את הביצוע. עם זאת, זהו שינוי תוכנה בינארי משמעותי שעלול לשמר תאימות ברמת המקור בכל שימוש מאושר בכתיבה. (I7971c)שינויי תוכנה ב-Ambis API פרטים נוספים זמינים במסמכי היומן ובמסמכי
Ambient<T>
(I4c7ee, b/143769776)נוסף ui-livedata – פריט מידע שנוצר בתהליך פיתוח (Artifact) עם מתאם ל-LiveData. דוגמה לשימוש: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
מתאמי Rx ללא ערך ראשוני מפורש הוצאו משימוש. השימוש ב-null הוא לא תמיד ברירת המחדל הטובה ביותר. לדוגמה, כשיש לכם רשימה, עדיף להתחיל עם emptyList() או בכל ברירת מחדל סבירה אחרת (I00025, b/161348384)
נוסף ui-rxjava2 - פריט מידע חדש שנוצר בתהליך פיתוח (Artifact) עם מתאמים ל-RxJava2. דוגמה לשימוש: val value by observable.signupAsState() (Ifab4b, b/153369097)
עכשיו אפשר להשתמש ב-
savedInstanceState()
עם סוגים שאינם מכילים נתונים (I6847f, b/153532190)חדש listSaver() ו-mapSaver() כדי להקל על כתיבת אובייקטים של שמירה בהתאמה אישית (I8cf68, b/152331508)
פונקציות חדשות: savedInstanceState() ו-MemorySavedInstanceState(). הם דומים ל-state() ו-Memory() , אבל יש בהם תמיכה במצב מכונה שמור (If1987, b/152025209)
תיקוני באגים
- השם של
runOnIdleCompose
השתנה ל-runOnIdle
(I83607) - ממשק API ניסיוני של LayoutNode (I4f2e9)
- androidx.ui.foundation.TextFieldValue וגם הפונקציה androidx.ui.input.EditorValue הוצאה משימוש. TextField, תכנים קומפוזביליים של FilledTextField ו-CoreTextField שנעשה בהם שימוש גם סוג זה הוצא משימוש. צריך להשתמש ב- במקום זאת androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- הוסרה התכונה DrawBackground שהוצאה משימוש API עם העדפה לתוסף RollBackground ממשקי API ב-Modifier. ארגון מחדש צבע, מברשת וציור רקע הטמעות כדי לצמצם את נתיבי הקוד כדרישה להסרה לצורך יצירת מגביל כחלק מהיצירה. (I0343a)
- עודכנה רמה גבוהה יותר כתיבת ממשקי API שחושפים בד ציור במקום זאת, לחשוף את CanvasScope. הפעולה הזו תסיר הצורך של הצרכנים לשמור על אובייקטים של 'צייר'. למשתמשים עדיין נדרשת גישה ללוח הציור הוא יכול להשתמש בתוסף PaintCanvas שמאפשרת קריאה חוזרת (callback) לבעיה שרטוט של פקודות באמצעות קנבס. (I80afd)
- ממשק ה-API של lambda בסוף, withConstraints, השתנה. עכשיו, במקום שני פרמטרים, יש לו היקף מקלט, שבנוסף למגבלות ו-DeployDirection, מספק את המאפיינים minwidth, maxWidth, minHeight ו-maxHeight ב-Dp (I91b9a, b/149979702)
- נוסף מקש מרווח סימטרי למרווח פנימי. (I39840)
- עודכנו wrapContentwidth ו-wrapContentHeight כדי לצפות ליישור אנכי או אופקי, במקום יישור כלשהו. מקש הצירוף של כוח הכבידה עודכן לקבלת יישור אנכי או אופקי. השורות, העמודות והמקבץ עודכנו ועכשיו הם תומכים ביישור רציף בהתאמה אישית. (Ib0728)
- השם של מודול ui-text השתנה ל-ui-text-core (I57dec)
- שיפור של DrawModifier API:
- יצרת את היקף המקבל עבור pull() ContentDrawScope
- הוסרו כל הפרמטרים מ-Daw()
- הממשק של DrawScope זהה לממשק הקודם של CanvasScope
- ContentDrawScope כולל שיטת pullContent() (Ibaced, b/152919067)
- הצבע של ColoredRect הוצא משימוש. במקומה צריך להשתמש במדיניות
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - אופרטור הצירוף הוחלפה בפונקציות של תוספי היצרן (I225e4)
- החברים ב-rowScope וב-ColumnScope נגישים עכשיו מחוץ ל-Row ול-Column. (I3a641)
- השם של הפריסה הגמישה השתנה ל-Layoutweight (משקל). השם של הפרמטר 'נוח' שונה למילוי. (If4738)
- withConstraints Get LayoutDirection (I6d6f7)
- שינית את שם הרקע ל-DawBackground וברירת המחדל ל'חשוב לזכור' אותו (Ia0bd3)
- סגנון הלחצנים הוחלף בפונקציות ייחודיות ועומס יתר של טקסט (מחרוזת). דוגמאות מעודכנות של פרטי שימוש. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
ו-runOnUiThread
הן עכשיו פונקציות גלובליות במקום להשתמש ב-methods ב-ComposeTestRule. (Icbe8f)
תרומה חיצונית
- מסירים ממשקי API לא נדרשים, כמו לופר ו-Handler, משכבת הניוד של סביבת זמן הריצה של הכתיבה (I6847d).
- הוצאה משימוש של
Flow<T>.collectAsState()
ללא ערך ראשוני. צריך להשתמש ב-StateFlow<T>
או להעביר ערך ראשוני מפורש. (I63f98, b/157674865)