وقت تشغيل Android (ART) هو وقت التشغيل المُدار الذي تستخدمه التطبيقات وبعض خدمات النظام على Android. تم إنشاء ART وسابقه Dalvik في الأصل خصيصًا لمشروع Android. ART كوقت التشغيل ينفذ تنسيق Dalvik القابل للتنفيذ ومواصفات Dex bytecode.
ART و Dalvik هما وقت تشغيل متوافقين يعملان على Dex bytecode ، لذا يجب أن تعمل التطبيقات المطورة لـ Dalvik عند التشغيل باستخدام ART. ومع ذلك ، فإن بعض التقنيات التي تعمل على Dalvik لا تعمل على ART. للحصول على معلومات حول أهم المشكلات ، راجع التحقق من سلوك التطبيق في وقت تشغيل Android (ART) .
ميزات ART
فيما يلي بعض الميزات الرئيسية التي تنفذها ART.
تجميع قبل الوقت (AOT)
يقدم ART التجميع المسبق (AOT) ، والذي يمكن أن يحسن أداء التطبيق. لدى ART أيضًا تحققًا أكثر إحكامًا في وقت التثبيت من Dalvik.
في وقت التثبيت ، تقوم ART بتجميع التطبيقات باستخدام أداة dex2oat الموجودة على الجهاز. تقبل هذه الأداة المساعدة ملفات DEX كمدخلات وتقوم بإنشاء تطبيق مترجم قابل للتنفيذ للجهاز الهدف. يجب أن تكون الأداة المساعدة قادرة على تجميع جميع ملفات DEX الصالحة دون صعوبة. ومع ذلك ، فإن بعض أدوات ما بعد المعالجة تنتج ملفات غير صالحة قد يتسامح معها Dalvik ولكن لا يمكن تجميعها بواسطة ART. لمزيد من المعلومات ، راجع معالجة مشكلات تجميع البيانات المهملة .
تحسين جمع القمامة
تعتبر عملية جمع البيانات المهملة (GC) كثيفة الاستخدام للموارد ، مما قد يضعف أداء التطبيق ، مما يؤدي إلى عرض متقطع ، واستجابة ضعيفة لواجهة المستخدم ، ومشكلات أخرى. تعمل ART على تحسين عملية جمع القمامة بعدة طرق:
- تصميم متزامن في الغالب مع توقف GC واحد
- النسخ المتزامن لتقليل استخدام ذاكرة الخلفية والتجزئة
- طول إيقاف GC مستقل عن حجم الكومة
- أداة تجميع ذات وقت إجمالي أقل في GC للحالة الخاصة لتنظيف الكائنات قصيرة العمر المخصصة حديثًا
- بيئة عمل محسّنة لجمع القمامة ، مما يجعل عمليات جمع القمامة المتزامنة أكثر ملاءمة ، مما يجعل أحداث
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 Open Source Project Issue Tracker . قم بتضمين تقرير adb bugreport
وربطه بالتطبيق في متجر Google Play إذا كان ذلك متاحًا. بخلاف ذلك ، إذا أمكن ، أرفق ملف APK يعيد إظهار المشكلة.