وقت التشغيل لإنشاء رسالة

الوحدات الأساسية لنموذج البرمجة وإدارة الحالة في Compose، ووقت التشغيل الأساسي الذي يستهدفه المكوّن الإضافي Compose Compiler.
التعديل الأخير الإصدار المستقر إصدار مرشح الإصدار التجريبي إصدار ألفا
20 آذار (مارس) 2024 1.6.4 - - 1.7.0-alpha05

التركيبة

تشتمل ميزة Compose على 7 معرّفات مجموعات Maven ضمن androidx. تحتوي كل مجموعة على مجموعة فرعية مستهدفة من الوظائف، ولكل منها مجموعة خاصة من ملاحظات الإصدار.

يوضِّح هذا الجدول المجموعات والروابط لكلّ مجموعة من ملاحظات الإصدار.

مجموعةالوصف
compose.animationيمكنك إنشاء صور متحركة في تطبيقات Jetpack Compose لتحسين تجربة المستخدم.
compose.compilerيمكنك تحويل دوال @Composable وتفعيل التحسينات باستخدام المكوّن الإضافي لبرنامج التحويل البرمجي للغة Kotlin.
compose.foundationيمكنك كتابة تطبيقات Jetpack Compose باستخدام الوحدات الأساسية الجاهزة للاستخدام وتوسيع نطاق الأساس لإنشاء أجزاء نظام التصميم الخاصة بك.
compos.materialيمكنك إنشاء واجهات مستخدم في Jetpack Compose باستخدام مكوّنات "التصميم المتعدد الأبعاد" الجاهزة للاستخدام. هذه هي نقطة دخول المستوى الأعلى في Compose، والتي تم تصميمها لتوفير مكونات تتطابق مع تلك الموضّحة في www.material.io.
compos.material3يمكنك إنشاء واجهات مستخدم في Jetpack Compose باستخدام مكونات Material Design 3، وهي التطوّر القادم للتصميم المتعدد الأبعاد. يتضمّن Material 3 مظاهر ومكوّنات معدَّلة وميزات تخصيص Material You، مثل الألوان الديناميكية، وتم تصميمه ليكون متماسكًا مع النمط المرئي الجديد في Android 12 وواجهة مستخدم النظام.
compose.runtimeالوحدات الأساسية لنموذج البرمجة وإدارة الحالة في Compose، ووقت التشغيل الأساسي الذي يستهدفه المكوّن الإضافي Compose Compiler.
compose.uiالمكونات الأساسية لواجهة مستخدم الإنشاء اللازمة للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال.

إعلان التبعيات

لإضافة تبعية إلى Compose، عليك إضافة مستودع Maven إلى مشروعك. لمزيد من المعلومات، يمكنك الاطّلاع على مستودع Maven من Google.

أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle لتطبيقك أو الوحدة الخاصة بك:

رائع

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    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 على هذه الالتزامات.

إصلاح الأخطاء

  • تثبيت التبعيات على الإصدارات الثابتة الأقل توافقًا (أي وقت تشغيل الإنشاء والتتبّع tracing-perfetto) - إصلاح المشكلة التي يؤدي فيها تتبُّع وقت تشغيل الإنشاء إلى الحصول على إصدار أحدث من وقت تشغيل الإنشاء في التطبيق.

الإصدار 1.0.0-alpha04

23 آب (أغسطس) 2023

تم طرح "androidx.compose.runtime:runtime-tracing:1.0.0-alpha04". يحتوي الإصدار 1.0.0-alpha04 على هذه الالتزامات.

الميزات الجديدة

  • يتوافق التطبيق مع أحدث إصدارات "مقياس الأداء" و"تتبُّع Perfetto"، ما يتيح ميزة "تتبُّع المقطوعة الموسيقية" عند بدء تشغيل التطبيق (البداية على البارد)، مثلاً في مقياس "قياس أداء AndroidX" و"استوديو Android" (بدءًا من الإصدار التجريبي 2 من Hedgehog).

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية "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.7

الإصدار 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 هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تقديم مجموعات استبدال لتحسين عملية رصد التغييرات (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.4

20 آذار (مارس) 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.4". يتضمّن الإصدار 1.6.4 هذه الالتزامات.

الإصدار 1.6.3

‫6 مارس 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.3". يتضمّن الإصدار 1.6.3 هذه الالتزامات.

الإصدار 1.6.2

21 شباط (فبراير) 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.2". يتضمّن الإصدار 1.6.2 هذه الالتزامات.

الإصدار 1.6.1

7 شباط (فبراير) 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.1". يتضمّن الإصدار 1.6.1 هذه الالتزامات.

إصلاح الأخطاء

  • يمكنك الاتصال برقم معاودة الاتصال بالرقم onRelease بالترتيب نفسه المستخدَم في onForgotten. (2cd790)
  • فلترة الحالات التي تم تغييرها والتي لم تتم ملاحظتها في snapshotFlow (796b80)

الإصدار 1.6.0

24 كانون الثاني (يناير) 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.0". يتضمّن الإصدار 1.6.0 هذه الالتزامات.

التغييرات المهمة منذ الإصدار 1.5.0

الميزات الجديدة

  • إعادة طرح الاستثناءات التي يتم ابتلاعها أثناء حلقة إعادة الإنشاء (4dff9a)

تحسينات الأداء

  • تحسين تسجيل تعديلات حالات اللقطات (28c3fe)
  • تحسين rememberSaveable (f01d79)
  • تأجيل الحالات المشتقة لإعادة القراءة إلى أن يتم تسجيل التغييرات (f38099)
  • تحسين تقديم قيم محلية للمقطوعة الموسيقية (a337ea)

إصلاح الأخطاء

  • إصلاح تسرُّب الذاكرة في جدول الخانة (73fcfe)
  • تخطي إعادة تكوين التركيبات الفرعية التي ستتم إزالتها. (Ieeb99، b/254645321)
  • لا يتم تشغيل دورات حياة RememberObserver إلا عند تخزينها في عملية تذكُّر الحساب. (f6b4dc)
  • فرض قيود على التقاط صور يبلغ عددها $dirty على ملفات lambda مضمّنة. (acfca0)
  • إصلاح المحتوى القابل للنقل الذي يتلقى أحيانًا تركيبات محلية غير صحيحة. (035cd6)

الإصدار 1.6.0-rc01

10 كانون الثاني (يناير) 2024

تم طرح "androidx.compose.runtime:runtime-*:1.6.0-rc01". يتضمّن الإصدار 1.6.0-rc01 هذه الالتزامات.

الإصدار 1.6.0-beta03

13 كانون الأول (ديسمبر) 2023

تم طرح "androidx.compose.runtime:runtime-*:1.6.0-beta03". يتضمّن الإصدار 1.6.0-beta03 هذه الالتزامات.

الإصدار 1.6.0-beta02

29 تشرين الثاني (نوفمبر) 2023

تم طرح "androidx.compose.runtime:runtime-*:1.6.0-beta02". يتضمّن الإصدار 1.6.0-beta02 هذه الالتزامات.

الإصدار 1.6.0-beta01

15 تشرين الثاني (نوفمبر) 2023

تم طرح "androidx.compose.runtime:runtime-*:1.6.0-beta01". يتضمّن الإصدار 1.6.0-beta01 هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • نشر قيم استقرار معيّنة في التعليق التوضيحي (274a4c)

إصلاح الأخطاء

  • استخدِم السياسة المرجعية لحالة النطاق المحلي للتكوين في السياق. (83361c)
  • حصر الالتقاط بدون عوائق على أجهزة lambda المضمّنة (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 والطويلة والعائمة والمزدوجة في عناصر 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 التي تمت إعادة تشغيلها
  • إصلاح التراجع المباشر للتعديلات في العنصر القابل للإنشاء مع العُقد 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.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 هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة التخصيصات في إعادة التركيب والرسوم المتحركة للألوان و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 والطويلة والعائمة والمزدوجة في عناصر 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 التي تمت إعادة تشغيلها
  • إصلاح التراجع المباشر للتعديلات في العنصر القابل للإنشاء مع العُقد 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
  • يمكنك إرسال إشعارات التطبيق بعد انتهاء Recomposer من الإطار. 98f2641
  • إصلاح تعطُّل الفهرس خارج الحدود عند إلغاء أداة إعادة الإنشاء 8f8656f
  • فرض إعادة الإنشاء دائمًا في حال تغيير الموفرين الرئيسيين لـ "مقطوعة موسيقية" 9526fcc
  • مقدار التفاوت في إعادة إنشاء "الوظائف المُلغاة" a55f7ed
  • تحسين طريقة التعامل مع عمليات الإلغاء لدى عدد كبير من المؤلفين 9b7ed67
  • إصلاح إنشاء مجموعات إغلاق للمرتجعات غير المحلية b6f590c

الإصدار 1.4.0-rc01

8 آذار (مارس) 2023

تم طرح "androidx.compose.runtime:runtime-*:1.4.0-rc01". يحتوي الإصدار 1.4.0-rc01 على هذه الالتزامات.

إصلاح الأخطاء

الإصدار 1.4.0-beta02

22 شباط (فبراير) 2023

تم طرح androidx.compose.runtime:runtime:1.4.0-beta02 وandroidx.compose.runtime:runtime-saveable:1.4.0-beta02. يحتوي الإصدار 1.4.0 -beta02 على هذه الالتزامات.

الإصدار 1.4.0-beta01

8 شباط (فبراير) 2023

تم طرح "androidx.compose.runtime:runtime-*:1.4.0-beta01". يحتوي الإصدار 1.4.0 -beta01 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة ComposeNodeLifecycleCallback مما يسمح بمراقبة دورة حياة عُقد Compose (I3731b).
  • تمت إضافة @TestOnly إلى Composer.disableSourceInformation() لأنّ هذه الدالة آمنة فقط للاتصال بها في اختبار. (I896c8)

إصلاح الأخطاء

  • إزالة الملاكمة في عمليات البحث المحلية للمقطوعات الموسيقية (62f66a)
  • تحسين خصائص المراجع في الذاكرة لحالة لقطة (dfb451)

الإصدار 1.4.0-alpha05

25 كانون الثاني (يناير) 2023

تم طرح androidx.compose.runtime:runtime:1.4.0-alpha05 وandroidx.compose.runtime:runtime-saveable:1.4.0-alpha05. يحتوي الإصدار 1.4.0-alpha05 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • المزيد من أنواع/إمكانية القيم الفارغة للدوال المضمَّنة/المخفية التي تم إيقافها نهائيًا (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

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 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • لدى 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

التعامل مع الاستثناء / دعم التعديل المباشر

تتبُّع المقطوعات الموسيقية

واجهات برمجة تطبيقات الانعكاس القابل للإنشاء

إصلاحات وقت التشغيل

نظام التقاط الصور

الإصدار 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 هذه الالتزامات.

إصلاح الأخطاء

  • واجهة برمجة التطبيقات المُحدَّثة (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

الأداء في 1.2

إصلاح الأخطاء في 1.2

الإصدار 1.2.0-rc03

29 حزيران (يونيو) 2022

تم طرح "androidx.compose.runtime:runtime-*:1.2.0-rc03". يحتوي الإصدار 1.2.0-rc03 على هذه الالتزامات.

إصلاح الأخطاء

  • كانت ملاحظات الحالة المشتقة في السابق تمت إزالتها دون شروط من نطاق إعادة الإنشاء والتكوين معًا، مما أدى إلى كسر النطاقات الأخرى التي ربما لا تزال تراقب الحالة المستمدة. يؤدي هذا التغيير إلى إزالة مثيلات الحالة المشتقّة فقط إذا لم يعُد بإمكان نطاقات أخرى رصدها. (b/236618362)

الإصدار 1.2.0-rc02

22 حزيران (يونيو) 2022

تم طرح "androidx.compose.runtime:runtime-*:1.2.0-rc02". يحتوي الإصدار 1.2.0-rc02 على هذه الالتزامات.

الإصدار 1.2.0-rc01

15 حزيران (يونيو) 2022

تم طرح "androidx.compose.runtime:runtime-*:1.2.0-rc01". يحتوي الإصدار 1.2.0-rc01 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • يتم الآن إنشاء الواجهات في مكتبات الإنشاء باستخدام طرق الواجهة التلقائية 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 على هذه الالتزامات.

المساهمة الخارجية

  • تم التحديث لاستخدام coroutines في 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 أو دوال ذات صلة قابلة للإنشاء.

    بالنسبة إلى التطبيقات المخصّصة، تحتاج الدوال القابلة للإنشاء التي تستدعي ComposeNode أو ReusableComposeNode إلى إضافة تعليق توضيحي CompoableTarget للدالة وأي أنواع من مَعلمات lambda قابلة للإنشاء. ومع ذلك، ننصحك بإنشاء تعليق توضيحي يتضمّن تعليقًا توضيحيًا باستخدام ComposableTargetMarker ثم استخدام التعليق التوضيحي الذي تم وضع علامة عليه بدلاً من ComposableTarget مباشرةً. إنّ التعليق التوضيحي القابل للإنشاء والذي تم وضع علامة ComposableTargetMarker عليه يعادل ComposbleTarget الذي يحمل اسمًا مؤهّلاً بالكامل للفئة كمَعلمة applier. للاطّلاع على مثال على استخدام ComposableTargetMarker، راجِع anroidx.compose.ui.UiComposable. (I38f11)

الإصدار 1.2.0-alpha03

9 شباط (فبراير) 2022

تم طرح "androidx.compose.runtime:runtime-*:1.2.0-alpha03". يحتوي الإصدار 1.2.0-alpha03 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إضافة دالة 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 تأثير التمرير الزائد
  • تحسينات على تغيير حجم ناحية اللمس
  • يُرجى العلم أنّه في ما يتعلق بالإصدار 1.0 من Compose، ستوسِّع مكوّنات Material مساحة التصميم الخاصة بها لاستيفاء إرشادات إمكانية الوصول الخاصة بمواد العرض لحجم مساحة اللمس. على سبيل المثال، سيتم توسيع مساحة اللمس المستهدفة للزر إلى حدّ أدنى للحجم يبلغ 48x48dp، حتى في حال ضبط حجم الزر ليكون أصغر. يعمل هذا على مواءمة Compose Material مع سلوك مكونات التصميم المتعدد الأبعاد نفسه، مما يوفر سلوكًا متسقًا إذا كنت تمزج بين طرق العرض والإنشاء. يضمن هذا التغيير أيضًا استيفاء الحد الأدنى من متطلبات تسهيل استخدام مساحة اللمس عند إنشاء واجهة المستخدم باستخدام مكونات 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). قبل إجراء هذا التغيير، كان برنامج تجميع ComposeAllowed فقط متوافقًا مع "وقت تشغيل الإنشاء" من الإصدار نفسه أو الإصدارات الأحدث. بعد هذا التغيير، تصبح أداة تجميع النصوص البرمجية متوافقة مع إصدار أقدم من وقت تشغيل الإنشاء (الإصدار 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 هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح مثيلات تتبُّع الأعطال المشتقّة. (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 Studio Bumblebee وAGP 7.1. (b/194289155)

الإصدار 1.0.0-rc02

14 تموز (يوليو) 2021

تم طرح "androidx.compose.runtime:runtime-*:1.0.0-rc02". يحتوي الإصدار 1.0.0-rc02 على هذه الالتزامات.

  • تم إصلاح حالات السباقات في 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-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

ما هي قواعد الملف الشخصي؟

  • يتم تحديد قواعد الملف الشخصي للمكتبة في ملف نصي baseline-prof.txt في src/main أو دليل مكافئ. يحدد الملف قاعدة في كل سطر، حيث تكون القاعدة في هذه الحالة نمطًا للمطابقة مع الطرق أو الفئات في المكتبة. بنية هذه القواعد هي مجموعة فرعية من تنسيق الملف الشخصي ART الذي يمكن للإنسان قراءته، والذي يُستخدَم عند استخدام adb shell profman --dump-classes-and-methods .... تتخذ هذه القواعد أحد شكلين لاستهداف أي من الطرق أو الفئات.

  • سيكون لقاعدة الطريقة النمط التالي:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • وسيكون لقاعدة الفئة النمط التالي:

    <CLASS_DESCRIPTOR>
    
  • هنا <FLAGS>، يظهر حرف واحد أو أكثر من الأحرف H وS وP لتوضيح ما إذا كان يجب وضع علامة على هذه الطريقة باعتبارها "ميزة ساخنة" أو "بدء تشغيل" أو "بعد بدء التشغيل" أم لا.

  • تمثّل هذه السمة <CLASS_DESCRIPTOR> واصفًا للفئة التي تنتمي إليها الطريقة المستهدَفة. على سبيل المثال، يجب وصف السمة Landroidx/compose/runtime/SlotTable; للصف androidx.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)

إصلاح الأخطاء

  • سيحافظ الآن العمود الكسول/الصف على ما يصل إلى عنصرَين مرئيَين سابقًا نشطَين (وليسان تم التخلص منهما) حتى في حال الانتقال للخارج. ويسمح هذا للمكون بإعادة استخدام التركيبات الفرعية النشطة عندما نحتاج إلى إنشاء عنصر جديد مما يحسن أداء التمرير. (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 متوافقة الآن مع نظام التشغيل 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 هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف 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)

  • تمت إعادة تسمية مقدّمي الخدمات إلى TechnicalLocalProvider.

    • لم تعُد الدالة الإنشائية للمقطوعة الموسيقية تقبل مَعلمة رئيسية، وتم إيقافها نهائيًا.
    • تم تحويل CurrentsCompositeKeyHash إلى سمة من المستوى الأعلى قابلة للإنشاء بدلاً من دالة المستوى الأعلى القابلة للإنشاء.
    • تم نقل ComposeData وتكوينGroup إلى مساحة الاسم androidx.compose.runtime.Tooling.
    • تم تصميم ComposableLambda كواجهة بدلاً من فئة ملموسة، ولم تعد تحتوي على معلمات النوع.
    • تم تصميم ComposableLambdaN كواجهة بدلاً من فئة ملموسة، ولم تعد تحتوي على معلمات النوع.
    • تم نقل دالة shortcutsFlow إلى مساحة الاسم androidx.compose.runtime.
    • لم تعُد طريقة الدمج لـ SnapshotMutationPolicy تجريبية.
    • تمت إزالة دالة @TestOnly ذات المستوى الأعلى clearRoots. لم يعد من الضروري.
    • تمت إزالة الدالتين keySourceInfoOf وresetSourceInfo. لم تعُد ضرورية.
    • تمت إزالة Composer.collectKeySourceInfo. لم يعد من الضروري.
    • تمت إزالة طرق isJoinedKey وjoinKeyLeft وjoinKeyRight. لم تعُد ضرورية.
    • تم نقل العديد من واجهات برمجة التطبيقات ذات المستوى الأعلى وإعادة تنظيمها في ملفات مختلفة. ونظرًا للدلالات الدلالية لفئة الملفات في Kotlin، سيؤدي ذلك إلى إيقاف التوافق الثنائي وليس التوافق مع المصدر، لذا من المفترض ألا تكون هناك مشكلة لدى معظم المستخدمين.
    • (I99b7d، b/177245490)
  • SnapshotStateMonitorer لم يعُد تجريبيًا (Id2e6a)

  • تم حذف بعض واجهات برمجة التطبيقات المتوقّفة نهائيًا في السابق (Ice5da، b/178633932).

  • تم إجراء التغييرات التالية في Material API:

    • تمت إضافة مَعلمة contentPadding إلى Top/BottomAppBar للسماح بتخصيص المساحة المتروكة التلقائية.
    • المَعلمات المُعاد ترتيبها في BackdropScaffold لاتّباع إرشادات واجهة برمجة التطبيقات للمَعلمات المطلوبة التي تسبق المَعلمات الاختيارية
    • تم نقل المعلمة icon في Bottom NavigationItem ليكون بعد selected وonClick.
    • تمت إعادة تسمية المعلمة alwaysShowLabels في BottomFAQItem إلى alwaysShowLabel.
    • تمت إعادة تسمية مَعلَمات bodyContent في بعض المكونات لتصبح content فقط.
    • تم إعادة ترتيب المَعلمات في "ButtonDefaults.buttonColors()". يُرجى ملاحظة أنه نظرًا لعدم تغيير نوع المعلمات، لن يؤدي ذلك إلى حدوث خطأ في الرمز، ويُرجى التأكّد من استخدام المعلَمات المسماة أو تعديل الترتيب يدويًا، وإلا لن يعمل الرمز بالطريقة نفسها كما في السابق.
    • تمت إضافة مَعلمة secondaryVariant إلى darkColors(). عادةً ما يكون هذا اللون هو نفسه اللون secondary في المظهر الداكن، ولكن لتحقيق الاتّساق والمزيد من التخصيص.
    • تمت إزالة ElegationDefaults و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)
  • تمت إعادة تسمية مرجع مقطوعة موسيقية إلى رد الأموال (I53fcb).
  • تم نقل ComponentActivity.setContent إلى androidx.activity.compose.setContent في وحدة androidx.activity:activity-compose. (Icf416)
  • تم تحديث Snapshot API لتكون أكثر اتساقًا مع إرشادات واجهة برمجة التطبيقات وإخفاء فئات التنفيذ الداخلي من واجهة برمجة التطبيقات العامة. (Id9e32)
  • تمت إعادة تسمية "وضع الاستراحة" ليطابق إعادة تسمية "وضع الاستراحة" -> ProductionLocal. في السابق، كان يُطلق على هذه الميزة اسم " ننصحك بإدراج اسم البيئة المحيطة"، وأصبح اسم ProductionLocals يُسمّى LocalFoo. (I2d55d)
  • تمت إعادة تسمية بي أم أمبير إلى التركيبة المحلية، وأجواء إيم بي سيتي أو أمبيانتي إي أمبير آند إيرف إيثان / وإلى وإلى إي آند آندي / ساكت آند إكسبيريمن على التوالي. يساعد هذا التغيير في توضيح الغرض من TechnicalLocal بشكل أكبر: آلية لتوفير / استرداد القيم المحلية لمقطوعة موسيقية. يجب أن تبدأ مثيلات TechnicalLocal ببادئة Local، مثل val LocalFoo = composeLocalOf { Foo() }. (Ia55b6)
  • أخذت TakeMutableSnapshot وtakeSnapshot طرقًا مصاحبة لـ Snapshot. (I91f19)
  • لقد أوقفنا السمة @ComposableContract نهائيًا ليحلّ محلّها ثلاثة تعليقات توضيحية أكثر تحديدًا.

    @ComposableContract(restartable = false) أصبح @NonRestartableComposable @ComposableContract(readonly = true) تمت إزالة @ReadOnlyComposable @ComposableContract(preventCapture = true) تمت إزالة @DisallowComposableCalls @ComposableContract(tracked = true). (I60a9d)

  • تم إيقاف الأدوات المساعِدة فارغةContent() و (@Composable () -> Unit).ornull() نهائيًا بسبب عدم توفّر أي قيمة أو تأثير إيجابي لها في الأداء (I0484d).

  • لم يعُد snapshotFlow وwithMutableSnapshot تجريبيَين (I6a45f)

  • يمكن الآن إغلاق عمليات إعادة الإنشاء. ستستمر إعادة الإنشاءات المغلقة حتى يكتمل تكوين الكوروتينات الثانوية. تمت إعادة تسمية Recomposer.shutDown لإلغاء المقارنة مع علامة الإغلاق. (Ib6d76)

  • تم إيقاف عنصر compose:runtime-dispatch نهائيًا الآن. يمكن الآن العثور على MonotonicFrameClock في compose:runtime ويمكن العثور على AndroidUiDispatcher في compose:ui. (Ib5c36)

  • تمت إعادة هيكلة واجهة برمجة التطبيقات التي يستهدفها المكون الإضافي Compose إلى واجهة بدلاً من فئة ملموسة. لم تعد الواجهة تستخدم معلمة نوع بعد الآن.

    هذا تغيير داخلي من المفترض ألا يؤثر في توافق رمز المصدر ولكنه تغيير يتعطل في النظام الثنائي. (I3b922، b/169406779)

  • تم طرح SnapshotMutableState (Icfd03)

  • تمت إعادة تسمية DisposableEffectDisposable إلى DisposaleEffectResult (Ica7c6).

  • تمت إزالة Recomposer.current(). [Abstract]تتطلب ميزة ComposeView الآن وبشكل تلقائي استخدام أدوات إعادة الإنشاء التي يتم إنشاؤها بشكل كسول والتي يتم إنشاؤها على نطاق النافذة والمستندة إلى ViewTreeLifecycleOwner للنافذة. يتم إيقاف إعادة الإنشاء واستخدام علامات الرسوم المتحركة المستندة إلى FrameNanos مؤقتًا أثناء إيقاف دورة حياة المضيف. (I38e11)

  • توفّر Recomposer.runningRecomposers الآن حالة عامة على مستوى StateFlow من معلومات RecomposerInfo المخصّصة للقراءة فقط حول حالة عملية التركيب مستمرة خلال هذه العملية. نفضّل واجهة برمجة التطبيقات هذه على Recomposer.current() ، والتي تم إيقافها نهائيًا. (If8ebe)

  • تمت إعادة تسمية DisposableEffectDisposable لتصبح تستخدم DisposaleEffectResult (I3ea68).

الإصدار 1.0.0-alpha11

28 كانون الثاني (يناير) 2021

تم طرح "androidx.compose.runtime:runtime-*:1.0.0-alpha11". يحتوي الإصدار 1.0.0-alpha11 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف onCommit وonDisposition وonActive لتحلّ محلّها واجهات SideEffect وDisableEffect API (If760e).
  • تم إيقاف واجهة برمجة التطبيقات emit() وكل التحميلات الزائدة وإعادة تسميتها إلى ComposeNode. واجهات برمجة التطبيقات متطابقة، ولكن باسم مختلف فقط لكي تتبع اصطلاحات التسمية في Compose (I4137b).
  • تم الآن إيقاف in مؤخرًا وchangeReference() لتحلّ محلّهما currentRecomposeScope، وتذكُّرمراقبة التركيب على التوالي. (I583a8)
  • يحلّ جهاز تَورِيفْ ذِكْرِ قَائِمَة حِفْظْ لِبَدْءِ التَّرْجَمَة التِّلْقَائِيَّة لِتَشْغِيلِ الرَّسَائِلْ وَهْوَ يَحْتَوِي عَلَى عَلَامَةْ تَشْغِيلْLifecycleMonitorer التَّرْجَمَة الَّتِي تَمَّ قَفْلُهَا.

    وتمثل 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 للسماح بإعادة تدوير طرق العرض المستندة إلى Compose والتخلص من المقطوعات الموسيقية لإعادة إنشائها لاحقًا إضافة واجهات برمجة التطبيقات (API) لتثبيت واكتشاف "أدوات إعادة الإنشاء" و"مراجع المقطوعات الموسيقية" على مستوى النافذة لإنشاء مقطوعات موسيقية فرعية

    يمكنك إضافة ViewChooseStrategy لتكوين استراتيجية التخلص من التركيبة لدى [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 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة SetTable وStoReader وSlotWriter من واجهة برمجة التطبيقات العامة. وقد تم وضع علامة عليها على أنها InternalComposeAPI سابقًا. وهي الآن داخلية في وحدة الإنشاء.

    تمت إضافة ComposeData وComposeGroup كبديل لواجهة برمجة التطبيقات ui-toolsing API لاستخدامها لاستخراج معلومات التركيب. هذه البيانات متاحة للجميع، ولكنها غير مخصّصة للاستخدام خارج واجهة برمجة التطبيقات لأدوات واجهة المستخدم لأنها توفر المعلومات الأولية التي تفسرها واجهة برمجة التطبيقات لأدوات واجهة المستخدم (I31a9c).

  • لم تعُد فئة Applier تُعتبر (Id85b0).

  • تم تغيير واجهة Applier لتبسيط بناء الأشجار من الأسفل إلى الأعلى بدلاً من البدء من الأعلى إلى الأسفل.

    تمت إعادة تسمية الطريقة insert() لتصبح insertTopDown().

    تمت إضافة طريقة جديدة، وهي insertBottomUp().

    يُدرج التطبيق العُقد في الشجرة التي يعدّلها باستخدام insertTopDown() أو insertBottomUp() استنادًا إلى أيهما أفضل أداءً.

    تكون بعض الأشجار، مثل LayoutNode وView، أكثر فعالية في الإنشاء من أسفل إلى أعلى من الإنشاء من أعلى إلى أسفل. قبل إجراء هذا التغيير، كانت هناك حاجة إلى حزمة من الإدراجات لتنفيذ العمليات من أسفل إلى أعلى والتي يجب نسخها إلى كل مُطبِّق يتطلب إنشاءًا من أسفل إلى أعلى من أجل الأداء. مع هذا التغيير، يلغي Applier "insertBottomUp()" من أجل بناء شجرة من أسفل إلى أعلى و"insertTopDown()" لبناء الشجرة من أعلى إلى أسفل. (Icbdc2)

  • يدعم Compose إرسال السمات التي يمكن أن تنشئ استدعاءات قابلة للإنشاء. لن يتم الاستغناء عن تقديم الدعم، ولكن ستتغير بنية إعلان getter على خاصية 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 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة التحقق من الوبر لتسمية معلمة lambda القابلة للإنشاء وموضعها، وذلك للتحقق من الاتساق مع إرشادات الإنشاء. تم أيضًا نقل بيانات بعض واجهات برمجة التطبيقات باستخدام children كاسم لدالة lambda اللاحقة إلى content، وفقًا لعمليات فحص الوبر والإرشادات. (Iec48e)
  • لم تعد أداة إعادة الإنشاء تقبل embeddingContext. يتم الحصول على التبعيات المطلوبة للجدولة من activityCoroutineContext. تم إيقاف FrameManager نهائيًا، ويجب أن تؤدي عمليات دمج النظام الأساسي إلى تهيئة معالجة اللقطات العامة. (I02369)
  • تمت إعادة تسمية الدالة RestorableStateHolder.withRestorableState إلى RestorableStateProvider (I66640).

إصلاح الأخطاء

  • "وضع عدم النشاط" الذي تم إيقافه نهائيًا باسم "Ambient" كلاحقة له، واستبداله بسمات جديدة مسبوقة بعبارة "وضع عدم النشاط"، وذلك باتّباع إرشادات أخرى في واجهة برمجة التطبيقات "وضع عدم النشاط" و"Compose". (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 وDeposableEffect. لا يُسمح باستخدام 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.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 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • أصبح Recomposer الآن مرجعًا للمقطوعة الموسيقية وأصل تركيبة صالح. "أداة إعادة إنشاء المحتوى الفاضح" مطلوبة الآن في أماكن أقل. (I4036f)
  • تمت إضافة واجهة برمجة التطبيقات DisposableEffect البسيطة إلى SideEffect، ما أدى إلى ملء دور onCommit-with-params ولكن مع إضافة قيمة onDispose المطلوبة.
    • تمت إضافة renameUpdateState API، إلى عملية نشر البيانات بدءًا من إعادة الإنشاء إلى العمليات المستمرة أو طويلة الأمد مثل DisposableEffects أو LaunchedTasks.
    • (Id50b9)
  • ينفّذ MutableVector الآن ميزة المقالة العشوائية (I85d73، b/170461551).
  • تمت إضافة SideEffect القابل للإنشاء لتطبيق الآثار الجانبية للمكوّنة على العناصر التي تديرها التركيبة. يُستخدم SideEffect بدلاً من عنصر onCommit القابل للإنشاء. (Ia77c2)
  • واجهة برمجة تطبيقات تجريبية جديدة في RestorableStateHolder. تسمح هذه السياسة بحفظ الحالة المحددة باستخدام [savedInstanceState] و[rememberSavedInstanceState] للشجرة الفرعية قبل التخلص منه، حتى يمكن إنشاؤها مجددًا في المرة القادمة بالحالة التي تمت استعادتها. (I66884، b/166586419)

إصلاح الأخطاء

  • يمكنك تفعيل عمليات الانتقال في ComposeTestRule مع مراعاة إزالة خيار تفعيل المؤشر الوامض من ComposeTestRules. (If0de3)

الإصدار 1.0.0-alpha05

14 تشرين الأول (أكتوبر) 2020

تم طرح "androidx.compose.runtime:runtime-*:1.0.0-alpha05". يحتوي الإصدار 1.0.0-alpha05 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • معدِّل الإدخال التجريبي Modifier.pointerInput (Ia77d2)
  • يتم تحسين أداء التمرير في العمود الكسول/الصف من خلال تقليص الوقت الذي يتم تنفيذه في البنية الفرعية في كل عملية تمرير. تمت إضافة طريقة has validations() الجديدة لفئة التركيبة. تمت إعادة تسمية طريقة hasPendingChanges() من Recomposer إلى hasInvalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371)
  • إضافة productState API لإطلاق الكوروتينات من تركيبة تعدّل قيمة State<T> واحدة بمرور الوقت (Id4a57)
  • تمت إعادة تسمية runIn للتأكيد على 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)
  • تمت إضافة ProtectedStateOf API لإنشاء كائنات State استنادًا إلى عملية حسابية قد تقرأ (وتستمد منها) كائنات State الأخرى (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 وأصبحوا الآن يعرض سلوك onPreCommit.

    يتم تشغيل 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 الآن المرسل الافتراضي من التركيبة بدلاً من الإعداد الافتراضي على Dispatchers.Main. (I9c1d9)

  • يحدث عطل عند استخدام عنصر يحفظ الحالة داخل التكرار الحلقي for. يُسمح الآن باستخدام المفتاح نفسه في savedInstanceState() ، ويتم الآن تعديل واجهة برمجة تطبيقات UiSavedStateRegistry وفقًا لهذا الشرط الجديد (I4ab76 وb/160042650 وb/156853976 وb/159026663 وb/154920561)

إصلاح الأخطاء

  • تم إيقاف emitView نهائيًا. استخدِم AndroidView بدلاً من ذلك إذا كان ذلك ممكنًا لنشر المشاهدات داخل سياسة ComposeAllowed. تجدر الإشارة إلى أنّ إنشاء طرق العرض وViewGroups بشكل مباشر لن يكون متاحًا في المستقبل ما لم يتم نقلها في شجرة الإنشاء، وذلك في حال كان ذلك ممكنًا باستخدام 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 لـ يدويAnimationClock الآن متاحاً يدويًا: يدوي إطار Clock. (I111c7، b/161247083)

  • تمت إعادة صياغة Modifier.stateDraggable بالكامل وتمت إعادة تسميتها إلى Modifier.s الماليةable. تم تقديم فئة ScrollableState جديدة، وتمت إعادة هيكلة DrawerState وBottomDrawerState ليكتسب منهما. [Modal/Bottom]رسم مخطط لم يعد يشغل معلمة 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. 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 من Compose، عليك تعديل تبعياتك وفقًا لمقتطفات الرمز الجديدة الموضّحة أعلاه في قسم توضيح التبعيات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف تعليق @Model التوضيحي نهائيًا. استخدِم State وmutableStateOf كبدائل. تم التوصل إلى قرار الإيقاف هذا بعد الكثير من المناقشات الدقيقة.

    السبب

    وتشمل الأسباب، على سبيل المثال لا الحصر:

    • تقليل مساحة عرض واجهة برمجة التطبيقات والمفاهيم التي نحتاج إلى تدريسها
    • يتوافق بشكل وثيق مع مجموعات الأدوات الأخرى المشابهة (مثل Swift و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: استخدام mutableStateOf وتفويض الملكية

    وقد أصبح هذا الأسلوب أكثر سهولة باستخدام تفويضات المواقع الإلكترونية في 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/143163။

  • تعمل هذه السياسة على تغيير استراتيجية إنشاء الرموز البرمجية في برنامج التجميع من Compose. قبل التغيير، كان التحويل البرمجي للإنشاء يقوم بتحويل عمليات الاستدعاء إلى دوال قابلة للإنشاء. بفضل هذا التغيير، نحوِّل الآن نص الدالة القابلة للإنشاء ونترك موقع الاستدعاء بدون تغيير (في الغالب).

    وهذا يعني أن معظم المنطق الذي يتصل بوقت تشغيل الإنشاء يحدث في بداية نص الدالة، بدلاً من موقع الاستدعاء.

    ويجب أن يكون هذا التغيير متوافقًا مع المصدر في كل استخدامات إنشاء المحتوى. نتيجةً لهذا التغيير، لن يتعيّن على معظم المستخدمين في نافذة إنشاء الرسائل تعديل أي رموز.

    لدعم هذا العمل، تم تغيير توقيع JVM لجميع الدوال القابلة للإنشاء. يتم تحويل الدالة القابلة للإنشاء التي تقبل معلمة واحدة إلى دالة تقبل 3 معلَمات، والمعلَمات الإضافية هي Composer، وهو عدد صحيح لـ "المفتاح"، وهو عدد صحيح لقناع بت يُستخدم لنشر البيانات الوصفية من خلال الاستدعاءات.

    تعمل ميزة Compose الآن على تحويل الوسيطات التلقائية إلى دالة قابلة للإنشاء. ويتم ذلك بدون تقديم حمل تلقائي إضافي اصطناعي للدالة نفسها، لذلك سيؤدي هذا التغيير إلى تحديد دوال أقل.

    التغيّرات السلوكية المقصودة المعروفة الناتجة عن ما يلي:

    1. سيتم تخطي بعض المكالمات من حيث لم يكن يتم إجراؤها في السابق
    2. يتم الآن الاشتراك في التعبيرات القابلة للإنشاء في تعبيرات الوسيطات التلقائية ومعالجتها بشكل صحيح.

    تضمّن هذا العمل بعض التحسينات: 1. يتم نشر نتيجة مقارنات المَعلمات من خلال الرسم البياني للاستدعاءات إلى دوال أخرى قابلة للإنشاء. سيؤدي ذلك إلى إجراء مقارنات أقل في وقت التشغيل، وتقليل حجم جدول الخانة، وزيادة عدد تخطي الدوال القابلة للإنشاء التي لم يتم تخطيها في السابق. 2. لن تتم بعد ذلك مقارنة أو تخزين المعلَمات التي تكون "ثابتة" في وقت التشغيل في وقت التشغيل. وهذا يقلل من عدد المقارنات ويقلل من حجم جدول الخانة. 3. تُستخدم بنية تدفق التحكم في نص الدوال لخفض عدد المجموعات التي يتم إنشاؤها. يقلل ذلك من حجم جدول الخانة وينتج عنه جهد أقل في وقت التشغيل. 4- لا يتم تضمين معلمات الإرسال والاستقبال غير المستخدمة إلى الدوال في تحديد قابلية تخطي الدالة إذا لم يتم استخدامها داخل نص الدالة.

    معظم التغييرات التي قد تؤدي إلى الأعطال كانت متعلّقة بواجهات برمجة التطبيقات التي يستهدفها برنامج التجميع مباشرةً، ولن يتأثر الاستخدام النموذجي لميزة "إنشاء": 1. تمت إزالة Composer::startExpr. 2- تمت إزالة Composer::endExpr. 3. Composer::call تم إيقافه نهائيًا 4. تمّت إزالة الحمولات الزائدة غير المتغيّرة في key. يُرجى استخدام إصدار "vararg" من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي المحوري نهائيًا. استخدِم "key" كبديل. 6. تم تغيير ScopeUpdateScope::updateScope لتوقُّع استخدام Function3 بدلاً من Function1. 7. تم تعديل RereableFunction وRestoreableFunctionN من أجل تضمين معلَمات إضافية لوقت تجميع البيانات. (I60756، b/143464846)

  • تمت إضافة sortWith و removeRange إلى MutableVector (Icccf7)

  • تمت إضافة عمليات تنفيذ الطريقة التلقائية لـ ChooseLifecycleMonitorer (I24289).

  • يتطلب Applier الآن طريقة clear() للتخلص من التركيبات (Ibe697).

  • تمت إضافة asMutableList() إلى MutableVector للسماح بتمريرها إلى واجهة برمجة تطبيقات عامة بدون الحاجة إلى نسخ القائمة بأكملها. (I298df)

  • تمت إضافة cleanCoroutineScope() للحصول على CoroutineScope في التكوين الخاص بإطلاق المهام استجابةً للأحداث. (I0e264)

  • MutableVector هي مجموعة جديدة لا تنفّذ أيًّا من واجهة المجموعة العادية. توفر هذه المجموعة سرعة أعلى من المتطلبات الأخرى والغرض منها استخدامها فقط في عمليات التنفيذ الداخلية. (I8ebd6)

  • تمت إزالة StableMutableList وStableMutableMap مؤقتًا لتجنّب حدوث مشكلة في إصدار Kotlin Compose. وستتم إعادة تقديم هذه الواجهات عند تحديث الكتابة إلى إصدار من Kotlin لا يتضمّن المشكلة.

    أصبح SnapshotStateList وSnapshotStateMap متاحَين للجميع الآن، ولكن سيتم إيقافهما نهائيًا بعد استعادة StableMutableList وStableMutableMap. (Ia7769)

  • إضافة دالة withFrameNanos ذات المستوى الأعلى لتوقيت الرسوم المتحركة (Ie34c5)

  • تم إيقاف التعليق التوضيحي @غير المتتبّع. استبدال بـ @ComposableContract(tracked=false) (Id211e)

  • تمت إعادة تسمية RepeatableFunction وواجهات برمجة التطبيقات المرتبطة بها إلى 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)

  • تمت إضافة محوِّل للتدفق. مثال على الاستخدام: val value by flow.collectAsState() (If2198, b/153375923)

  • [Mutable]تم نقل عوامل التشغيل المفوَّضة إلى المواقع الإلكترونية في الولاية إلى الإضافات لإتاحة تحسينات تفويض المواقع الإلكترونية في Kotlin 1.4. على المتصلين إضافة عمليات استيراد لمواصلة استخدام "by state { ... }" أو "by mutableStateOf(...)". (I5312c)

  • تم نقل androidx.compose.ViewComposer إلى androidx.ui.node.UiComposer تمت إزالة androidx.compose.Emittable. حيث كانت متكررة مع ComponentNode. وتمت إزالة androidx.compose.ViewAdapters. ولم تعُد حالة استخدام متوافقة. تم إيقاف Compose.composeInto نهائيًا. يمكنك استخدام setContent أو setViewContent بدلاً منها. تم إيقاف Compose.disposition Compose نهائيًا. يُرجى استخدام طريقة dispose على Composition التي يعرضها setContent بدلاً من ذلك. تم نقل androidx.compose.Compose.subcomposeInto إلى androidx.ui.core.subcomposeInto

  • تم تحديث العلامة ComposeFlags.COMPOSER_PARAM لتصبح true، ما سيؤدي إلى تغيير استراتيجية إنشاء الرموز للمكوِّن الإضافي الإنشاء. يؤدي هذا المستوى العالي إلى إنشاء دوال @Composable باستخدام مَعلمة اصطناعية إضافية يتم تمريرها إلى استدعاءات @Composable اللاحقة لكي يتمكن وقت التشغيل من إدارة عملية التنفيذ بشكل صحيح. ومع ذلك، يجب أن يحافظ هذا التغيير على التوافق مع مستوى المصدر في جميع استخدامات الإنشاء الخاضعة لقيود. (I7971c)

  • تم إجراء تغييرات على واجهة برمجة التطبيقات في أجواء الإضاءة المحيطة. اطّلِع على السجلّ ومستندات Ambient<T> للحصول على التفاصيل (I4c7ee، b/143769776)

  • تمت إضافة بيانات فعالية واجهة المستخدم - عنصر جديد مع محوّل لميزة LiveData. مثال على الاستخدام: قيمة val من خلالliveData.observeAsState() (Ie9e8c، b/150465596)

  • تم إيقاف محوّلات Rx التي لا تحتوي على قيمة مبدئية صريحة. استخدام القيمة "فارغ" ليس دائمًا أفضل خيار تلقائي، على سبيل المثال، عندما يكون لديك "قائمة"، من الأفضل أن تبدأ بـ فارغةList() أو أي قيمة تلقائية أخرى معقولة (I00025، b/161348384).

  • تمت إضافة ui-rxjava2 - عنصر جديد به محوّلات لـ RxJava2. مثال على الاستخدام: قيمة val من خلال observable.subscribeAsState() (Ifab4b, b/153369097)

  • يمكن الآن استخدام savedInstanceState() مع الأنواع القابلة للقيم الفارغة (I6847f وb/153532190).

  • جديدان listSaver() وmapSaver() لتسهيل كتابة كائنات التوفير المخصصة (I8cf68، b/152331508)

  • الدوال الجديدة: savedInstanceState() وsavedInstanceState(). تتشابه هذه الدوال مع State() وتذكر() ولكن لها إصدار دعم من حالة المثيل المحفوظة (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).
  • تمت إزالة واجهة برمجة التطبيقات DrawBackground المتوقّفة نهائيًا لصالح واجهة برمجة التطبيقات drawBackground الخاصة بإضافات التطبيق على Modifier. عمليات إعادة تصميم الخلفية باستخدام الألوان والفرشاة والطلاء لتقليل مسارات الرموز بالإضافة إلى إزالة متطلبات إنشاء أداة التعديل كجزء من عملية الإنشاء. (I0343a)
  • تم تحديث واجهات برمجة التطبيقات ذات المستوى الأعلى التي تعرض "لوحة الرسم" لعرض CanvasScope بدلاً من ذلك. يؤدي ذلك إلى إزالة حاجة المستهلكين إلى الحفاظ على كائنات الطلاء الخاصة بهم. بالنسبة إلى المستهلكين الذين ما زالوا يطلبون الوصول إلى لوحة رسم، يمكنهم استخدام طريقة إضافة drawCanvas التي توفر معاودة اتصال لإصدار أوامر الرسم من لوحة الرسم الأساسية. (I80afd)
  • تم تغيير واجهة برمجة التطبيقات اللاحقة لـ lambda في WithConstraints. والآن، بدلًا من معلّمتين، يتوفر نطاق للمستلم (بالإضافة إلى القيود) وLayoutDirection يوفِّر خصائص min width وmax width وminHeight وmaxHeight في Dp (I91b9a وb/149979702).
  • تمت إضافة أداة تعديل المساحة المتروكة. (I39840)
  • تم تحديث wrapContentDisplay وwrapContentHeight لتوقُّع محاذاة رأسية أو أفقية بدلاً من أي محاذاة. تم تحديث مُعدِّل الجاذبية لقبول المحاذاة العمودية أو الأفقية. تم تحديث الصف والعمود والحزمة لإتاحة عمليات المحاذاة المستمرة المخصّصة. (Ib0728)
  • تمت إعادة تسمية وحدة ui-text باسم ui-text-core (I57dec).
  • تحسين DrawModifier API:
    • تم إنشاء نطاق المستلم لـ draw() ContentDrawScope
    • تمت إزالة جميع المعلمات في draw()
    • يحتوي DrawScope على الواجهة نفسها المُستخدَمة في تطبيق CanvasScope.
    • يحتوي ContentDrawScope على طريقة drawContent() (Ibaced، b/152919067)
  • تم إيقاف ColoredRect نهائيًا. يمكنك استخدام Box(Modifier.preferredSize(width, height).drawBackground(color)) كبديل. (I499fa، b/152753731)
  • تم استبدال عامل التشغيل بالإضافة إلى التعديل بوظائف الإضافة على الإعدادات الأصلية (I225e4)
  • يمكن الآن الوصول إلى أعضاء RowScope والعمود "نطاق العمود" خارج الصف والعمود. (I3a641)
  • تمت إعادة تسمية Layout Flex إلى Layout Weight (وزن التخطيط). تمت إعادة تسمية المعلمة المحدودة للتعبئة. (If4738)
  • حصلت WithConstraints على معلمة LayoutDirection (I6d6f7)
  • تمت إعادة تسمية الخلفية إلى DrawBackground وجعلها قابلة لحفظها بشكل تلقائي (Ia0bd3).
  • تم استبدال ButtonStyle بدوال مميزة وإزالة الحمل الزائد للنص (سلسلة نصية). يمكنك الاطّلاع على النماذج المعدَّلة للحصول على معلومات الاستخدام. (If63ab وb/146478620 وb/146482131)
  • runOnIdleCompose وrunOnUiThread هما الآن دالتان عموميتان بدلاً من الطرق في ComposeTestRules. (Icbe8f)

المساهمة الخارجية

  • إزالة واجهة برمجة التطبيقات غير الضرورية مثل Looper وHandler من طبقة النقل في وقت التشغيل Compose (I6847d)
  • إيقاف Flow<T>.collectAsState() بدون قيمة مبدئية استخدِم StateFlow<T> أو مرِّر قيمة مبدئية صريحة بدلاً منها. (I63f98، b/157674865)