تشخيص مشاكل الثبات

إذا كنت تواجه مشكلات في الأداء تنتج عن يجب تصحيح أخطاء استقرار تطبيقك. هذا الدليل وتحدد عدة طرق للقيام بذلك.

أداة فحص التنسيقات

تتيح لك "أداة فحص التنسيق" في "استوديو Android" معرفة العناصر القابلة للإنشاء إعادة التركيب في تطبيقك. يعرض عدد المرات التي تحتوي فيها Compose على تمت إعادة إنشاء أو تخطي مكوِّن.

إعادة هيكلة وتخطي أعداد في Layout Inspector (أداة فحص التنسيق)

إنشاء تقارير المُجمّعين

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

ضبط إعدادات الجهاز

ميزة إنشاء تقارير التجميع غير مفعَّلة تلقائيًا. يمكنك تفعيلها باستخدام علامة برنامج التجميع. ويختلف الإعداد الدقيق حسب ولكن بالنسبة للمشروعات التي تستخدم المكون الإضافي لـ 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 غير مستقر.