Android Runtime (ART) ו- Dalvik

זמן ריצה של Android (ART) הוא זמן הריצה המנוהל בו משתמשים יישומים וכמה שירותי מערכת באנדרואיד. ART וקודמו דלוויק נוצרו במקור במיוחד עבור פרויקט אנדרואיד. ART כשזמן הריצה מבצע את הפורמט ההפעלה של דלוויק ואת מפרט ה- bytecode של דקס.

ART ו- Dalvik תומכים בזמני ריצה המפעילים את bytecode של Dex, כך שאפליקציות שפותחו עבור Dalvik צריכות לעבוד כאשר הן פועלות עם ART. עם זאת, כמה טכניקות שעובדות על Dalvik אינן עובדות על ART. למידע על הנושאים החשובים ביותר, ראה אימות התנהגות האפליקציה בזמן הריצה של Android (ART) .

תכונות ART

להלן כמה מהתכונות העיקריות המיושמות על ידי ART.

אוסף לפני הזמן (AOT)

ART מציג אוסף מבעוד מועד (AOT), שיכול לשפר את ביצועי האפליקציות. ל- ART יש גם אימות זמן התקנה הדוק יותר מ- Dalvik.

בזמן ההתקנה, ART אוסף אפליקציות באמצעות הכלי dex2oat שבמכשיר. כלי עזר זה מקבל קבצי DEX כקלט ויוצר אפליקציית הידור מורכבת למכשיר היעד. כלי השירות אמור להיות מסוגל לאסוף את כל קבצי DEX תקפים ללא קושי. עם זאת, כמה כלים לאחר עיבוד מייצרים קבצים לא חוקיים שעשויים להיות נסבלים על ידי דלוויק, אך לא ניתן להרכיב אותם על ידי ART. לקבלת מידע נוסף, ראה טיפול בבעיות איסוף אשפה .

איסוף אשפה משופר

איסוף האשפה (GC) הוא מאוד עתיר משאבים, מה שעלול לפגוע בביצועים של אפליקציה, וכתוצאה מכך תצוגה סוערת, היענות ממשק משתמש ירודה ובעיות אחרות. ART משפר את איסוף האשפה בכמה דרכים:

  • בעיקר עיצוב במקביל עם הפסקת GC אחת
  • העתקה במקביל להפחתת השימוש בזיכרון הרקע ופיצולו
  • אורך הפסקת ה- GC אינו תלוי בגודל הערמה
  • אספן עם זמן GC נמוך יותר למקרה המיוחד של ניקוי אובייקטים קצרי מועד שהוקצו לאחרונה
  • ארגונומיה משופרת של איסוף האשפה, מה שהופך את אוספי האשפה במקביל GC_FOR_ALLOC יותר, מה שהופך את אירועי GC_FOR_ALLOC לנדירים ביותר במקרי שימוש אופייניים

שיפורים בפיתוח וניקוי באגים

ART מציעה מספר תכונות לשיפור פיתוח אפליקציות וניפוי באגים.

תמיכה בפרופיל הדגימה

היסטורית, מפתחים השתמשו בכלי Traceview (המיועד למעקב אחר ביצוע יישומים) כפרופילר. בעוד ש- Traceview נותן מידע שימושי, התוצאות שלו ב- Dalvik הוטו על ידי התקורה לשיחה לפי שיטה, והשימוש בכלי משפיע בצורה ניכרת על ביצועי זמן הריצה.

ART מוסיף תמיכה בפרופיל דגימה ייעודי שאין לו מגבלות אלה. זה נותן תצוגה מדויקת יותר של ביצוע האפליקציה ללא האטה משמעותית. תמיכה לדגימה נוספה ל- Traceview עבור Dalvik במהדורת KitKat.

תמיכה בתכונות איתור באגים נוספות

ART תומך במספר אפשרויות איתור באגים, במיוחד בפונקציונליות הקשורה לאיסוף אשפה. לדוגמה, תוכל:

  • ראה אילו מנעולים מוחזקים עקבות מחסנית, ואז קפץ לחוט המחזיק מנעול.
  • שאל כמה מקרים חיים יש בכיתה נתונה, בקש לראות את המקרים, וראה אילו הפניות מחזיקות אובייקט חי.
  • סנן אירועים (כמו נקודת הפסקה) למופע ספציפי.
  • ראה את הערך שהוחזר על ידי שיטה בעת יציאתו (באמצעות אירועי "method-exit").
  • הגדר נקודת תצפית שדה שתשהה את ביצוע התוכנית כאשר נגיש ו / או שונה שדה ספציפי.

פרט אבחון משופר בחריגים ובדוחות קריסה

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 המשכפל את הבעיה.