وقت تشغيل الإنشاء
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(الاطلاع على مرجع واجهة برمجة التطبيقات لجميع الحِزم)
آخر تعديل | الإصدار المستقر | إصدار مرشح | الإصدار التجريبي | الإصدار الأولي |
---|---|---|---|---|
29 تشرين الثاني (نوفمبر) 2023 | 1.5.4 | - | الإصدار التجريبي 1.6.0-02 | - |
التركيبة
تشتمل ميزة "الإنشاء" على 7 معرّفات مجموعة Maven في androidx
. تحتوي كل مجموعة على مجموعة فرعية مستهدفة من الوظائف، ولكل منها مجموعة خاصة بها من ملاحظات الإصدار.
يشرح هذا الجدول المجموعات والروابط لكل مجموعة من ملاحظات الإصدار.
مجموعة | الوصف |
---|---|
compose.animation | يمكنك إنشاء صور متحركة في تطبيقات Jetpack Compose لتحسين تجربة المستخدم. |
compose.compiler | يمكنك تحويل الدوال @Composable وتفعيل التحسينات باستخدام المكوِّن الإضافي لبرنامج المحول البرمجي بلغة Kotlin. |
compose.foundation | اكتب تطبيقات Jetpack Compose مع الوحدات الأساسية الجاهزة للاستخدام ووسِّع نطاق الأساس لإنشاء أجزاء نظام التصميم الخاصة بك. |
compose.material | يمكنك إنشاء واجهات مستخدم في Jetpack Compose تتضمّن مكونات جاهزة للاستخدام. هذه هي نقطة الدخول ذات المستوى الأعلى في Compose، والتي تم تصميمها لتوفير مكوّنات تتوافق مع تلك الموضّحة في www.material.io. |
compospos.material3 | أنشئ واجهات مستخدم في Jetpack Compose باستخدام مكونات Material Design 3، وهي التطوّر التالي للتصميم المتعدد الأبعاد. يتضمّن Material 3 تصميمات ومكوّنات محدّثة وميزات تخصيص Material You، مثل الألوان الديناميكية، وهي مصممة لتكون متناسقة مع النمط المرئي الجديد في Android 12 وواجهة مستخدم النظام. |
compose.runtime | الوحدات الأساسية لنموذج برمجة Compose وإدارة الحالة، ووقت التشغيل الأساسي للمكوّن الإضافي Compose Compiler لاستهدافه. |
compose.ui | يلزم استخدام المكونات الأساسية لواجهة المستخدم الإنشاء للتفاعل مع الجهاز، بما في ذلك التخطيط والرسم والإدخال. |
تعريف التبعيات
لإضافة تبعية إلى Compose، يجب إضافة مستودع Google Maven إلى مشروعك. يمكنك الاطّلاع على مستودع Maven الذي يضم أدوات Google للحصول على مزيد من المعلومات.
أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle
لتطبيقك أو وحدتك:
رائع
dependencies { implementation "androidx.compose.runtime:runtime:1.5.4" implementation "androidx.compose.runtime:runtime-livedata:1.5.4" implementation "androidx.compose.runtime:runtime-rxjava2:1.5.4" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.5" } kotlinOptions { jvmTarget = "1.8" } }
لغة Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.5.4") implementation("androidx.compose.runtime:runtime-livedata:1.5.4") implementation("androidx.compose.runtime:runtime-rxjava2:1.5.4") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.5" } kotlinOptions { jvmTarget = "1.8" } }
ولمزيدٍ من المعلومات عن التبعيات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين 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 على هذه الالتزامات.
إصلاح الأخطاء
- تم تثبيت الاعتماديات على الإصدارات الثابتة المتوافقة (أي وقت تشغيل الإنشاء وتتبُّع الأداء): إصلاح مشكلة تتعلّق بتتبُّع وقت تشغيل الإنشاء يؤدي إلى ظهور إصدار أحدث من وقت تشغيل الإنشاء في التطبيق.
الإصدار 1.0.0-alpha04
23 آب (أغسطس) 2023
تم إصدار "androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
". يحتوي الإصدار 1.0.0-alpha04 على هذه الالتزامات.
الميزات الجديدة
- يتوافق التطبيق مع أحدث إصدارات مقياس الأداء وتطبيق Perfetto، ما يوفّر إمكانية استخدام ميزة "تتبُّع المقطوعة الموسيقية" عند بدء تشغيل التطبيق (بدايةً على البارد)، مثلاً في مقياس AndroidX و"استوديو Android" (بدءًا من إصدار Hedgehog Beta 2).
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية
androidx.tracing.perfetto.Trace
إلىandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - جعل تتبُّع Perfetto SDK لواجهات برمجة التطبيقات المتوافقة مع
android.os.Trace
(I73ba0، b/282199917) - المتطلبات الأساسية للتتبّع عند بدء تشغيل التطبيق (Iad890)
- تم دمج ملفات واجهة برمجة التطبيقات التجريبية والعامة (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.6
الإصدار 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 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- نشر قيم استقرار معينة في التعليق التوضيحي. (274a4c)
إصلاح الأخطاء
- استخدام السياسة المرجعية لحالة النطاق المحلي للتكوين في السياق. (83361c)
- منع الالتقاط بدون قصد (acfca0)
- أصلِح المحتوى القابل للنقل الذي يتم أحيانًا اختيار تركيب غير صحيح للمقطوعة الموسيقية. (035cd6)
- استخدام خرائط تجزئة أسرع لا يتم تخصيصها في
RecomposeScopeImpl
(d79494) - يمكنك استخدام
ObjectIntMap
فيDerivedState
. (21862e) - يمكنك استخدام
IntRef
للعدد الصحيح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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم الآن وضع علامة
RandomAccess
علىSnapshotStateList
لتفعيل إصدار الفهرسة المباشر لأدوات مساعدة القائمة. (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)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة لإيقاف
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)
- تم وضع علامة
@ExplicitGroupsComposable
علىSideEffect
لتجنُّب إنشاء مجموعة. (I74815) - تجنُّب مقارنة الخرائط المحلية للمقطوعات الموسيقية عند إعادة الاستخدام (782071)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة حمل زائد لحالة خاصة لـ
CompositionLocalProviders
والذي يتجنب النفقات العامة المستخدمة لجعل توفير قيم متعددة أسرع مع زيادة النفقات عند توفير قيمة واحدة. (I6d640، b/288169379)
إصلاح الأخطاء
- إصلاح تسرّب الذاكرة في جدول الخانة (73fcfe)
- إصلاح كيفية استعادة
rememberSaveable
عندما تعرضstateSaver
قيمة فارغة (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة عمليات التوزيع في إعادة التركيب والرسوم المتحركة للألوان و
AndroidComposeView
. (Ib2bfa) - تمت إضافة تعليق توضيحي
@StateFactoryMarker
لوضع علامة على الدوال التي تنشئ حالات ويجب أن يتم تضمينها في استدعاءremember
. (I64550) - إضافة الإصدارات الأساسية من State و
MutableState
(fb3d89) - تمت إضافة
Snapshot.isApplyObserverNotificationPending
(I672a5). - تمت إضافة إصدارات أولية من واجهة برمجة التطبيقات
State
، ما يسمح بتتبُّع قيم Int وlong وFloat وDouble في عناصرState
بدون فرض عقوبات على العلبة التلقائية. لاستخدام طريقتَي المصنع الجديدتين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) - تنفيذ عمليات استدعاء إلغاء التفعيل للحساب
LayoutNode
قبل التخلص من التأثيرات 3784073 - إصلاح المشاكل التي تم تغييرها في ملف lambdas الذي أُعيد تشغيله ea81df9
- إصلاح التراجع المباشر للتعديلات في ميزة Composable ذات العُقد 73fd4d8
- يجب أن توقف ON_STOP عمليات بث ساعة الإطار مؤقتًا بدلاً من تركيبها ae276f1
- إلغاء صلاحية نطاقات
SnapshotStateObserver
للحالات المشتقّة التي لم يتم تغييرها 84d9b1c - إصلاح العوائق التي قد تتوقّف عند التخلص من المقطوعات الموسيقية 28761fc
- إصلاح عملية نقل المحتوى إلى تركيبة فرعية 92d4156
- إصلاح العلامات التي تم تغييرها لـ lambdas التي تمت إعادة تشغيلها (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()
إلى الأنواع المتخصّصة المقابلة لها في المجموعة الأولية. معرِّف لينت هوAutoboxingStateCreation
. في السابق، كان يتم تفعيل هذا الفحص تلقائيًا لجميع المشاريع. للاطّلاع على هذا التحذير في محرِّر "استوديو Android" ونتائج المحتوى غير المرغوب فيه الخاصة بمشروعك، عليك تغيير درجة الخطورة من "حالة" إلى تحذير (أو أعلى) من خلال تعريف السمةwarning "AutoboxingStateCreation"
ضمن إعدادات Build.grale أو Build.grale.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 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة عمليات التوزيع في إعادة التركيب والرسوم المتحركة الملونة و
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)
- تنفيذ عمليات استدعاء إلغاء التفعيل للحساب
LayoutNode
قبل التخلص من التأثيرات (8b0fa4)
المساهمة الخارجية
- تمت إضافة
Snapshot.isApplyObserverNotificationPending
(I672a5).
الإصدار 1.5.0-alpha04
10 أيار (مايو) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.5.0-alpha04
". يحتوي الإصدار 1.5.0-alpha04 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة إصدارات أولية من واجهة برمجة التطبيقات
State
، ما يسمح بتتبُّع قيم Int وlong وFloat وDouble في عناصرState
بدون فرض عقوبات على العلبة التلقائية. لاستخدام طريقتَي المصنع الجديدتين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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- ستحظر الآن أداة إعادة الإنشاء التي تم إنشاؤها لنافذة Android المكالمات الواردة إلى
withFrameNanos
فقط بدلاً من حظر كل المقطوعة الموسيقية عندما تتلقّى إشعار ON_STOP. ويعني هذا أنّ النوافذ المرتبطة بالأنشطة المتوقفة ستواصل إعادة إنشائها عند حدوث تغييرات في البيانات، ولكن سيتم حظر الصور المتحركة أو أي متصل آخر بـ "withFrameNanos
". (Id9e7f، b/240975572)
إصلاح الأخطاء
- حلّ مشكلة التوقف المؤقت المحتملة في قائمة اللقطات والخريطة 5c1a425
- تنفيذ عمليات استدعاء إلغاء التفعيل للحساب
LayoutNode
قبل التخلص من التأثيرات 3784073 - إصلاح المشاكل التي تم تغييرها في ملف lambdas الذي أُعيد تشغيله ea81df9
- إصلاح التراجع المباشر للتعديلات في ميزة Composable ذات العُقد 73fd4d8
- يجب أن توقف ON_STOP عمليات بث ساعة الإطار مؤقتًا بدلاً من تركيبها ae276f1
- إلغاء صلاحية نطاقات
SnapshotStateObserver
للحالات المشتقّة التي لم يتم تغييرها 84d9b1c - إصلاح العوائق التي قد تتوقّف عند التخلص من المقطوعات الموسيقية 28761fc
- إصلاح عملية نقل المحتوى إلى تركيبة فرعية 92d4156
الإصدار 1.5.0-alpha02
5 نيسان (أبريل) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.5.0-alpha02
". يحتوي الإصدار 1.5.0-alpha02 على هذه الالتزامات.
الميزات الجديدة
- يمكن الآن أن يكون عامل تشغيل
getValue
في Kotlin قابلاً للإنشاء (f174f6e).
إصلاح الأخطاء وتحسينات على الأداء
- استبدال سجلات كائنات الحالة بسجلات حالة يتعذّر الوصول إليها (c986960)
- استخدام منشئ النطاق الصحيح عند إنشاء المجموعات (9a5e5b6)
- إصلاح
endToMarker()
عند إنهاء مجموعات العُقد. (d71d980) - استخدِم مجموعة
SlotWriter
الحالية للتأكّد من إيقاف الميزة (a0b518b). - استخدام
IdentityArraySet
لتخزين عمليات إلغاء صلاحية اللقطة (7f60cca) - إزالة
fill
فيSlotTable.moveSlotGapTo()
ونقلها لإغلاقها (81f9935) - إصلاح حالات عدم صحة البيانات المفقودة أثناء نقل المحتوى القابل للنقل (1d7c024)
- إصلاح عمليات الإبطال الفورية للمحتوى القابل للنقل (8676618)
- تقليل التخصيصات لملاحظات اللقطات (5bc535f)
الإصدار 1.5.0-alpha01
22 آذار (مارس) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.5.0-alpha01
". يحتوي الإصدار 1.5.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- تتم إضافة
Modifier.Node#coroutineScope
للسماح لـModifier.Nodes
بتشغيل الكوروتينات (I76ef9). - السماح لـ
Modifier.Nodes
بقراءة محتوىCompositionLocals
من خلال تنفيذ واجهةCompositionLocalConsumerModifierNode
(Ib44df)
الإصدار 1.4
الإصدار 1.4.3
3 أيار (مايو) 2023
تم إصدار androidx.compose.runtime:runtime-*:1.4.3
بدون أي تغييرات.
الإصدار 1.4.2
19 نيسان (أبريل) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.4.2
". يتضمّن الإصدار 1.4.2 هذه الالتزامات.
إصلاح الأخطاء
إصلاح التوقُّف المُحتمَل في قائمة اللقطات والخريطة 2eb6570
في حال إضافة محتوى إلى
SnapshotStateList
أوSnapshotStateMap
، يمكن أن يؤدي ذلك إلى حدوث مشكلة في حال كان التعديل متزامنًا مع عملية نقل مباشرة إلى سجلّ الحالة. وقد زاد احتمال حدوث ذلك بشكل كبير مع التغييرات التي أدخلها موقع 93fcae828b والتي تستخدم أسلوب كتابة مباشرة لإصدار السجلات غير المستخدَمة.يتم ترتيب الأقفال الآن بحيث لا يتم مطلقًا أخذ قفل الشاشة عند الضغط على خريطة أو قفل قائمة.
الإصدار 1.4.1
5 نيسان (أبريل) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.4.1
". يتضمّن الإصدار 1.4.1 هذه الالتزامات.
إصلاح الأخطاء
- إصلاح
endToMarker()
عند إنهاء مجموعات العُقد. d71d980
الإصدار 1.4.0
22 آذار (مارس) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.4.0
". يحتوي الإصدار 1.4.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 1.3.0
- استخدام القيمة المبدئية من
LiveData
للمقطوعة الأولى 3680e25 - أضِف
ComposeNodeLifecycleCallback
لمراقبة دورة حياة عُقد الإنشاء. 8b6a258 - إضافة السمة "
parameterTypes
" إلىComposableMethod
7b6c7ad
إصلاح الأخطاء وتحسينات على الأداء
- محو فهرسَي النطاقات في
SnapshotStateObserver
29f4a3e - إضافة المجموعات المطلوبة في نص lambdas غير القابلة للتخطي 7d06752
- تحسين خصائص المرجع في الذاكرة لحالة اللقطة 93fcae8
- إزالة الملاكمة في عمليات البحث المحلي 0875717
- استخدِم المفتاح الصحيح لمجموعات العُقد غير القابلة لإعادة الاستخدام 6388d8d.
- حماية
SnapshotStateObserver
من التطبيقات التكرارية والمتزامنة مع 98cb6ba - تمت إضافة فحص لحدود فهرس الاختبار في طريقة "get"
IdentityArraySet
35a77d3. - تحديث وحدة الإنشاء لاستخدام إضافات
ViewTreeLifecycleOwner
21c2122 - إرسال إشعارات التطبيق بعد انتهاء إعادة إنشاء الإطار 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 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- المزيد من نوع/قابلية إبطال الدوال المضمنة/التي تم إيقافها نهائيًا (I24f91)
الإصدار 1.4.0-alpha04
11 كانون الثاني (يناير) 2023
تم إصدار "androidx.compose.runtime:runtime-*:1.4.0-alpha04
". يحتوي الإصدار 1.4.0-alpha04 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- يستخدم
TestMonotonicFrameClock
الآن التعليق التوضيحي التجريبي الصحيح. (I95c9e)
إصلاح الأخطاء
- حماية
SnapshotStateObserver
من التطبيقات المتكررة والمتزامنة (d902fb)
الإصدار 1.4.0-alpha03
7 كانون الأول (ديسمبر) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.4.0-alpha03
". يحتوي الإصدار 1.4.0-alpha03 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- إضافة طريقة علنية جديدة إلى فئة
ComposableMethod
مشابهة لـjava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
إصلاح الأخطاء
- يتم الآن إرسال الإشعارات الخاصة بتطبيق اللقطة بعد انتهاء
Recomposer
من تطبيق التغييرات. (Iad6c0، b/222093277)
الإصدار 1.4.0-alpha02
تشرين الثاني (نوفمبر) 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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم الآن تنفيذ
toList()
وtoMap()
بشكل واضح لكل منSnapshotStateList
وSnapshotStateMap
، وباحترام. تعرِض هذه الطرق المحتوى الحالي بدون إجراء نسخة عند عرض البيانات الداخلية غير القابلة للتغيير المستخدَمة في تخزين المحتوى. يمكن استخدام هذه القيمة، على سبيل المثال، لإنشاء تدفق من القيم باستخدام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
تشرين الثاني (نوفمبر) 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
التعامل مع الاستثناء / الدعم المباشر للتعديل
- لإتاحة التعديل المباشر بشكل أفضل، تمّت إضافة واجهات برمجة التطبيقات من أجل معالجة الاستثناءات أثناء إنشاء المحتوى.
- معالجة أخطاء التركيبة عند إعادة التحميل السريع
- التعامل مع أخطاء التعديل المباشرة عند الحفظ/الاستعادة
تتبُّع المقطوعات الموسيقية
- تمت إضافة واجهات برمجة تطبيقات تتبُّع وقت التشغيل لإتاحة الأدوات الجديدة الخاصة بتتبُّع المقطوعات الموسيقية.
- إنشاء طلبات بدء أو إنهاء حدث تتبُّع يمكن إنشاؤه
- إعادة إضافة ComposerKt.traceEventStart(Int, String)
واجهات برمجة تطبيقات التأمل القابلة للإنشاء
- تمت إضافة واجهة برمجة تطبيقات
ComposableMethod
جديدة للسماح باستدعاءات أكثر موثوقية مستندة إلى الانعكاس لواجهات برمجة التطبيقات التي تم إنشاؤها. - نقل invokeComposable إلى مدة تشغيل لإنشاء الرسائل
- إعادة العمل على واجهة برمجة التطبيقات لاستدعاء طريقة قابلة للتعديل
إصلاحات في وقت التشغيل
- إصلاح خطأ في اختبار النطاق للتحقّق من العلامات في جدول الخانات
- السماح للمحتوى القابل للنقل بالانتقال إلى SubcomposLayout وخارجه
- حل مشكلة نقل المحتوى إلى محتوى جديد من تركيبة فرعية
نظام اللقطات
- حصل نظام اللقطات على تحسينات مختلفة بشأن إدارة الذاكرة والأداء وصحة البيانات.
- تحسين عملية إزالة النطاق في SnapshotStateMonitorer
- تخلَّص من اللقطات المدمجة التي تم إنشاؤها من لقطات شفافة
- إصلاح حالة السباق عند قراءة الحالة من اللقطة الشاملة
- دعم DerivedState في SnapshotStateMonitorer
- منع إزالة الحالة المشتقة من التركيبة عند قراءتها في نطاقات أخرى
- استخدام IdentityArrayMap بدلاً من HashMap في DerivedState
- تعديل بيانات مراقبي الحالة المشتقة لاستخدام متّجه قابل للتغيير
- تعديل حالة SnapshotStateMonitorer
- استبدال SnapshotStateMonitorer.لِـ ArraySet
- إصلاح حالة السباق عند قراءة الحالة من اللقطة الشاملة
- إصلاح استخدام سجلّ قديم في حساب تجزئة DerivedState
- إصلاح حالة السباق بشكل أفضل عند تقديم لقطة عالمية
- تسريع تنظيف ملاحظات النطاق في SnapshotStateMonitorer
الإصدار 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 هذه الالتزامات.
إصلاح الأخطاء
- واجهة برمجة التطبيقات المحدَّثة (I64ca0)
الإصدار 1.3.0-beta01
24 آب (أغسطس) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.3.0-beta01
". يتضمّن الإصدار 1.3.0-beta01 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة
find
إلىCompositionData
للسماح لأدوات المطوّرين التي تستخدم واجهة برمجة التطبيقات هذه بالعثور سريعًا على مجموعة فرعية من المقطوعات الموسيقية باستخدام هويتها. (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة إضافة
ComposerKt.traceEventStart(Int, String)
للتوافق مع الأنظمة القديمة (I6e6de)
الإصدار 1.3.0-alpha01
29 حزيران (يونيو) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.3.0-alpha01
". يحتوي الإصدار 1.3.0-alpha01 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- نقل وظائف الأداة إلى وقت التشغيل (I4f729)
الإصدار 1.2
الإصدار 1.2.1
10 آب (أغسطس) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.2.1
". يتضمّن الإصدار 1.2.1 هذه الالتزامات.
إصلاح الأخطاء
- تسرّب الذاكرة الثابت: التخلص من اللقطات المتداخلة التي تم إنشاؤها من لقطات شفافة b/239603305
الإصدار 1.2.0
27 تموز (يوليو) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.2.0
". يحتوي الإصدار 1.2.0 على هذه الالتزامات.
تغييرات مهمة منذ 1.1.0
اشتمل وقت تشغيل Compose على مجموعة من الميزات التي تم تقديمها في الإصدار 1.2.0، بالإضافة إلى العديد من إصلاحات الأخطاء المتعلقة بالتثبيت. كانت أهم ميزة جديدة هي مقدمة عن
movableContentOf
واجهة برمجة التطبيقات، والتي يمكن استخدامها لتفعيل تجربة المستخدم المعقّدة، مثل عمليات انتقال العناصر المشتركة. تحوِّل واجهة برمجة التطبيقاتmovableContentOf
دالة lambda المركبة إلى دالة lambda التي تنقل حالتها والعُقد المقابلة إلى أي موضع جديد يتم استدعائها. عندما تغادر الاستدعاء السابقة التركيبة، يتم الاحتفاظ بالحالة مؤقتًا وإذا دخلت استدعاء جديد إلى lambda، فتنتقل الحالة والعُقد المرتبطة بها إلى موقع الاستدعاء الجديد. في حال عدم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا وتذكّر أنّه يتم إشعار المراقبين.إذا تم استدعاء دالة
movableContentOf
lambda عدة مرات في التركيبة نفسها، يتم إنشاء حالة وعُقد جديدة لكل استدعاء، وعندما تغادر المكالمات التركيبة وتدخل المكالمات الجديدة، يتم نقل الحالة من الطلبات المغادِرة الأولى إلى الطلبات المدخلة بترتيب استدعائها. تتم إزالة جميع الولايات التي لم تتم المطالبة بها من خلال المكالمات الجديدة نهائيًا.وبالإضافة إلى هذه الميزة وبعض الميزات الجديدة الأخرى، تم قضاء الكثير من الوقت في تثبيت نظام التشغيل وحالة اللقطة. تمت إزالة العديد من تسرُّب الذاكرة وتحسين مسارات الرموز.
يمكن الاطّلاع على قائمة مختصرة بالتغييرات في ما يلي:
ميزات جديدة في 1.2
- إضافة لقطة تجريبية غير آمنة Enter/مغادرة
- إضافة واجهة برمجة التطبيقات التجريبية Snapshot.asContextElement
- تقديم Snapshot.بدون قراءة الملاحظة
- السماح بنقل الحالة ضمن المقطوعة الموسيقية
- التدريب على إعادة التركيبات في الكتابة
الأداء في 1.2
- تحسين الأداء المحلي للمقطوعة الموسيقية
- يجب اشتقاق الملفات الشخصية المرجعية لإنشاء المحتوى باستخدام مقاييس الأداء.
إصلاح الأخطاء في 1.2
- إزالة معلومات التتبّع من نطاقات إعادة تركيب النطاقات
- منع إزالة الحالة المشتقة من التركيبة عند قراءتها في نطاقات أخرى
- استخدام طريقة أكثر فاعلية removeScope() في SnapshotStateMonitorer
- معالجة تبعيات الحالة المشتقة في التركيبة
- إصلاح مشكلة تغيير العنوان الحالي المركّب لمفتاح التشفير بعد إعادة التركيب الداخلي داخل المحتوى القابل للنقل
- إزالة المقطوعات الموسيقية التي تم إبطال صلاحيتها أثناء التخلص منها
- معالجة قراءة حالة الاشتقاق أثناء إعادة التركيب
- إصلاح تسرّب الذاكرة عند مراقبة عناصر الحالة التي تم اشتقاقها
- إصلاح مفتاح التجزئة المركّب 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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم إنشاء الواجهات في مكتبات الإنشاء الآن باستخدام طرق الواجهة الافتراضية في 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!
تغييرات واجهة برمجة التطبيقات
- تمت إضافة الإصدار التجريبي من
Snapshot.unsafeEnter/unsafeLeave
(I108f3). - تمت إضافة واجهة برمجة تطبيقات
Snapshot.asContextElement()
التجريبية (Iff072) - يمكن الآن استخدام تعليقات
@ComposableTarget
التوضيحية والتعليقات التوضيحية التي تم تمييزها بعلامة@ComposableTargetMarker
على نطاق الملف باستخدام البادئة@file
. سيؤدي استخدام تعليق توضيحي مستهدف في نطاق الملف إلى افتراض المحول البرمجي في أن جميع الدوال القابلة للتكوين في الملف تهدف إلى استهداف التطبيق المرتبط. على سبيل المثال، يشير استخدام@file:UiComposable
إلى أنّ جميع دوال@Composable
تستهدف تطبيق Compose UI. يجب أن توفر الدالة التي تحتاج إلى استهداف تطبيق آخر بشكل صريح التعليق التوضيحي لعلامة الهدف مع التطبيق المطلوب. (I40804)
الإصدار 1.2.0-alpha08
20 نيسان (أبريل) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.2.0-alpha08
". يحتوي الإصدار 1.2.0-alpha08 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
TracingInProgress
إلى واجهةCompositionTracer
. (Ic6f12) - إضافة
recomposeScopeIdentity
إلى Composer (I0c873) - واجهات برمجة تطبيقات التتبُّع المحدودة (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة الدالة الجديدة
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 1.6.0 (I3366d).
الإصدار 1.2.0-alpha04
23 شباط (فبراير) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.2.0-alpha04
". يحتوي الإصدار 1.2.0-alpha04 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
تمت إضافة
ComposableTarget
وComposableTargetMarker
وComposableOpenTarget
، وهي ميزة تتيح إعداد تقارير وقت التجميع للحالات التي تُسمّى فيها وظيفة قابلة للتكوين استهداف تطبيق لم يتم تصميمه لاستخدامه.في معظم الحالات، يمكن استنتاج التعليقات التوضيحية بواسطة المكوِّن الإضافي لإنشاء التجميع، لذا يجب أن يكون استخدام هذه التعليقات التوضيحية مباشرةً نادر الحدوث . والحالات التي لا يمكن استنتاجها تشمل إنشاء واستخدام محرِّر مخصّص أو دوال مجرّدة قابلة للتعديل (مثل طرق الواجهة) أو حقول أو متغيرات عمومية يمكن إنشاؤها (يتم استنتاج المتغيرات والمعلَمات المحلية) أو عند استخدام
ComposeNode
أو دوال ذات صلة قابلة للتعديل.بالنسبة إلى التطبيقات المخصّصة، يجب إضافة تعليق توضيحي بشأن
CompoableTarget
الدوال القابلة للتعديل والتي تستدعيComposeNode
أوReusableComposeNode
للدالة وأي أنواع من مَعلمات 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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
تمت إضافة دالة
movableContentOf
التي تحوِّل دالة lambda المركبة إلى دالة lambda التي تنقل حالتها والعُقد المقابلة لها، إلى أي موقع جديد يتم استدعائها. عندما تغادر المكالمة السابقة المقطوعة الموسيقية، يتم الاحتفاظ بالحالة مؤقتًا وإذا دخلت مكالمة جديدة إلى دالة lambda، يتم نقل الحالة والعُقد المرتبطة بها إلى موقع المكالمة الجديدة. إذا لم تتم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا وتذكر أنه يتم إبلاغ المراقبين.إذا تم استدعاء دالة
movableContentOf
lambda عدة مرات في البنية نفسها، يتم إنشاء حالة وعُقد جديدة لكل استدعاء، وعندما تخرج المكالمات من التركيبة وتدخل المكالمات الجديدة، يتم نقل الحالة من أول استدعاءات الخروج إلى الطلبات المدخلة بترتيب استدعائها. تتم إزالة جميع الولايات التي لم تتم المطالبة بها من خلال المكالمات الجديدة نهائيًا. (Ib4850)تمت إضافة واجهة برمجة تطبيقات للتتبّع إلى المقطوعة الموسيقية لإتاحة الأدوات لتوفير تتبُّع أكثر تفصيلاً للدوال التي يمكن إنشاؤها. ينشئ المحوِّل الآن طلبات إلى واجهة برمجة التطبيقات للتتبّع والتي تتضمّن معلومات المصدر. (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة الحقل
identity
إلىCompositionData
لإنشاء معرّفات ثابتة في "أداة فحص التنسيق". (Ic116e)
تعديلات التبعية
- تعتمد هذه الطريقة الآن على لغة
1.6.10
في لغة البرمجة Kotlin.
الإصدار 1.1
الإصدار 1.1.1
23 شباط (فبراير) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.1.1
". يحتوي الإصدار 1.1.1 على هذه الالتزامات.
إصلاح الأخطاء
- إصلاح
NullPointerException
علىandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059، b/206677462) - إصلاح العطل الناتج عن محتوى الحافظة أثناء القراءة من الحافظة على Android. (I06020، b/197769306)
- تنسيق RTL ثابت في
LazyVerticalGrid
(aosp/1931080، b/207510535)
الإصدار 1.1.0
9 شباط (فبراير) 2022
تم إصدار "androidx.compose.runtime:runtime-*:1.1.0
". يحتوي الإصدار 1.1.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 1.0.0
- دعم ثابت لتأثير التمرير الزائد في نظام التشغيل Android 12
- تحسينات على تحديد حجم مساحة اللمس
- تجدر الإشارة إلى أنّه في ما يتعلّق بـ Compose 1.0، ستوسِّع مكوّنات Material من مساحة التنسيق الخاصة بها لاستيفاء إرشادات إمكانية الوصول المتعلّقة بمواد العرض حجم هدف اللمس. على سبيل المثال، سيتم توسيع هدف لمس الزر إلى أدنى حجم يبلغ
48x48dp
، حتى في حال ضبط حجم الزر ليكون أصغر. يؤدي هذا إلى مواءمة Compose Material مع السلوك نفسه لمكونات التصميم المتعدد الأبعاد، مما يوفر سلوكًا متسقًا إذا قمت بمزج طرق العرض والإنشاء. ويضمن هذا التغيير أيضًا استيفاء الحد الأدنى من متطلبات إمكانية الوصول إلى مساحة اللمس عند إنشاء واجهة المستخدم باستخدام مكونات مادة الإنشاء. - دعم ثابت لشريط التنقل
- تم ترقية عدد من واجهات برمجة التطبيقات التجريبية سابقًا إلى القناة الثابتة
- الدعم مع الإصدارات الأحدث من لغة 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 هذه الالتزامات.
الميزات الجديدة
- تم تعديلها لتتوافق مع لغة
1.6.0
في Kotlin.
الإصدار 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 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم تقسيم رمز اللقطة إلى عدة ملفات، ولكن لا تزال جميعها متوفّرة ضمن فئة 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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة
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). قبل إجراء هذا التغيير، كانت أداة تجميع Compose متوافقة فقط مع وقت تشغيل الإنشاء من نفس الإصدار أو الإصدارات الأحدث. بعد هذا التغيير، تتوافق أداة Compose Compiler مع إصدار أقدم من وقت تشغيل Compose (1.0). (aosp/1796968)
- تم تعديل ميزة الإنشاء
1.1.0-alpha03
للاعتماد على لغة البرمجة1.5.30
في Kotlin. (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 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مثيلاتStateOf المستمَدة من تتبُّع الأعطال. (aosp/1792247)
الإصدار 1.0.4
13 تشرين الأول (أكتوبر) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.4
". يحتوي الإصدار 1.0.4 على هذه الالتزامات.
تعديلات التبعية
- تم تعديل البيانات للاعتماد على لغة
1.5.31
في لغة البرمجة Kotlin.
الإصدار 1.0.3
29 أيلول (سبتمبر) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.3
". يحتوي الإصدار 1.0.3 على هذه الالتزامات.
تعديلات التبعية
- تم تعديل البيانات للاعتماد على لغة
1.5.30
في لغة البرمجة Kotlin.
الإصدار 1.0.2
1 أيلول (سبتمبر) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.2
". يحتوي الإصدار 1.0.2 على هذه الالتزامات.
تم التعديل للتوافق مع إصدار الإنشاء 1.0.2
. لا يزال إنشاء 1.0.2
متوافقًا مع لغة البرمجة 1.5.21
بلغة Kotlin.
الإصدار 1.0.1
4 آب (أغسطس) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.1
". يحتوي الإصدار 1.0.1 على هذه الالتزامات.
تعديلات التبعية
- تم تعديلها للاعتماد على لغة
1.5.21
في Kotlin.
الإصدار 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" Bumblebee وAGP7.1
. (b/194289155)
الإصدار 1.0.0-rc02
14 تموز (يوليو) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-rc02
". يحتوي الإصدار 1.0.0-rc02 على هذه الالتزامات.
- تم إصلاح حالات السباق في SnapshotStateMonitorer التي تسبب الخطأ NullPointerExceptions. (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-Formatting
- 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 ...
. تتخذ هذه القواعد أحد شكلين لاستهداف طرق أو فئات.سيكون لقاعدة الطريقة النمط التالي:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
وسيكون لقاعدة الفئة النمط التالي:
<CLASS_DESCRIPTOR>
في هذه الصفحة
<FLAGS>
، يظهر حرف واحد أو أكثر من الأحرفH
وS
وP
للإشارة إلى ما إذا كان يجب وضع علامة على هذه الطريقة باعتبارها "Hot" أو "Startup" (بدء التشغيل) أو "Post Startup" (بدء التشغيل).تمثّل السمة
<CLASS_DESCRIPTOR>
واصف الفئة التي تنتمي إليها الطريقة المستهدَفة. على سبيل المثال، يجب أن تتضمن الفئةandroidx.compose.runtime.SlotTable
واصفًا للسمةLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
هو توقيع الطريقة، ويتضمن الاسم وأنواع المعلمات وأنواع الإرجاع للطريقة. على سبيل المثال، تحتوي الطريقةfun isPlaced(): Boolean
فيLayoutNode
على التوقيعisPlaced()Z
.ويمكن أن تحتوي هذه الأنماط على أحرف بدل (
**
و*
و?
) للحصول على قاعدة واحدة تضم طرقًا أو فئات متعددة.
ماذا تفعل القواعد؟
تشير الطريقة التي تتضمّن العلامة
H
إلى أنّ هذه الطريقة هي طريقة "فعالة"، ويجب تجميعها مسبقًا.تشير الطريقة التي تتضمّن العلامة
S
إلى أنّها طريقة يتم استدعائها عند بدء التشغيل، ويجب تجميعها مسبقًا لتجنّب تكلفة التجميع وتفسير الطريقة في وقت بدء التشغيل.تشير الطريقة التي تتضمّن العلامة
P
إلى أنّها طريقة يتم استدعائها بعد بدء التشغيل.تشير الفئة المتوفّرة في هذا الملف إلى أنّه يتم استخدامها أثناء بدء التشغيل ويجب تخصيصها مسبقًا في كومة الذاكرة المؤقتة لتجنُّب تحمُّل تكلفة تحميل الفئة.
آلية العمل
- يمكن للمكتبات تحديد هذه القواعد التي سيتم تجميعها في عناصر AAR. عند إنشاء تطبيق يتضمن هذه العناصر، يتم دمج هذه القواعد معًا واستخدام القواعد المدمجة لإنشاء ملف شخصي ثنائي مدمج لتطبيق ART وخاص بالتطبيق. ويمكن لـ ART بعد ذلك الاستفادة من هذا الملف الشخصي عند تثبيت التطبيق على الأجهزة من أجل تجميع مجموعة فرعية محددة من التطبيق مسبقًا لتحسين أداء التطبيق، وخاصةً عند التشغيل الأول. وتجدر الإشارة إلى أنّ هذا الإجراء لن يؤثر في التطبيقات التي يمكن تصحيح الأخطاء فيها.
الإصدار 1.0.0-beta08
2 حزيران (يونيو) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-beta08
". يتضمّن الإصدار 1.0.0-beta08 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- أصبح
State<T>
الآنState<out T>
(I69049). ControlledComposition
تغيير في واجهة برمجة التطبيقات لإتاحة إعادة إنشاء التغييرات في تمريرة واحدة قابلة لإعادة الإنشاء. (Iaafd1، b/184173932)
الإصدار 1.0.0-beta07
18 أيار (مايو) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-beta07
". يتضمّن الإصدار 1.0.0-beta07 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهات برمجة تطبيقات جديدة لأداة التحويل البرمجي للإنشاء تسمح بإزالة معلومات المصدر التي تم إنشاؤها بواسطة المحوِّل البرمجي أثناء تصغير المصدر. (Ia34e6)
تقدم السمة
ReusableContent
التي ستحاول إعادة استخدام العُقد في محتواها بدلاً من استبدالها عند تغيير المفتاح. عند تغيير المفتاح، يتم تجاهل القيم السابقة في جدول الخانات للمحتوى باستثناء العُقد التي تم إنشاؤها والقيم المستخدمة لتعديل العُقد.تقدم
ReusableComposeNode
التي ستُعيد استخدام العقدة الخارجية بدلاً من استبدالها كما تم إجراؤها فيComposeNode
. (I1dd86)لم يعُد
@ComposeCompilerApi
@RequiresOptIn
(Iab690)
إصلاح الأخطاء
- سيحافظ الآن مقياس LazyColumn/Row على ما يصل إلى عنصرَين مرئيَين في السابق نشطَين (لم يتم التخلص منهما) حتى في حال تم نقلهما للخارج. ويسمح هذا للمكون بإعادة استخدام التركيبات الفرعية النشطة عندما نحتاج إلى إنشاء عنصر جديد يحسن أداء التمرير. (Ie5555)
الإصدار 1.0.0-beta06
5 أيار (مايو) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-beta06
". يتضمّن الإصدار 1.0.0-beta06 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- لم يعُد
@ComposeCompilerApi
@RequiresOptIn
(Iab690)
الإصدار 1.0.0-beta05
21 نيسان (أبريل) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-beta05
". يتضمّن الإصدار 1.0.0-beta05 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت الإزالة
@InternalComposeApi
لتسجيل عمليات القراءة والكتابة لللقطة (Id134d)
إصلاح الأخطاء
- ملفات AndroidManifest من ui-test-manifest وui-tooling-data متوافقة الآن مع الإصدار 12 من نظام التشغيل Android (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 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف
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 هذه الالتزامات.
إصلاح الأخطاء
- فرض قيود على الاستخدام العام لواجهات برمجة التطبيقات التجريبية (I6aa29، b/174531520)
- إصلاح أعطال
rememberSaveable { mutableStateOf(0) }
عند استخدامها داخل وجهة إنشاء التنقل. (I1312b وb/180042685 وb/180701630)
الإصدار 1.0.0-beta01
24 شباط (فبراير) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-beta01
". يتضمّن الإصدار 1.0.0-beta01 هذه الالتزامات.
هذا هو الإصدار الأول من Compose 1.0.0 التجريبي.
تغييرات واجهة برمجة التطبيقات
- أضِف
Recomposer.runRecomposeConcurrentlyAndApplyChanges
واجهة برمجة تطبيقات تجريبية لإعادة إنشاء المقطوعات الموسيقية التي تم إبطال صلاحيتها من حلقة الإطار الرئيسي. (I342d0) - يتم الآن التحقُّق من وقت التجميع في أي عناصر قابلة للتجميع تم وضع علامة @ReadOnlyComposable عليها لضمان أنّها لا تجري سوى مكالمات إلى عناصر @ReadOnlyComposables الأخرى (I58961).
إنّ السمة
defaultFactory
فيcompositionLocalOf
وstaticCompositionLocalOf
مطلوبة الآن بدلاً من أنّها اختيارية.تؤدي هذه التغييرات إلى إزالة خطأ النوع المحتمل للأنواع غير القابلة للقيم التي لم يتم توفير مصنع تلقائي فيها. كان هذا في السابق يوفر مرجعًا فارغًا لنوع غير قابل للقيم الفارغة.
بالنسبة إلى الأنواع القابلة للقيم الفارغة، يمكنك تقديم
{ null }
كمعامل تلقائي.لا ننصح باستخدام الأنواع المحلية غير القابلة للقيم الفارغة ما لم يتم توفير طريقة تلقائية معقولة. في حال عدم توفُّر إعدادات تلقائية معقولة، يجب أن تعرض دالة
defaultFactory
lambda استثناء. ومع ذلك، فإنّ طرح استثناء يعني أنّ المستهلكين المحليين سيعتمدون بشكل ضمني على المنتجات التي يتم تقديمها ولا يتم فرضها من خلال نظام النوع. (Ifbd2a)تمت إزالة الرموز التي تم إيقافها نهائيًا من وقت تشغيل الإنشاء (I3252c).
تمت إزالة
emptyContent()
المتوقف نهائيًا. يمكنك استخدام{}
كبديل. (Idb33f، b/179432510)تمت إعادة تسمية مقدّمي الخدمات إلى MembershipLocalProvider.
- لم تعُد الدالة الإنشائية للمقطوعة الموسيقية تقبل مَعلمة رئيسية، وقد تم إيقافها نهائيًا.
- تم تحويل ترميز Currents المُركّب إلى سمة من المستوى الأعلى بدلاً من دالة المستوى الأعلى المركّبة.
- تم نقل بيانات التركيبة والمقطوعة الموسيقية إلى مساحة الاسم androidx.compose.runtime.tooling.
- تم تصميم ComposableLambda كواجهة بدلًا من فئة ملموسة، ولم تعد تحتوي على معلمات النوع.
- تم تصميم ComposableLambdaN كواجهة بدلًا من فئة ملموسة، ولم تعد تحتوي على معلمات النوع.
- تم نقل دالة drawFlow إلى مساحة الاسم androidx.compose.runtime.
- لم تعُد طريقة دمج SnapshotMutationPolicy تجريبية
- تمت إزالة دالة @TestOnly في المستوى الأعلى clearRoots. لم يعد من الضروري.
- تمت إزالة الدالتين keySourceInfoOf وresetSourceInfo. لم تعد ضرورية.
- تمت إزالة Composer.collectKeySourceInformation. لم يعد من الضروري.
- تمت إزالة طرق isJoinedKey وjoinKeyLeft وjoinKeyRight. لم تعد ضرورية.
- تم نقل العديد من واجهات برمجة التطبيقات ذات المستوى الأعلى وإعادة تنظيمها في ملفات مختلفة. ونظرًا لدلالات فئة ملف Kotlin، سيؤدي ذلك إلى إيقاف التوافق الثنائي وليس توافق المصدر، لذلك من المفترض ألا تكون مشكلة بالنسبة إلى معظم المستخدمين.
- (I99b7d، b/177245490)
لم يعُد SnapshotStateMonitorer تجريبيًا بعد الآن (Id2e6a)
حذف بعض واجهات برمجة التطبيقات التي تم إيقافها سابقًا (Ice5da، b/178633932)
تم إجراء التغييرات التالية في Material API:
- تمت إضافة مَعلمة contentPadding إلى Top/BottomAppBar للسماح بتخصيص المساحة المتروكة التلقائية.
- المَعلمات المُعاد ترتيبها في BackdropScaffold لاتّباع إرشادات واجهة برمجة التطبيقات للمعلَمات المطلوبة التي تكون قبل المَعلمات الاختيارية.
- تم نقل المعلَمة
icon
في BottomالتنقلItem إلى ما بعدselected
وonClick
. - تمت إعادة تسمية المعلَمة
alwaysShowLabels
في Bottom NavigationItem إلىalwaysShowLabel
. - تمت إعادة تسمية المعلَمات
bodyContent
في بعض المكوّنات لتصبحcontent
فقط. - المَعلمات المُعاد ترتيبها في
ButtonDefaults.buttonColors()
تجدر الإشارة إلى أنّ نوع المَعلمات لم يتغيّر ولن يتسبب في حدوث خطأ في الرمز. يُرجى التأكّد من استخدام المَعلمات المُسمّاة أو تعديل الترتيب يدويًا، وإلا لن يعمل الرمز بالطريقة نفسها كما كان في السابق. - تمت إضافة مَعلمة
secondaryVariant
إلىdarkColors()
. عادةً ما يكون هذا اللون هو نفسهsecondary
في المظهر الداكن، ولكن لتحقيق التناسق والمزيد من التخصيص. - تمت إزالة ElevationDefaults وanimateElevation() من سطح واجهة برمجة التطبيقات العامة لأنهما لم يتم استخدامهما بشكل شائع أو مفيدين.
- تمت إعادة تسمية
onValueChangeEnd
فيSlider
إلىonValueChangeFinished
وجعلها قابلة للقيم الفارغة. - تمت إعادة تسمية المعلَمة
text
فيSnackbar
إلىcontent
لتحقيق التناسق. - تمت إضافة المعلمة
contentPadding
إلىDropdownMenuItem
للسماح بتخصيص المساحة المتروكة التلقائية وجعلcontent
إضافة فيRowScope
. - تمت إعادة تسمية
ModalDrawerLayout
إلىModalDrawer
. - تمت إعادة تسمية
BottomDrawerLayout
إلىBottomDrawer
. - (I1cc66)
الإصدار 1.0.0-alpha12
10 شباط (فبراير) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-alpha12
". يحتوي الإصدار 1.0.0-alpha12 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة دعم ViewGroups من UiApplier. تمت إزالة مواد emitView التي تم إيقافها نهائيًا. (Ifb214)
- تمت إعادة تسمية التركيبة الموسيقية إلى تكوين Context (I53fcb).
- تم نقل ComponentActivity.setContent إلى androidx.activity.compose.setContent في وحدة androidx.activity:activity-compose. (Icf416)
- تم تحديث Snapshot API ليكون أكثر تناسقًا مع إرشادات واجهة برمجة التطبيقات، بالإضافة إلى إخفاء فئات التنفيذ الداخلية من واجهة برمجة التطبيقات العامة. (Id9e32)
- تمت إعادة تسمية "وضع الإضاءة السينمائية" لتتناسب مع إعادة تسمية "وضع الاستراحة" -> تكوين محلية. كان يُطلق اسم "أمبيانت" على البيئة المحيطة، أما الآن يُطلق اسم EnvironmentLocals على اسم LocalFoo. (I2d55d)
- تمت إعادة تسمية "بي أم بي" لتصبح "مقطوعة موسيقية"، و"أجواءفو من / ثابت نافيمن" إلى "التركيبة المحلية من / ثابت التركيبة" على التوالي. من خلال إجراء هذا التغيير، بات الغرض من استخدام AnalyzeLocal أكثر وضوحًا من خلال توفير آلية لتقديم أو استرداد القيم المحلية في مقطوعة موسيقية معيّنة. يجب أن تبدأ المثيلات المحلية من MaterialFoo بـ
Local
، مثل val LocalFoo = composeLocalOf { Foo() }. (Ia55b6) - وأخذ عيّنة (I91f19)
تم إيقاف واجهة برمجة التطبيقات
@ComposableContract
نهائيًا ليحلّ محلّها ثلاثة تعليقات توضيحية أكثر تحديدًا.أصبح
@ComposableContract(restartable = false)
@NonRestartableComposable
@ComposableContract(readonly = true)
أصبح@ReadOnlyComposable
@ComposableContract(preventCapture = true)
تمت إزالة@DisallowComposableCalls
@ComposableContract(tracked = true)
. (I60a9d)تم إيقاف الأدوات المساعدة الفارغةContent() و (@Composable () -> Unit).orفارغ() لأنّه لم تعُد لها أي قيمة أو تأثير إيجابي في الأداء (I0484d).
لم يعُد
snapshotFlow
وwithMutableSnapshot
تجريبيَين (I6a45f).يمكن الآن إغلاق أدوات إعادة الضبط. ستستمر أدوات إعادة الإنشاء المغلقة في إعادة الإنشاء حتى اكتمال تكوين الكوروتينات الثانوية. تمت إعادة تسمية Recomposer.shutDown لإلغاء التبديل مع وضع الإغلاق. (Ib6d76)
تم إيقاف عنصر
compose:runtime-dispatch
نهائيًا. يمكن الآن العثور على MonotonicFrameClock في الحقل compose:runtime ويمكن العثور على AndroidUiDispatcher في compose:ui. (Ib5c36)تمت إعادة هيكلة واجهة برمجة التطبيقات التي يستهدفها المكوِّن الإضافي Compose لاستخدام واجهة بدلاً من فئة ملموسة. لم تعد الواجهة تستخدم معلمة type بعد الآن.
هذا تغيير داخلي من المفترض ألا يؤثر في توافق رمز المصدر ولكنه تغيير عطل ثنائي. (I3b922، b/169406779)
تم تقديم SnapshotMutableState (Icfd03)
تمت إعادة تسمية DisposaleEffectDisposable إلى DisposaleEffectResult (Ica7c6)
تمت إزالة Recomposer.current(). [Abstract]ComposeView الآن يتم ضبطه تلقائيًا على أدوات إعادة الإنشاء التي تم إنشاؤها باستخدام طريقة كسول والتي يتم إنشاؤها على نطاق النافذة استنادًا إلى ViewTreeLifecycleOwner للنافذة. يتم إيقاف علامات الرسوم المتحركة المستندة إلى FrameNanos وإعادة الإنشاء مؤقتًا أثناء إيقاف دورة حياة المضيف. (I38e11)
توفّر Recomposer.runningRecomposers الآن حالة عامة على StateFlow من نوع RecomposerInfo المخصصة للقراءة فقط لمراقبة حالة الإنشاء المستمرة في العملية. أفضّل واجهة برمجة التطبيقات هذه على Recomposer.current() ، والتي تم إيقافها الآن. (If8ebe)
تمت إعادة تسمية DisposaleEffectDisposable إلى DisposaleEffectResult (I3ea68)
الإصدار 1.0.0-alpha11
28 كانون الثاني (يناير) 2021
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-alpha11
". يحتوي الإصدار 1.0.0-alpha11 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف onCommit وonDispose وonActive لتصبح واجهات برمجة تطبيقات SideEffect وDeposableEffect (If760e)
- تم إيقاف واجهة برمجة التطبيقات emit() وجميع الأعباء الزائدة وإعادة تسميتها إلى ComposeNode. واجهات برمجة التطبيقات متطابقة، ولكن ليس لها سوى اسم مختلف لاتّباع اصطلاحات التسمية في Compose (I4137b).
- تم الآن إيقاف الحلّ المستقل والمؤلف من () الدمج ()) الحاليَين لصالح العنصرَين الحاليَّين الحاليَين (currentRecomposeScope) و"تذكُّر حساب التركيب" ( باعث) على التوالي. (I583a8)
يحلّ محل SpeakMonitorer محلّ AssessLifecycleMonitorer وتم الآن إيقاف سيطرته AssessLifecycleMonitorer نهائيًا.
RememberObserver
هي بديل لـCompositionLifecycleObserver
بدلالات معدّلة وطرق تمت إعادة تسميتها. يمكن إجراء التغيير إلى واجهة برمجة التطبيقات الجديدة آليًا للكائنات التي يتم تذكرها مرة واحدة فقط، وهي الممارسة المقترحة ولا تزال. في المقابل، إذا تم تذكّر مرجع معيّن أكثر من مرة في مقطوعة موسيقية معيّنة، سيتم استدعاء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 على هذه الالتزامات.
إحداث تغيير جذري
تتيح إعادة هيكلة واجهة برمجة التطبيقات الخاصة ببرنامج التجميع الداخلي إجراء تغييرات مُجمَّعة على العُقد التي يتم إنشاؤها نتيجة للدمج في مرحلة "تطبيق التغييرات" في عملية الإنشاء، وذلك بعد اكتمال جميع دوال
@Composable
.وهذا تغيير في السلوك قد يؤثر في الرموز البرمجية للتطبيق، لأنّ العُقد لم تعد متاحة من واجهات برمجة التطبيقات الداخلية والتجريبية إلا بعد تطبيق التغييرات. ويمكن عادةً حل هذا الأمر من خلال إحاطة الرمز البرمجي بهذه التبعيات في
SideEffect
القابل لتأجيل تنفيذ الرمز إلى ما بعد إنشاء العُقد وإعدادها. (I018da)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة لتتبع ما إذا كان أداة إعادة الإنشاء قد طبّقت التغييرات. (I1b3e2)
توسيع [Abstract]واجهات برمجة تطبيقات ComposeView للسماح بإعادة تدويرها طريقة العرض المستندة إلى الإنشاء، مع التخلص من المقطوعات الموسيقية لإعادة إنشائها لاحقًا أضِف واجهات برمجة تطبيقات لتثبيت "أدوات إعادة الإنشاء" و"مراجع المقطوعات الموسيقية" على مستوى النافذة واكتشافها لإنشاء مقطوعات موسيقية فرعية.
يمكنك إضافة ViewCreationStrategy لإعداد استراتيجية التخلص من المقطوعات الموسيقية لـ [Abstract]ComposeViews؛ حيث يتم التخلص من السلوك التلقائي عند فصل النوافذ. (I860ab)
إصلاح الأخطاء
- تعرض أداة إعادة الإنشاء الآن تدفقًا لحالتها الحالية، مما يسمح بمراقبة نشاطها ونشاط التأثيرات المرتبطة بها. (Ifb2b9)
- يمكن الآن الوصول إلى keyEvent الأصلي من خلال keyEvent.localizedKeyEvent (I87c57، b/173086397)
الإصدار 1.0.0-alpha09
16 كانون الأول (ديسمبر) 2020
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-alpha09
". يحتوي الإصدار 1.0.0-alpha09 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
تمت إزالة واجهة OpenTable وSlotReader وSlotWriter من واجهة برمجة التطبيقات العامة. تم وضع علامة عليها سابقًا على أنها internalComposeAPI سابقًا. وهي الآن داخلية في وحدة الإنشاء.
تمت إضافة التركيبة والتكوين التركيبة لها كبديل لواجهة برمجة تطبيقات أدوات واجهة المستخدم لاستخراج معلومات حول التركيبة. وتكون هذه البيانات علنية، ولكن ليس الغرض منها استخدامها خارج واجهة برمجة تطبيقات ui-tooling، لأنّها توفر المعلومات الأولية التي تفسرها واجهة برمجة تطبيقات أداة واجهة المستخدم (I31a9c).
لم تعُد فئة Applier تُعتبر (Id85b0)
تم تغيير واجهة
Applier
لتبسيط بناء الأشجار من أسفل إلى أعلى بدلاً من الانتقال من الأعلى إلى الأسفل.تمت إعادة تسمية الطريقة
insert()
لتصبحinsertTopDown()
.تمت إضافة طريقة جديدة، وهي
insertBottomUp()
.يدرج تطبيق التطبيق العُقد في الشجرة التي يعدِّلها باستخدام
insertTopDown()
أوinsertBottomUp()
بناءً على أيهما أفضل أداءً.بعض الأشجار، مثل
LayoutNode
وView
، تكون أكثر فعالية بكثير في الإنشاء من أسفل إلى أعلى من أعلى إلى أسفل. قبل هذا التغيير، كانت هناك حاجة إلى حزمة من الإدخالات لتنفيذ الإجراءات من أسفل إلى أعلى، وبالتالي كان يتعيّن نسخها إلى كل تطبيق يحتاج إلى بنية من أسفل إلى أعلى لتعزيز الأداء. بعد إجراء هذا التغيير، ستلغيApplier
insertBottomUp()
لتشكّل شجرة من أسفل إلى أعلى وinsertTopDown()
لبناء الشجرة من أعلى إلى أسفل. (Icbdc2)يدعم Compose أدوات الحصول على الخصائص التي يمكن أن تنشئ استدعاءات قابلة للإنشاء. لن يتم إيقاف هذه الميزة، ولكن ستتغيّر بنية الإعلان عن دالة getter على أنّها @Composable.
كانت البنية التي تم إيقافها نهائيًا لإجراء ذلك هي من خلال إضافة تعليق توضيحي إلى السمة نفسها:
@Composable val someProperty: Int get() = ...
بناء الجملة الصحيح الآن للقيام بذلك هو من خلال التعليق التوضيحي على القيمة getter للخاصية:
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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة التحقق من الوبر لتحديد تسمية مَعلمات lambda وموضعها للتأكّد من توافقها مع إرشادات الإنشاء.
تم أيضًا نقل بيانات بعض واجهات برمجة التطبيقات باستخدام
children
كاسم لدالة lambda اللاحقة إلىcontent
، وفقًا لعمليات التحقّق من الوبر والإرشادات. (Iec48e) - لم تعد أداة إعادة الإنشاء تقبل embeddingContext، إذ يتم الحصول على التبعيات المطلوبة الجدولة من activityCoroutineContext. تم إيقاف FrameManager، ويجب أن تؤدي عمليات دمج النظام الأساسي إلى تهيئة معالجة اللقطات العامة. (I02369)
- تمت إعادة تسمية الدالة RestorableStateHolder.withRestorableState إلى ا لـ RestorableStateProvider (I66640)
إصلاح الأخطاء
- تم إيقاف ميزات "وضع عدم النشاط" التي تحمل اسم "
Ambient
" كلاحقة لها، واستبدلتها بسمات جديدة مسبوقة بعبارة "وضع عدم النشاط"، وذلك باتّباع إرشادات أخرى حول عناصر المحيط والكتابة في واجهة برمجة التطبيقات. (I33440) - إزالة وحدة اختبار واجهة المستخدم القديمة وملفاتها (I3a7cb)
الإصدار 1.0.0-alpha07
11 تشرين الثاني (نوفمبر) 2020
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-alpha07
". يحتوي الإصدار 1.0.0-alpha07 على هذه الالتزامات.
الميزات الجديدة
تغييرات واجهة برمجة التطبيقات
- تم إيقاف تعليق
@UnionType
التوضيحي (I57cde). - تمت إضافة معلمة توفير افتراضية كبديل لتوفير الإضاءة المحيطة، ويمكن استخدامها لتحديد القيم المحيطة التي سيتم ضبطها فقط عند عدم تحديد قيمة محيطة. (Id6635، b/171024925)
- تمت إعادة تسمية LaunchedTask إلى LaunchedEffect لتحقيق التناسق مع واجهة برمجة تطبيقات SideEffect وDisableEffect. لا يُسمح بـ LaunchedEffect بدون مَعلمات موضوع لتشجيع أفضل الممارسات. (Ifd3d4)
- يحتوي Applier الآن على استدعاءات onStartChanges/onEndChanges للاستجابة التي يتم استدعاؤها عند بدء أو انتهاء Composer من تطبيق التغييرات على الشجرة. ويمكن استخدام هذه البيانات لإدارة الموارد على دفعات إذا لزم الأمر. (Icf476)
- تتطلب أداة إعادة التركيب الآن CoroutineContext في الإنشاء (Ic4610)
- التغييرات التي ستطرأ على طريقة حساب الشرائح الداخلية التي من المفترَض ألا تؤثر في واجهة برمجة التطبيقات العامة. (If9828)
- تمت إزالة محوّلات rxjava2 المتوقفة نهائيًا والتي لا تأخذ القيمة الأولية (Idb72f).
إصلاح الأخطاء
- Foundation.Text تم إيقاف العمل به واستبداله بـmaterial.Text. للحصول على واجهة برمجة تطبيقات خاصة بنص أساسي ولا تستخدم قيمًا من مظهر، يمكنك الاطّلاع على androidx.compose.foundation.BasicText. (If64cb)
- تم إيقاف BaseTextField نهائيًا. يمكنك استخدام BasicTextField بدلاً من ذلك. (I896eb)
- تم نقل العديد من الرموز ذات الصلة بالتنسيق من androidx.compose.ui إلى androidx.compose.caption.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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- أصبح Recomposer الآن مرجعًا للمقطوعة الموسيقية وأصل مؤلف صالح. يجب الآن إعداد "أداة إعادة إنشاء المحتوى الفاضح" في عدد أقل من الأماكن. (I4036f)
- تمت إضافة واجهة برمجة التطبيقات المناظرة لـ DisposableEffect إلى SideEffect، ما أدى إلى ملء دور onCommit-with-params مع إضافة قيمة onDispose مطلوبة.
- تمت إضافة واجهة برمجة التطبيقات cleanUpdateState API لنشر البيانات بدءًا من إعادة الإنشاء إلى العمليات المستمرة أو طويلة الأمد مثل DisposableEffects أو LaunchedTasks.
- (Id50b9)
- يقوم MutableVector الآن بتنفيذ الوصول العشوائي (I85d73، b/170461551)
- تمت إضافة تأثير SideEffect لتطبيق الآثار الجانبية للتركيب على العناصر التي تديرها التركيبة. تم تصميم SideEffect لاستبدال العنصر onCommit القابل للإنشاء. (Ia77c2)
- واجهة برمجة تطبيقات تجريبية جديدة في 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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- معدِّل الإدخال التجريبي "Modifier.pointerInput" (Ia77d2)
- يتم تحسين أداء التمرير في LazyColumn/Row من خلال القيام بجهد أقل في الإنشاء الفرعي في كل تمرير. تمت إضافة طريقة hasInvalidations() لفئة التركيب. تمت إعادة تسمية طريقة hasPendingChanges() من Recomposer إلى hasInvalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371)
- أضف renameState API لإطلاق الكوروتينات من المقطوعة الموسيقية
التي تعدِّل قيمة
State<T>
واحدة بمرور الوقت (Id4a57) - تمت إعادة تسمية changeInconfiguration إلى LaunchedTask لمطابقة إرشادات Compose API (I99a8e).
- يحدد ترتيب استدعاءاتplace() في التخطيطات المخصصة الآن ترتيب الرسم للأطفال (Ibc9f6)
الإصدار 1.0.0-alpha04
1 تشرين الأول (أكتوبر) 2020
تم إصدار "androidx.compose.runtime:runtime-*:1.0.0-alpha04
". يحتوي الإصدار 1.0.0-alpha04 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة OwnerScope للسماح بجمع نطاقات التخطيط ورسم الملاحظة بمجرد أن تصبح غير صالحة. (Ic4cf8)
- تمت إضافة واجهة برمجة التطبيقات المشتقةStateOf API لإنشاء كائنات الحالة استنادًا إلى عملية حسابية قد تقرأ (وتستمد منها) كائنات الحالة الأخرى (If758b).
- تمت إضافة واجهة برمجة التطبيقات TestOnly لـ SnapshotStateMonitorer (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- لم يعُد
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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- أضِف واجهات برمجة التطبيقات
snapshotFlow
وwithMutableSnapshot
لاستخدام تغييرات بيانات "نبذة عني" وإنتاجها. (I3e722) لقد تغير اصطلاح الاستدعاء للدوال المكونة. هذا تغيير عطل ثنائي. يجب إعادة تجميع كل المكتبات للعمل مع هذا الإصدار من المكوِّن الإضافي لإنشاء المحول البرمجي.
لا يؤدي هذا التغيير إلى حدوث تغيير في عطل على مستوى المصدر لأن واجهات برمجة التطبيقات التي تم تغييرها هي فقط واجهات برمجة تطبيقات المحول البرمجي التي تحتوي على موافقة صريحة. (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 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- يمكن أن تشير الانبعاثات المخصّصة الآن إلى أنّه يمكن تخطّي عنصر واحد أو أكثر من أدوات الضبط الخاصة بها وإعادة تركيبها بشكل مستقل عن الانبعاث. (Ibbd13)
تمت إزالة طلبات FrameManager المتوقفة نهائيًا.
تم تغيير واجهات برمجة التطبيقات الداخلية للإنشاء لتقليل مقدار النفقات العامة لتتبُّع كائنات الحالة مثل
mutableStateof()
(I80ba6)تم إيقاف واجهة برمجة التطبيقات
state { ... }
نهائيًا بهدف إرسال طلبات فاضحة إلىremember { mutableStateOf(...) }
بغرض التوضيح. ويؤدي ذلك إلى تقليل المساحة الإجمالية لواجهة برمجة التطبيقات وعدد المفاهيم لإدارة الحالة، كما يتطابق مع نمطby mutableStateOf()
لتفويض خصائص الفئة. (Ia5727)يحدِّد الآن Flow.collectAsState الآن المرسِل التلقائي من المقطوعة نفسها بدلاً من ضبطه على "المرسلون.Main" بشكل تلقائي. (I9c1d9)
يحدث التعطُّل عند إصلاح عنصر يحفظ الحالة داخل حلقة التكرار for. يُسمح الآن باستخدام المفتاح نفسه فيsaveInstanceState()، ويتم الآن ضبط واجهة برمجة تطبيقات UiSavedStateRegistry لهذا الشرط الجديد (I4ab76، b/160042650، b/156853976، b/159026663، b/154920561)
إصلاح الأخطاء
- تم إيقاف
emitView
نهائيًا. استخدِمAndroidView
بدلاً من ذلك إن أمكن لإصدار طرق العرض داخل ميزة "إنشاء". تجدر الإشارة إلى أنّ إنشاء طرق عرض ومجموعات عرض بشكل مباشر لن يكون متاحًا في المستقبل ما لم يتم تركها في شجرة المقطوعات الموسيقية، في حال كان ذلك ممكنًا باستخدام AndroidView. (I29b1e، b/163871221)
الإصدار 0.1.0-dev16
5 آب (أغسطس) 2020
تم إصدار "androidx.compose.runtime:runtime-*:0.1.0-dev16
". يحتوي الإصدار 0.1.0-dev16 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
تم تغيير سياسة التغيير التلقائية للسمتَين
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 في شكل AnimationClockMonitorable بين ساعات الكوروتين الجديدة وواجهات برمجة التطبيقات التي لا تزال تستخدم الساعات القديمة المستندة إلى معاودة الاتصال.
أصبحت معادلة MonotonicFrameClock المكافئة لـ ManualAnimationClock الآن بمثابة ManualFrameClock. (I111c7، b/161247083)
تمت إعادة صياغة Modifier.stateDraggable بالكامل وتمت إعادة تسميتها إلى Modifier.s الإحصاءاتable. تم تقديم فئة ScrollableState جديدة، وتمت إعادة هيكلة DrawerState وBottomDrawerState ليكتسب منه. [Modal/Bottom]DrawerLayout لم يعد يقبل معلمة onStateChange. (I72332، b/148023068)
تم إيقاف Modifier.plus نهائيًا، لذا استخدِم Modifier.ثم بدلاً من ذلك. تقدّم علامة "بعد ذلك" إشارة أقوى للطلب، بينما تحظر أيضًا كتابة
Modifier.padding().background() + anotherModifier
، ما يعطّل السلسلة ويصعب قراءتها (Iedd58، b/161529964)تمت إضافة SubcomposeLayout. إنها مجموعة أولية منخفضة المستوى تسمح بتكوين العناصر الثانوية أثناء القياس إذا أردنا استخدام بعض القيم المتاحة فقط في وقت لاحق أثناء قياس تركيبة الشجرة الفرعية. على سبيل المثال، لا يتم تنفيذ WithConstraints باستخدام SubcomposeLayout. (I25cc8)
تمت إعادة تسمية Material filledTextField (حقل TextField)، تمت إعادة تسمية حقل TextField الأساسي إلى BaseTextField لتسهيل اكتشاف واجهات برمجة التطبيقات البسيطة المطلوبة واستخدامها (Ia6242, b/155482676).
تمت إعادة تسمية Modifier.drawBack إلى 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
من Compose، عليك تعديل التبعيات وفقًا لمقتطفات الرمز الجديدة الواردة أعلاه في قسم تعريف التبعيات.
تغييرات واجهة برمجة التطبيقات
تم إيقاف تعليق
@Model
التوضيحي نهائيًا. استخدم الحالة وmutableStateOf كبدائل. تم التوصل إلى قرار الإيقاف النهائي هذا بعد الكثير من النقاش المتأني.السبب
ويشمل الأسباب، على سبيل المثال لا الحصر:
- تقليل مساحة واجهة برمجة التطبيقات والمفاهيم التي نحتاج إلى تدريسها
- يتوافق بشكل أكبر مع مجموعات الأدوات الأخرى المشابهة (Swift UI وReact وFlutter)
- قرار يمكن التراجع عنه. يمكننا إعادة ضبط
@Model
في أي وقت لاحقًا. - يساعد هذا الإعداد في إزالة حالات استخدام حالة الأحرف الكبيرة والإجابة عن الأسئلة التي يصعب الإجابة عنها بشأن ضبط
@Model
باعتبارها إجراءات يجب معالجتها. @Model
فئة بيانات، يساوي، رمز التجزئة، إلخ- كيف يكون لديّ بعض السمات "التي تم رصدها" والبعض الآخر غير "ملاحظ"؟
- كيف يمكنني تحديد المساواة الهيكلية مقابل الإحالة المرجعية لاستخدامها في الملاحظة؟
- تقليل "السحر" في النظام. تقليل احتمالية افتراض شخص ما أن النظام كان أذكى مما هو عليه (أي أنه يعرف كيفية التمييز بين القائمة)
- تجعل دقة الملاحظة أكثر سهولة.
- تحسين إمكانية إعادة الضبط من سمة المتغيّر -> في الفئة
- إمكانية فتح آفاق جديدة لإجراء تحسينات تم إعدادها يدويًا حسب البلد
- يتماشى بشكل وثيق مع بقية المنظومة المتكاملة ويقلل من الغموض تجاه غير قابل للتغيير أو "اعتماد الحالة القابلة للتغيير"
ملاحظات نقل البيانات
تعتمد جميع الاستخدامات الحالية تقريبًا لـ
@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: استخدام مندوبي العقارات القابلة للتغيير والملكية
وقد أصبح هذا الأسلوب أكثر سهولة بفضل تفويضات الموقع الإلكتروني في Kotlin وواجهة برمجة التطبيقات
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/923163}b/143163}
تغيّر استراتيجية إنشاء الرموز في المحول البرمجي لـ Compose. قبل التغيير، كان المحول البرمجي لإنشاء الإنشاء يحوّل الاستدعاءات إلى دوال قابلة للإنشاء. باستخدام هذا التغيير، نحوّل الآن هيكل الدالة المركبة ونترك موقع الاستدعاء بدون تغيير (في الغالب).
وهذا يعني أن معظم المنطق الذي يتصل بوقت تشغيل الإنشاء يحدث في بداية نص الدالة، بدلاً من موقع الاستدعاء.
ويجب أن يكون هذا التغيير متوافقًا مع المصدر لجميع استخدامات الإنشاء. بالتالي، يجب ألا يضطر معظم مستخدمي ميزة الإنشاء إلى تعديل أي رمز نتيجة لهذا التغيير.
لدعم هذا العمل، تم تغيير توقيع JVM لجميع الدوال القابلة للتعديل. يتم تحويل دالة قابلة للتعديل تقبل معلَمة واحدة إلى دالة تقبل 3 معلَمات، والمعلَمات الإضافية هي Composer، وهو عدد صحيح لـ "المفتاح"، وهو عدد صحيح لقناع بت يستخدم لنشر البيانات الوصفية من خلال الاستدعاءات.
يحوِّل Compose الآن أيضًا الوسيطات التلقائية إلى دالة قابلة للتعديل. وهو يفعل ذلك بدون تقديم حمل زائد تلقائي اصطناعي للدالة نفسها، وبالتالي سينتج عن هذا التغيير تحديد عدد أقل من الدوال.
حدوث التغييرات السلوكية المتعمّدة المعروفة الناتجة عن ما يلي:
- سيتم تخطي بعض المكالمات من حيث لم يكن يتم إجراؤها سابقًا
- يتم الآن اشتراك التعبيرات القابلة للتعديل في تعبيرات الوسيطات التلقائية ومعالجتها بشكل صحيح.
تضمن هذا العمل بعض التحسينات: 1. ويتم نشر نتيجة مقارنات المعلَمات من خلال الرسم البياني للاستدعاءات في دوال أخرى قابلة للتكوين. سيؤدّي ذلك إلى تقليل المقارنات أثناء وقت التشغيل، وتقليل حجم جدول الخانة، وزيادة تخطّي الدوال القابلة للتعديل التي لم يتم تخطّيها في السابق. 2. تجدر الإشارة إلى أنّ المعلَمات التي يتبيّن أنّها "ثابتة" في وقت التجميع لا تتم مقارنتها أو تخزينها في وقت التشغيل. ويؤدي ذلك إلى تقليل عدد المقارنات وتقليل حجم جدول الشرائح. 3. ويتم استخدام بنية تدفق التحكم في نص الدوال لتقليل عدد المجموعات التي يتم إنشاؤها. يؤدي ذلك إلى تقليل حجم جدول الخانة وتقليل العمل في وقت التشغيل. 4. لا يتم تضمين معلمات الإرسال والاستقبال غير المستخدمة إلى الدوال عند تحديد إمكانية تخطي الدالة إذا لم يتم استخدامها داخل نص الدالة.
معظم التغييرات التي قد تؤدي إلى أعطال كانت متعلّقة بواجهات برمجة التطبيقات التي يستهدفها المحوِّل البرمجي مباشرةً، ولن يتأثر الاستخدام المعتاد للإنشاء: 1. تمت إزالة Composer::startExpr 2. تمت إزالة Composer::endExpr 3. تم إيقاف Composer::call نهائيًا 4. تمّت إزالة الحمل الزائد لـ
key
. يُرجى استخدام إصدارvararg
من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي المحوري نهائيًا. يمكنك استخدامkey
كبديل. 6. تم تغيير ScopeUpdateScope::updateScope لتوقُّع دالة 3 بدلاً من Function1. 7. تم تحديث RereableFunction وresetableFunctionN لتضمين معلَمات وقت تجميع البيانات الإضافية (I60756، b/143464846)تمت إضافة sortWith وremoveRange إلى MutableVector (Icccf7).
تمت إضافة عمليات تنفيذ الطريقة التلقائية لـ ChooseLifecycleMonitorer (I24289).
يتطلب Applier الآن طريقة clear() للتخلص من التراكيب (Ibe697)
تمت إضافة asMutableList() إلى MutableVector للسماح بتمريرها إلى واجهة برمجة تطبيقات عامة بدون الحاجة إلى نسخ القائمة بالكامل. (I298df)
تمت إضافة cleanCoroutineScope() للحصول على CoroutineScope مُدار من أجل إطلاق المهام استجابةً للفعاليات. (I0e264)
MutableVector هي مجموعة جديدة لا تنفّذ أيًّا من واجهة المجموعة القياسية. توفر هذه المجموعة سرعة تتجاوز المتطلبات الأخرى، والغرض منها هو استخدامها فقط في عمليات التنفيذ الداخلية. (I8ebd6)
تمت إزالة
StableMutableList
وStableMutableMap
مؤقتًا لتجنب حدوث مشكلة في إصدار إنشاء لغة Kotlin. ستتم إعادة تقديم هذه الواجهات بعد تحديث ميزة الإنشاء إلى إصدار من لغة Kotlin لا يحتوي على المشكلة.أصبح
SnapshotStateList
وSnapshotStateMap
متاحَين للجميع ولكن سيتم إيقافهما بعد استعادةStableMutableList
وStableMutableMap
. (Ia7769)إضافة دالة withFrameNanos ذات المستوى الأعلى لتوقيت الرسوم المتحركة (Ie34c5)
تم إيقاف التعليق التوضيحي @Untracked. استبدال بـ @ComposableContract(tracked=false) (Id211e)
تمت إعادة تسمية RedirectableFunction وواجهات برمجة التطبيقات المرتبطة بها لتصبح ComposableLambda وما إلى ذلك. وقد تم استهداف واجهات برمجة التطبيقات هذه بواسطة المحول البرمجي فقط، لذلك من المفترض ألا يؤثر ذلك في التوافق على مستوى المصدر بشكل طبيعي. تمت إعادة التسمية بشكل أساسي لتوضيح ما هو أفضل لهذه الفئة عند ظهورها في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية (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 الذي تم تقديمه مؤخرًا والذي يسمح بالتعبئة التلقائية للقيمة الأولية حتى تكون الحالة التي تم إرجاعها غير قابلة للقيم (I61dd8، b/156233789).
تمت إضافة محوّل لـ Flow. مثال على الاستخدام: قيمة val من خلال flow.collectAsState() (If2198، b/153375923)
[Mutable]تم نقل عوامل تشغيل تفويض الملكية في الولاية إلى الإضافات لدعم تحسينات تفويض موقع Kotlin 1.4. على المتصلين إضافة عمليات الاستيراد لمواصلة استخدام
by state { ... }
أوby mutableStateOf(...)
. (I5312c)تم نقل androidx.compose.ViewComposer إلى androidx.ui.node.UiComposer تمت إزالة androidx.compose.Emittable. حيث كانت متكررة مع ComponentNode. تمت إزالة androidx.compose.ViewAdapters. ولم تعُد حالات الاستخدام المتوافقة متاحة. تم إيقاف Compose.composeInto نهائيًا. يمكنك استخدام
setContent
أوsetViewContent
كبديل. لقد تم إيقاف ميزة Compose.dispose نهائيًا. يمكنك استخدام الإجراءdispose
علىComposition
الذي يعرضهsetContent
بدلاً من ذلك. تم نقل androidx.compose.Compose.subcomposeInto إلى androidx.ui.core.subcomposeInto تمت إعادة تسمية ComponentNode#emitInsertAt إلى ComponentNode#insertAt ComponentNode#emitRemoveAtتم تعديل علامة
ComposeFlags.COMPOSER_PARAM
لتصبحtrue
، ما سيؤدي إلى تغيير استراتيجية إنشاء الرمز في المكوّن الإضافي لإنشاء المحتوى. يؤدي هذا إلى إنشاء دوال @Composable باستخدام مَعلمة اصطناعية إضافية يتم تمريرها إلى استدعاءات @Composable اللاحقة لكي يتمكن وقت التشغيل من إدارة عملية التنفيذ بشكل صحيح. ومع ذلك، فإن هذا تغيير كبير يؤدي إلى كسر ثنائي، ومن المفترض أن يحافظ على التوافق على مستوى المصدر في جميع استخدامات الإنشاء الخاضعة للعقوبات. (I7971c)تغييرات قد تؤدي إلى أعطال في واجهة برمجة تطبيقات Accessibilitys يمكنك الاطّلاع على سجلّ ومستندات
Ambient<T>
لمعرفة التفاصيل (I4c7ee، b/143769776).تمت إضافة واجهة المستخدم-livedata - أداة جديدة مع محوّل لـ LiveData. مثال على الاستخدام: قيمة val من خلال liveData.observeAsState() (Ie9e8c، b/150465596)
محوِّلات Rx التي لا تحتوي على قيمة أولية صريحة تم إيقافها نهائيًا. استخدام القيمة "فارغ" ليس دائمًا أفضل خيار تلقائي، على سبيل المثال، عندما تكون لديك "قائمة"، من الأفضل أن تبدأ بـ الواجهة فارغة() أو أي قيمة تلقائية أخرى معقولة (I00025 أو b/161348384).
تمت إضافة ui-rxjava2 - أداة جديدة مع محوّلات لـ RxJava2. مثال على الاستخدام: قيمة val من خلال observable.subscribeAsState() (Ifab4b، b/153369097)
يمكن الآن استخدام
savedInstanceState()
مع الأنواع القابلة للقيم الفارغة (I6847f وb/153532190).جديد listSaver() وmapSaver() من أجل تسهيل كتابة كائنات Saver المخصصة (I8cf68، b/152331508)
الدوال الجديدة: saveInstanceState() وتذكرSavedInstanceState(). هما تشبهان الدولة() وتذكر() ولكن لها إصدار دعم حالة المثيل المحفوظ (If1987، b/152025209)
إصلاح الأخطاء
- تمت إعادة تسمية
runOnIdleCompose
إلىrunOnIdle
(I83607) - واجهة برمجة تطبيقات Made LayoutNode التجريبية (I4f2e9)
- تم إيقاف androidx.ui.foundation.TextFieldValue وandroidx.ui.input.EditorValue نهائيًا. تم أيضًا إيقاف العناصر النصية TextField وFilledTextField وCoreTextField التي تستخدم هذا النوع. يُرجى استخدام androidx.ui.input.TextFieldValue بدلاً من ذلك (I4066d، b/155211005).
- تمت إزالة واجهة برمجة تطبيقات DrawFrame التي تم إيقافها نهائيًا لصالح واجهة برمجة التطبيقات drawBack API على واجهة برمجة التطبيقات. عمليات إعادة ضبط الألوان والفرشاة والرسم الخلفية لتقليل مسارات الرموز بالإضافة إلى إزالة متطلبات إنشاء "المعدِّل" كجزء من عملية الإنشاء. (I0343a)
- تم تحديث واجهات برمجة التطبيقات ذات المستوى الأعلى التي تعرض "لوحة الرسم" لعرض "CanvasScope" بدلاً من ذلك. فهذا يلغي حاجة المستهلكين إلى الحفاظ على كائنات الطلاء الخاصة بهم. بالنسبة إلى المستهلكين الذين ما زالوا يطلبون الوصول إلى لوحة الرسم، يمكنهم استخدام طريقة الإضافة drawCanvas التي توفّر استدعاءً لإصدار أوامر الرسم باستخدام لوحة الرسم الأساسية. (I80afd)
- تم تغيير واجهة برمجة التطبيقات اللاحقة lambda API لـ WithConstraints. بدلاً من معلَمتين، تتضمن الآن نطاق مستلم، بالإضافة إلى القيود وLayoutDirection، توفر خصائص min width وmax width وminHeight وmaxHeight في Dp (I91b9a وb/149979702).
- تمت إضافة أداة تعديل المساحة المتروكة المتماثلة. (I39840)
- تم تعديل wrapContentDisplay وwrapContentLength لتوقُّع محاذاة رأسية أو أفقية بدلاً من أي محاذاة. تم تحديث مُعدِّل الجاذبية لقبول المحاذاة العمودية أو الأفقية. تم تعديل الصف والعمود والحزمة لإتاحة عمليات المحاذاة المستمرة المخصّصة. (Ib0728)
- تمت إعادة تسمية وحدة ui-text لتصبح ui-text-core (I57dec).
- تحسين واجهة برمجة تطبيقات DrawModifier:
- تم إنشاء نطاق المتلقي لـ draw() ContentDrawScope
- تمت إزالة جميع المعلمات في draw()
- لدى DrawScope واجهة مماثلة لواجهة تطبيق CanvasScope
- يحتوي ContentDrawScope على طريقة drawContent() (Ibaced، b/152919067)
- تم إيقاف ColoredRect نهائيًا. يمكنك استخدام
Box(Modifier.preferredSize(width, height).drawBackground(color))
كبديل. (I499fa، b/152753731) - تم استبدال المشغّل بالإضافة إلى عامل التشغيل بوظائف الإضافة على الإعدادات الأصلية (I225e4).
- يمكن الآن الوصول إلى أعضاء RowScope والعمود "نطاق العمود" خارج "الصف والعمود". (I3a641)
- تم تغيير اسم التخطيط المرن إلى وزن التخطيط. تمت إعادة تسمية المعلمة الضيقة للتعبئة. (If4738)
- حصلت شركة WithConstraints على معلمة LayoutDirection (I6d6f7)
- تمت إعادة تسمية الخلفية إلى DrawBack وجعلها قابلة للحفظ بشكل تلقائي (Ia0bd3)
- تم استبدال ButtonStyle بدوال مميزة وإزالة الحمل الزائد للنص (السلسلة). يمكنك الاطّلاع على النماذج المحدَّثة للحصول على معلومات الاستخدام. (If63ab وb/146478620 وb/146482131)
- أصبحت
runOnIdleCompose
وrunOnUiThread
الآن دالتين عموميتين بدلاً من الطرق في ComposeTestRule. (Icbe8f)
المساهمة الخارجية
- إزالة واجهة برمجة التطبيقات غير الضرورية مثل حلقة التكرار والمعالج من طبقة النقل Compose Runtime (I6847d)
- يمكنك إيقاف
Flow<T>.collectAsState()
بدون قيمة مبدئية. استخدِمStateFlow<T>
أو مرِّر قيمة أولية صريحة بدلاً من ذلك. (I63f98، b/157674865)