כדי ליצור מעקב שיטת מעקב אחר ביצוע האפליקציה, אפשר להגדיר כלים לאפליקציה
באמצעות Debug
בכיתה. הטמעת הכלי באפליקציה בדרך הזו מעניקה לכם שליטה רבה יותר על הזמן המדויק שבו המכשיר מתחיל ומפסיק להקליט את פרטי המעקב. המכשיר גם שומר את יומני המעקב באמצעות השמות שציינתם, כדי שתוכלו לזהות בקלות כל יומן מאוחר יותר. לאחר מכן תוכלו להציג כל יומן מעקב באמצעות כלי הניתוח של מעבדים (CPU) ב-Android Studio.
אפשר גם איך מתחילים ומפסיקים את המעקב בכלי לניתוח ביצועי ה-CPU בלי לבצע אינסטרומנטציה לקוד של האפליקציה.
לפני שמתחילים ליצור יומני מעקב, צריך לוודא שלאפליקציה נוספה לוגיקה ל לשמור את יומני המעקב באפליקציה הספציפית לספרייה.
הוספת מודולים לאפליקציה
כדי ליצור יומני מעקב, צריך להפעיל את startMethodTracing()
במקום שבו רוצים שהמערכת תתחיל לתעד את נתוני המעקב.
בשיחה, תוכלו לציין את השם של
קובץ .trace
, והמערכת שומרת אותו בקובץ ספציפי לחבילה
שמיועדת לנתוני אפליקציה קבועים במכשיר היעד –
את אותה ספרייה שמוחזרת
getExternalFilesDir()
והוא נמצא בספרייה ~/sdcard/
ברוב המכשירים.
הקובץ הזה מכיל את נתוני המעקב אחר שיטות הבינאריות וטבלת מיפוי עם שמות של שיטות ותהליכים. כדי להפסיק את המעקב, קוראים לפונקציה stopMethodTracing()
.
הדוגמה הבאה מתחילה ומפסיקה לתעד יומן מעקב עם השם
sample.trace
:
Kotlin
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample") // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing()
Java
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample"); ... // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing();
חשוב לזכור שאם האפליקציה קוראת שוב לפונקציה startMethodTracing()
בלי לשנות את השם של יומן המעקב, היא מחליפה את היומן הקיים שנשמר במכשיר. בקטע שמירה של מספר יומנים מוסבר איך לשנות באופן דינמי את השם של כל יומן מעקב.
אם המערכת תגיע לגודל המקסימלי של מאגר הנתונים הזמני לפני השיחה
stopMethodTracing()
,
המערכת מפסיקה את המעקב ושולחת התראה למסוף.
השיטות שמתחילות ומפסיקים את המעקב פועלות בכל התהליך של האפליקציה. כלומר, אפשר להפעיל את startMethodTracing()
ב-method onCreate(Bundle)
של הפעילות, ולהפעיל את stopMethodTracing()
ב-method onDestroy()
של הפעילות.
לתשומת ליבכם: האפליקציה תפעל לאט יותר כשהפרופיל יהיה מופעל. כלומר, את/ה
אסור להשתמש בנתוני הפרופיילינג כדי לקבוע תזמונים מוחלטים (למשל,
הרצת foo()
נמשכת 2.5 שניות"). פרטי התזמון ביומני המעקב הם
שימושי רק כשמשווים אותו ליומני מעקב קודמים, כך שאפשר לראות אם
השינויים הופכים את האפליקציה למהירה או להאטית יותר.
כשפורסים במכשירים עם Android מגרסה 5.0 (רמת API 21) ואילך, אפשר להשתמש בפרופיל מבוסס-טעימות כדי ליצור פרופיל עם השפעה פחותה על ביצועי זמן הריצה. כדי להפעיל יצירת פרופיל לדגימה, צריך להפעיל את הפונקציה startMethodTracingSampling()
(במקום להפעיל את הפונקציה startMethodTracing()
) עם פרק זמן ספציפי לדגימה. המערכת אוספת דגימות מדי פעם עד שהאפליקציה קוראת ל-stopMethodTracing()
.
שמירה של מספר יומנים
אם האפליקציה מתחילה ומפסיקה מעקב אחר שיטות כמה פעמים בלי לציין שם חדש ליומן המעקב, המכשיר מחליף את יומן המעקב הישן ביומן החדש – כלומר, נשמר רק יומן המעקב העדכני ביותר. כדי לשמור כמה פריטים
מעקב אחר יומנים במכשיר שלך, שינוי שם באופן דינמי של יומן המעקב בכל פעם שהאפליקציה
קוראת אל startMethodTracing()
.
בדוגמה הבאה נעשה שימוש בכיתה SimpleDateFormat
כדי לכלול את התאריך והשעה הנוכחיים בשם של כל יומן מעקב:
Kotlin
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()) val logDate: String = dateFormat.format(Date()) // Applies the date and time to the name of the trace log. Debug.startMethodTracing("sample-$logDate")
Java
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()); String logDate = dateFormat.format(new Date()); // Applies the date and time to the name of the trace log. Debug.startMethodTracing( "sample-" + logDate);
גישה ליומני המעקב במכשיר
אחרי שהמערכת תיצור את יומן המעקב במכשיר שלכם, תוכלו לגשת לקובץ באחת מהדרכים הבאות:
שימוש בכלי לניתוח מכשירים. כדי לפתוח את סייר המכשירים, לוחצים על תצוגה > Windows בכלי > Device Explorer (או לוחצים על סייר המכשירים
בסרגל שבחלון של הכלי). כפי שמוצג באיור 1 אפשר למצוא את הקבצים של
.trace
על ידי מעבר אל ספרייה ספציפית לחבילה.איור 1. איתור יומני המעקב באמצעות Device Explorer.
מעתיקים את הקובץ למכונה המקומית באמצעות הפקודה
adb pull
. הפקודה שבהמשך מעתיקה יומן מעקב בשםsample.trace
מהמכשיר אל את הספרייה~/Documents/trace-logs/
במכונה המקומית.adb pull path-on-device/sample.trace ~/Documents/trace-logs/
לאחר מכן תוכלו לייבא את קובץ המעקב באמצעות הכלי לניתוח מעבדים.