إذا كنت تواجه مشكلات في الأداء تنتج عن يجب تصحيح أخطاء استقرار تطبيقك. هذا الدليل وتحدد عدة طرق للقيام بذلك.
أداة فحص التنسيقات
تتيح لك "أداة فحص التنسيق" في "استوديو Android" معرفة العناصر القابلة للإنشاء إعادة التركيب في تطبيقك. يعرض عدد المرات التي تحتوي فيها Compose على تمت إعادة إنشاء أو تخطي مكوِّن.
إنشاء تقارير المُجمّعين
يمكن للمحول البرمجي للإنشاء إخراج نتائج استنتاج استقراره الفحص. باستخدام هذا الناتج، يمكنك تحديد أي من العناصر القابلة للإنشاء القابلة للتخطي وتلك غير القابلة للتخطي. وتلخص الأقسام الفرعية التالية كيفية استخدام هذه ولكن لمزيد من التفاصيل، يرجى مراجعة المراجع الفنية ذات الصلة.
ضبط إعدادات الجهاز
ميزة إنشاء تقارير التجميع غير مفعَّلة تلقائيًا. يمكنك تفعيلها باستخدام
علامة برنامج التجميع. ويختلف الإعداد الدقيق حسب
ولكن بالنسبة للمشروعات التي تستخدم المكون الإضافي لـ Compose المؤلف من Gradle، يمكنك
عليك إضافة ما يلي في كل ملف build.gradle
وحدة.
android { ... }
composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_compiler")
metricsDestination = layout.buildDirectory.dir("compose_compiler")
}
سيتم الآن إنشاء تقارير التجميع أثناء إنشاء مشروعك.
مثال على الناتج
وتُخرج reportsDestination
ثلاثة ملفات. في ما يلي أمثلة على النتائج.
من JetSnack.
<modulename>-classes.txt
: تقرير عن استقرار الفئات في هذه واحدة. النموذج:<modulename>-composables.txt
: تقرير حول مدى قابلية إعادة التشغيل تكون العناصر القابلة للإنشاء قابلة للتخطي في الوحدة. النموذج:<modulename>-composables.csv
:إصدارCSV
من تقرير العناصر القابلة للإنشاء يمكنك استيرادها إلى جدول بيانات أو معالجتها باستخدام نص برمجي. نموذج
تقرير العناصر القابلة للإنشاء
يوضّح ملف composables.txt
بالتفصيل كل دالة قابلة للإنشاء للسمة المحددة
بما في ذلك استقرار معاملاتها، وما إذا كانت
وقابلة لإعادة التشغيل أو قابلة للتخطي. فيما يلي مثال افتراضي من
JetSnack:
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SnackCollection(
stable snackCollection: SnackCollection
stable onSnackClick: Function1<Long, Unit>
stable modifier: Modifier? = @static Companion
stable index: Int = @static 0
stable highlight: Boolean = @static true
)
إنّ محتوى SnackCollection
القابل للإنشاء هذا قابل لإعادة التشغيل بالكامل وقابل للتخطي
إِسْطَبْل وهذا أمر مفضل بشكل عام، على الرغم من أنه ليس إلزاميًا بالتأكيد.
من ناحية أخرى، لنلقِ نظرة على مثال آخر.
restartable scheme("[androidx.compose.ui.UiComposable]") fun HighlightedSnacks(
stable index: Int
unstable snacks: List<Snack>
stable onSnackClick: Function1<Long, Unit>
stable modifier: Modifier? = @static Companion
)
لا يمكن تخطّي عنصر HighlightedSnacks
القابل للإنشاء. ميزة "إنشاء المحتوى" لا تتخطّى هذا الإطار
أثناء إعادة التركيب. يحدث ذلك حتى في حالة عدم تغيير أي من معلماتها.
وسبب ذلك هو معلَمة unstable
، snacks
.
تقرير الفئات
يحتوي الملف "classes.txt
" على تقرير مشابه عن الصفوف في المستوى المحدَّد.
واحدة. المقتطف التالي هو إخراج الفئة Snack
:
unstable class Snack {
stable val id: Long
stable val name: String
stable val imageUrl: String
stable val price: Long
stable val tagline: String
unstable val tags: Set<String>
<runtime stability> = Unstable
}
كمرجع لك، في ما يلي تعريف Snack
:
data class Snack(
val id: Long,
val name: String,
val imageUrl: String,
val price: Long,
val tagline: String = "",
val tags: Set<String> = emptySet()
)
تم وضع علامة على Snack
كغير مستقرة بواسطة المحول البرمجي للإنشاء. هذا لأن نوع
المعلمة tags
هي Set<String>
. وهذا نوع غير قابل للتغيير، بالنظر إلى
ليس MutableSet
. في المقابل، تقتصر فئات المجموعات العادية، مثل Set, List
،
وMap
هما في النهاية واجهات. وبناءً على ذلك، قد تؤثر عملية التنفيذ الأساسية
قابلة للتغيير.
على سبيل المثال، يمكنك كتابة val set: Set<String> = mutableSetOf("foo")
. تشير رسالة الأشكال البيانية
يكون المتغير ثابتًا ونوعه المعلَن غير قابل للتغيير، ولكن
التنفيذ لا يزال قابلاً للتغيير. لا يمكن أن يتأكد المحول البرمجي للإنشاء من
غير قابل للتغيير في هذه الفئة حيث ترى النوع المعلَن فقط. وبالتالي فهي تحدد
مستوى tags
غير مستقر.