وقت تشغيل Android وDalvik

"مُشغِّل Android للوقت الفعلي" (ART) هو مُشغِّل الوقت الفعلي المُدار الذي تستخدمه التطبيقات وبعض خدمات النظام على Android. تم إنشاء ART وسابقه Dalvik في الأساس خصيصًا لمشروع Android. ويعمل ART بصفتها وقت التشغيل على تنفيذ تنسيق Dalvik القابل للتنفيذ (DEX) ومواصفات رمز برمجي DEX.

إنّ ART وDalvik هما منصّتا تشغيل متوافقتان تعملان على رمز برمجي DEX، لذا من المفترض أن تعمل التطبيقات التي تم تطويرها باستخدام Dalvik عند تشغيلها باستخدام ART. ومع ذلك، لا تعمل بعض التقنيات التي تعمل على Dalvik على ART. للحصول على معلومات عن المشاكل الأكثر أهمية، يُرجى الاطّلاع على مقالة التحقّق من سلوك التطبيق على "مُشغِّل Android للوقت الفعلي" (ART).

ميزات ART

في ما يلي بعض الميزات الرئيسية التي تنفّذها أداة ART.

التجميع المُسبَق (AOT)

توفّر أداة ART ميزة الترجمة المسبقة (AOT) التي يمكنها تحسين أداء التطبيقات. تفرض أداة ART أيضًا إجراءات تحقّق أكثر صرامة في وقت التثبيت مقارنةً بأداة Dalvik.

في وقت التثبيت، يُجمِّع ART التطبيقات باستخدام أداة dex2oat على الجهاز. تقبل هذه الأداة ملفات DEX كإدخال وتُنشئ ملفًا تنفيذيًا للتطبيق المجمَّع على الجهاز المستهدَف. من المفترض أن تتمكّن الأداة من compilingجميع ملفات DEX الصالحة بدون صعوبة. ومع ذلك، تُنشئ بعض أدوات ما بعد المعالجة ملفات غير صالحة قد يقبلها Dalvik ولكن لا يمكن تجميعها بواسطة ART. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة معالجة مشاكل جمع المهملات.

ميزة جمع البيانات المهملة المحسَّنة

تتطلّب ميزة "جمع المهملات" موارد كثيرة جدًا، ما قد يؤثر في أداء التطبيق، ويؤدي إلى عدم سلاسة العرض وضعف استجابة واجهة المستخدم وغيرها من المشاكل. تحسِّن أداة ART عملية جمع القمامة بطرق متعددة:

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

تحسينات على التطوير وتصحيح الأخطاء

يوفّر ART عددًا من الميزات لتحسين تطوير التطبيقات وتصحيح الأخطاء فيها.

إتاحة أداة تحليل الأداء بالاستناد إلى عيّنات

في السابق، كان المطوّرون يستخدمون أداة Traceview (المصمّمة لتتبُّع تنفيذ التطبيق) كمحلِّل. على الرغم من أنّ Traceview يوفّر معلومات مفيدة، فقد تم تشويه نتائجه على Dalvik بسبب النفقات العامة لكلّ طلب أسلوب، ويؤثّر استخدام هذه الأداة بشكل ملحوظ في أداء وقت التشغيل.

توفّر أداة ART إمكانية استخدام أداة تحليل ملفّات تعريف الأداء المخصّصة التي لا تفرض هذه القيود. ويقدّم ذلك عرضًا أكثر دقة لتنفيذ التطبيق بدون تباطؤ ملحوظ. تمت إضافة ميزة أخذ عيّنات إلى Traceview لمعالجة برمجة Dalvik في إصدار KitKat.

إتاحة المزيد من ميزات تصحيح الأخطاء

يتيح ART عددًا من خيارات تصحيح الأخطاء الجديدة، لا سيما في الوظائف المتعلّقة بالمراقبة وجمع القمامة. على سبيل المثال، يمكنك إجراء ما يلي:

  • اطّلِع على الأقفال التي يتم الاحتفاظ بها في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية، ثم انتقِل إلى الخيط الذي يحتفظ بقفل.
  • اسأل عن عدد النُسخ النشطة لفئة معيّنة، واطلب الاطّلاع على النُسخ، ومعرفة الإحالات التي تحافظ على تنشيط العنصر.
  • فلترة الأحداث (مثل نقطة التوقف) لحالة معيّنة
  • الاطّلاع على القيمة التي تعرضها إحدى الطرق عند الخروج (باستخدام أحداث "مغادرة الطريقة"
  • اضبط نقطة مراقبة الحقل لإيقاف تنفيذ برنامج عند الوصول إلى حقل معيّن و/أو تعديله.

تفاصيل تشخيص محسّنة في تقارير الأعطال والاستثناءات

يمنحك ART أكبر قدر ممكن من السياق والتفاصيل عند حدوث استثناءات وقت التشغيل. يوفّر ART تفاصيل موسّعة عن الاستثناءات في java.lang.ClassCastException وjava.lang.ClassNotFoundException وjava.lang.NullPointerException. (قدّمت الإصدارات الأحدث من Dalvik تفاصيل موسّعة عن استثناءَي java.lang.ArrayIndexOutOfBoundsException وjava.lang.ArrayStoreException، واللذين يتضمّنان الآن حجم الصفيف وقيمة الإزاحة خارج الحدود، وART يفعل ذلك أيضًا).

على سبيل المثال، يعرض java.lang.NullPointerException الآن معلومات حول ما كان يحاول التطبيق تنفيذه باستخدام المؤشر غير الصالح، مثل الحقل الذي كان يحاول التطبيق الكتابة فيه أو الأسلوب الذي كان يحاول استدعائه. وإليكم بعض الأمثلة:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

توفّر أداة ART أيضًا معلومات سياق محسّنة في تقارير الأعطال الأصلية للتطبيقات، من خلال تضمين معلومات كلّ من Java و"الرمز البرمجي الأصلي".

الإبلاغ عن المشاكل

إذا واجهت أي مشاكل غير متعلّقة بمشاكل JNI في التطبيق، يُرجى الإبلاغ عنها من خلال أداة تتبُّع مشاكل مشاريع الإصدار المفتوح من Android. أدرِج adb bugreport ورابطًا يؤدي إلى التطبيق في "متجر Google Play" إذا كان متوفّرًا. بخلاف ذلك، يمكنك إرفاق ملف APK يؤدي إلى إعادة ظهور المشكلة، إن أمكن.