1- مقدمة
تاريخ آخر تعديل: 11/03/2021
لماذا نحتاج إلى قياس أداء المشاهدات؟
تُعد طرق العرض جزءًا أساسيًا من تطبيقات Android التي تؤثر بشكل مباشر في تجربة المستخدم. على سبيل المثال، يحتوي النشاط أو الجزء على واجهة المستخدم التي تحتوي على مكونات العرض التي يتفاعل معها المستخدمون. لا يمكن للمستخدمين رؤية محتوى واجهة المستخدم بالكامل حتى يتم رسمه بالكامل على الشاشة. ستؤدي الشاشات البطيئة والمجمّدة إلى إعاقة تفاعل المستخدم بشكل مباشر مع تطبيقك وترك انطباع سيئ لدى المستخدم.
هل توفّر ميزة "مراقبة أداء Firebase" مقاييس الأداء هذه بشكل فوري؟
تلتقط ميزة "مراقبة أداء Firebase" تلقائيًا بعض بيانات الأداء بطريقة غير تقليدية، مثل وقت بدء تطبيقك (أي وقت تحميل نشاطك الأول فقط) وأداء عرض الشاشة (أي اللقطات البطيئة والثابتة للأنشطة ولكن ليس للأجزاء). ومع ذلك، لا تتضمن التطبيقات المتعلقة بالمجال عادةً الكثير من الأنشطة، وإنما تتضمن نشاطًا واحدًا وأجزاءً متعددة. بالإضافة إلى ذلك، تنفذ العديد من التطبيقات عادةً طرق عرض مخصصة خاصة بها لحالات الاستخدام الأكثر تعقيدًا. لذلك، غالبًا ما يكون من المفيد فهم كيفية قياس وقت التحميل وأداء عرض الشاشة لكل من الأنشطة وأجزاء الأقسام عن طريق قياس أداء تتبُّع الرموز المخصّصة في تطبيقك. يمكنك بسهولة توسيع هذا الدرس التطبيقي حول الترميز لقياس أداء مكوّنات "العرض المخصّص".
المعلومات التي ستطّلع عليها
- كيفية إضافة ميزة "مراقبة أداء Firebase" إلى تطبيق Android
- فهم تحميل نشاط أو جزء
- طريقة قياس عمليات تتبُّع الرموز المخصّصة لقياس وقت تحميل نشاط أو جزء
- التعرّف على عرض الشاشة ومعنى الإطار البطيء أو المتجمد
- طريقة قياس عمليات تتبُّع الرموز المخصّصة باستخدام المقاييس لتسجيل الشاشات البطيئة/الثابتة
- كيفية عرض المقاييس التي تم جمعها في "وحدة تحكُّم Firebase"
المتطلبات
- الإصدار 4.0 من "استوديو Android" أو إصدار أحدث
- جهاز أو مُحاكي Android
- الإصدار 8 من Java أو إصدار أحدث
2- بدء الإعداد
الحصول على الرمز
شغِّل الأوامر التالية لاستنباط الرمز النموذجي لهذا الدرس التطبيقي حول الترميز. سيؤدي هذا الإجراء إلى إنشاء مجلد باسم "codelab-measure-android-view-performance
" على جهازك:
$ git clone https://github.com/FirebaseExtended/codelab-measure-android-view-performance.git
$ cd codelab-measure-android-view-performance
إذا لم يكن لديك git على جهازك، يمكنك أيضا تنزيل الكود مباشرة من GitHub.
استيراد مشروع measure-view-performance-start
إلى "استوديو Android" من المحتمل أن تظهر لك بعض الأخطاء في التجميع أو تحذيرًا بشأن عدم توفّر ملف google-services.json
. سوف نصحح هذا الخطأ في القسم التالي من هذه الخطوة.
في هذا الدرس التطبيقي، سنستخدم المكوّن الإضافي مساعد Firebase لتسجيل تطبيق Android في مشروع Firebase وإضافة ملفات الإعداد والمكوّنات الإضافية والتبعيات اللازمة على Firebase إلى مشروع Android، وكل ذلك من داخل "استوديو Android".
ربط تطبيقك بمنصّة Firebase
- الانتقال إلى استوديو Android/مساعدة > تحقَّق من وجود تحديثات للتأكّد من أنك تستخدم أحدث إصدار من "استوديو Android" و"مساعد Firebase".
- اختَر الأدوات >. Firebase لفتح لوحة مساعد Google.
- اختَر مراقبة الأداء لإضافته إلى تطبيقك، ثمّ انقر على بدء استخدام "مراقبة الأداء".
- انقر على الربط بمنصة Firebase لربط مشروع Android بمنصّة Firebase (سيؤدي ذلك إلى فتح "وحدة تحكُّم Firebase" في المتصفّح).
- في "وحدة تحكُّم Firebase"، انقر على إضافة مشروع، ثم أدخِل اسم مشروع Firebase (إذا كان لديك مشروع في Firebase حاليًا، يمكنك اختيار ذلك المشروع الحالي بدلاً من ذلك). انقر على متابعة واقبل البنود لإنشاء مشروع Firebase وتطبيق Firebase جديد.
- من المفترض أن يظهر بعد ذلك مربّع حوار من أجل ربط تطبيق Firebase الجديد بمشروعك على "استوديو Android".
- في "استوديو Android" ضِمن لوحة المساعد، من المفترَض أن تظهر لك رسالة تأكيد بأن تطبيقك مرتبط بمنصّة Firebase.
إضافة "مراقبة الأداء" إلى تطبيقك
في لوحة مساعد Google في "استوديو Android"، انقر على إضافة مراقبة الأداء إلى تطبيقك.
من المفترض أن يظهر لك مربّع حوار قبول التغييرات. بعد ذلك، من المفترض أن يُزامن "استوديو Android" تطبيقك لضمان إضافة جميع الاعتماديات اللازمة.
أخيرًا، من المفترض أن تظهر لك رسالة نجاح في لوحة مساعد Google في "استوديو Android" تفيد بأنّه تم إعداد جميع الاعتماديات بشكل صحيح.
وكخطوة إضافية، يمكنك تفعيل تسجيل تصحيح الأخطاء باتّباع التعليمات الواردة في الخطوة "(اختياري) تفعيل تسجيل تصحيح الأخطاء". وتتوفّر التعليمات نفسها أيضًا في المستندات العلنية.
3- تشغيل التطبيق
إذا نجحت في دمج تطبيقك مع حزمة SDK لمراقبة الأداء، من المفترض أن يتم تجميع المشروع. في "استوديو Android"، انقر على تشغيل > شغِّل "التطبيق" لإنشاء التطبيق وتشغيله على جهاز Android أو المحاكي المرتبط.
يحتوي التطبيق على زرين ينقلانك إلى نشاط وجزء مقابل، على النحو التالي:
في الخطوات التالية ضمن هذا الدرس التطبيقي حول الترميز، ستتعرَّف على كيفية قياس وقت التحميل وأداء عرض الشاشة في "النشاط" أو "الجزء".
4. فهم تحميل نشاط أو جزء
في هذه الخطوة، سنتعرف على ما يفعله النظام أثناء تحميل نشاط أو جزء.
فهم تحميل نشاط
بالنسبة إلى أي نشاط، يتم تحديد وقت التحميل على أنّه الوقت الذي يبدأ من وقت إنشاء كائن "النشاط" حتى يتم رسم الإطار الأول بالكامل على الشاشة (وذلك عندما يرى المستخدم واجهة المستخدم الكاملة للنشاط لأول مرة). لقياس ما إذا كان تطبيقك مرسومًا بالكامل، يمكنك استخدام طريقة reportFullyDrawn()
لقياس الوقت المنقضي بين تشغيل التطبيق والعرض الكامل لجميع الموارد وعرض التدرّجات الهرمية.
على مستوى عالٍ، عندما يستدعي تطبيقك startActivity(Intent)
، ينفِّذ النظام العمليات التالية تلقائيًا. يستغرق إكمال كل عملية بعض الوقت، ما يزيد من المدة الزمنية بين إنشاء "النشاط" والوقت الذي يرى فيه المستخدم واجهة المستخدم الخاصة بالنشاط على شاشته.
فهم تحميل جزء من الصفحة
على غرار النشاط، يتم تعريف وقت تحميل الجزء على أنه الوقت الذي يبدأ من وقت ربط الجزء بنشاط المضيف حتى يتم رسم الإطار الأول لعرض الجزء بالكامل على الشاشة.
5- قياس وقت تحميل النشاط
قد يؤدي التأخير في الإطار الأول إلى ترك انطباع سيئ لدى المستخدم، لذا من المهم معرفة مقدار تأخر التحميل الأولي الذي يواجهه المستخدمون. يمكنك استخدام أداة تتبُّع الرموز المخصّصة لقياس وقت التحميل هذا:
- ابدأ عملية تتبُّع الرموز المخصّصة (التي تحمل الاسم
TestActivity-LoadTime
) في فئة النشاط فور إنشاء عنصر "النشاط".
TestActivity.java
public class TestActivity extends AppCompatActivity {
// TODO (1): Start trace recording as soon as the Activity object is created.
private final Trace viewLoadTrace = FirebasePerformance.startTrace("TestActivity-LoadTime");
// ...
}
- إلغاء
onCreate()
معاودة الاتصال، وإضافة "العرض" من خلال الطريقةsetContentView()
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Current Activity's main View (as defined in the layout xml file) is inflated after this
setContentView(R.layout.activity_test);
// ...
// TODO (2): Get the View added by Activity's setContentView() method.
View mainView = findViewById(android.R.id.content);
// ...
}
- لقد أدرجنا عملية تنفيذ "
FistDrawListener
"، والتي تتضمّن طلبَي استدعاء:onDrawingStart()
وonDrawingFinish()
(اطّلِع على القسم التالي أدناه للحصول على مزيد من التفاصيل حولFirstDrawListener
والعوامل التي يمكن أن تؤثر في أدائه). يمكنك تسجيل "FirstDrawListener
" في نهاية عملية معاودة الاتصالonCreate()
بالنشاط. عليك إيقاف "viewLoadTrace
" أثناء معاودة الاتصالonDrawingFinish()
.
TestActivity.java
// TODO (3): Register the callback to listen for first frame rendering (see
// "OnFirstDrawCallback" in FirstDrawListener) and stop the trace when View drawing is
// finished.
FirstDrawListener.registerFirstDrawListener(mainView, new FirstDrawListener.OnFirstDrawCallback() {
@Override
public void onDrawingStart() {
// In practice you can also record this event separately
}
@Override
public void onDrawingFinish() {
// This is when the Activity UI is completely drawn on the screen
viewLoadTrace.stop();
}
});
- إعادة تشغيل التطبيق بعد ذلك، عليك فلترة سجلّ Logcat باستخدام مقياس تتبُّع التسجيل. انقر على الزر
LOAD ACTIVITY
، وابحث عن السجلّات كما هو موضّح أدناه:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)
🎉 تهانينا. لقد تمكّنت من قياس وقت تحميل النشاط بنجاح وأبلغت أداة "مراقبة الأداء في Firebase" بهذه البيانات. وسنعرض المقياس المسجَّل في وحدة تحكُّم Firebase لاحقًا في هذا الدرس التطبيقي حول الترميز.
الغرض من FirstDrawListener
في القسم أعلاه مباشرةً، سجّلنا FirstDrawListener
. والغرض من FirstDrawListener
هو قياس وقت بدء الإطار الأول وانتهائه من الرسم.
وتؤدي هذه السياسة إلى تنفيذ ViewTreeObserver.OnDrawListener
وإلغاء استدعاء onDraw()
الذي تم استدعاؤه عندما يكون رسم العرض التدرّجي للحساب على وشك الانتهاء. بعد ذلك، يتم التفاف النتيجة لتقديم دالتَي معاودة الاتصال بأداة مساعدة onDrawingStart()
وonDrawingFinish()
.
يمكن العثور على الرمز الكامل الخاص بـ FirstDrawListener
في رمز المصدر الخاص بالدرس التطبيقي حول الترميز.
6- قياس وقت تحميل الجزء
يشبه قياس وقت تحميل جزء ما الطريقة التي نقيسها لأحد الأنشطة، ولكن مع بعض الاختلافات الطفيفة. مرة أخرى، سيتم استخدام تتبُّع الرموز المخصّصة:
- عليك إلغاء معاودة الاتصال بـ "
onAttach()
" وبدء تسجيل "fragmentLoadTrace
". سنُطلق على عملية التتبّع هذه اسمTest-Fragment-LoadTime
.
وكما هو موضح في خطوة سابقة، يمكن إنشاء كائن تجزئة في أي وقت، ولكنه لا يصبح نشطًا إلا عندما يكون مرفقًا بنشاط المضيف.
TestFragment.java
public class TestFragment extends Fragment {
// TODO (1): Declare the Trace variable.
private Trace fragmentLoadTrace;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
// TODO (2): Start trace recording as soon as the Fragment is attached to its host Activity.
fragmentLoadTrace = FirebasePerformance.startTrace("TestFragment-LoadTime");
}
- سجِّل "
FirstDrawListener
" في ميزة "onViewCreated()
معاودة الاتصال". بعد ذلك، كما في مثال النشاط، أوقِف عملية التتبُّع فيonDrawingFinish()
.
TestFragment.java
@Override
public void onViewCreated(@NonNull View mainView, Bundle savedInstanceState) {
super.onViewCreated(mainView, savedInstanceState);
// ...
// TODO (3): Register the callback to listen for first frame rendering (see
// "OnFirstDrawCallback" in FirstDrawListener) and stop the trace when view drawing is
// finished.
FirstDrawListener.registerFirstDrawListener(mainView, new FirstDrawListener.OnFirstDrawCallback() {
@Override
public void onDrawingStart() {
// In practice you can also record this event separately
}
@Override
public void onDrawingFinish() {
// This is when the Fragment UI is completely drawn on the screen
fragmentLoadTrace.stop();
}
});
- إعادة تشغيل التطبيق بعد ذلك، عليك فلترة سجلّ Logcat باستخدام مقياس تتبُّع التسجيل. انقر على الزر
LOAD FRAGMENT
، وابحث عن السجلّات كما هو موضّح أدناه:
I/FirebasePerformance: Logging trace metric: TestFragment-LoadTime (duration: XXXms)
🎉 تهانينا. لقد نجحت في قياس وقت تحميل جزء من البيانات وأبلغت "مراقبة أداء Firebase" بهذه البيانات. وسنعرض المقياس المسجَّل في وحدة تحكُّم Firebase لاحقًا في هذا الدرس التطبيقي حول الترميز.
7- التعرّف على عرض الشاشة ومعنى الإطار البطيء أو المتجمد
عرض واجهة المستخدم هو عملية إنشاء إطار من تطبيقك وعرضه على الشاشة. لضمان تفاعل المستخدم مع تطبيقك بسلاسة، يجب أن يعرض تطبيقك اللقطات في أقل من 16 ملي ثانية لتسجيل 60 لقطة في الثانية ( لماذا 60 لقطة في الثانية؟). إذا كان تطبيقك يعاني من بطء في العرض لواجهة المستخدم، سيفرض النظام على النظام تخطي الإطارات، وسيلاحظ المستخدم تقطُّعًا في تطبيقك. ونُطلق على هذه العملية اسم جانك.
وبالمثل، الإطارات الثابتة هي إطارات واجهة المستخدم التي يستغرق عرضها وقتًا أطول من 700 ملي ثانية. ويمثّل هذا التأخير مشكلة لأنّه يبدو أنّ تطبيقك متوقّف ولا يستجيب للبيانات التي أدخلها المستخدم لمدة ثانية كاملة تقريبًا أثناء عرض الإطار.
8- قياس الإطارات البطيئة/الثابتة للجزء
ترصد ميزة "مراقبة أداء Firebase" تلقائيًا اللقطات البطيئة/المجمّدة لأحد الأنشطة (ولكن فقط إذا كانت مسرَّعة باستخدام الأجهزة). ومع ذلك، لا تتوفر هذه الميزة حاليًا للأجزاء. يتم تعريف الإطارات البطيئة/المجمّدة للجزء على أنّها اللقطات البطيئة/المجمّدة للنشاط بأكمله بين طلبَي معاودة الاتصال onFragmentAttached()
وonFragmentDetached()
في دورة حياة الجزء.
بالاستناد إلى الحافز التشجيعي من الفئة AppStateMonitor
(وهي جزء من حزمة تطوير البرامج (SDK) الخاصة بمراقبة الأداء المسؤولة عن تسجيل عمليات تتبُّع أداء الشاشة في النشاط)، نفَّذنا الفئة ScreenTrace
(وهي جزء من مستودع رمز المصدر للدرس التطبيقي حول الترميز). يمكن ربط صف واحد (ScreenTrace
) بفترة استدعاء الأنشطة FragmentManager
في النشاط لالتقاط اللقطات البطيئة/المجمّدة. توفّر هذه الفئة واجهتَي برمجة تطبيقات عامتَين:
recordScreenTrace()
: يبدأ تسجيل آثار الشاشة.sendScreenTrace()
: إيقاف تسجيل تتبُّع محتوى الشاشة وإرفاق مقاييس مخصَّصة لتسجيل عدد اللقطات الإجمالي والبطيئ والمجمّد
من خلال إرفاق هذه المقاييس المخصّصة، يمكن التعامل مع عمليات تتبُّع الشاشة للأجزاء بالطريقة نفسها التي يتم التعامل بها مع عمليات تتبُّع الشاشة لأحد الأنشطة، ويمكن عرضها مع تتبُّعات عرض الشاشة الأخرى في لوحة بيانات الأداء ضمن وحدة تحكُّم Firebase.
إليك كيفية تسجيل عمليات تتبُّع الشاشة للجزء:
- يُرجى إعداد الفئة
ScreenTrace
في نشاطك الذي يستضيف الجزء.
MainActivity.java
// Declare the Fragment tag
private static final String FRAGMENT_TAG = TestFragment.class.getSimpleName();
// TODO (1): Declare the ScreenTrace variable.
private ScreenTrace screenTrace;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// TODO (2): Initialize the ScreenTrace variable.
screenTrace = new ScreenTrace(this, FRAGMENT_TAG);
// ...
}
- عند تحميل "الجزء" الخاص بك، يمكنك التسجيل في
FragmentLifecycleCallbacks
وإلغاء طلبَي معاودة الاتصالonFragmentAttached()
وonFragmentDetached()
. لقد نفّذنا هذا الإجراء من أجلك. عليك بدء تسجيل عمليات تتبُّع الشاشة في معاودة الاتصال على "onFragmentAttached()
" وإيقاف التسجيل في معاودة الاتصال على "onFragmentDetached()
".
MainActivity.java
private final FragmentManager.FragmentLifecycleCallbacks fragmentLifecycleCallbacks =
new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
super.onFragmentAttached(fm, f, context);
// TODO (3): Start recording the screen traces as soon as the Fragment is
// attached to its host Activity.
if (FRAGMENT_TAG.equals(f.getTag()) && screenTrace.isScreenTraceSupported()) {
screenTrace.recordScreenTrace();
}
}
@Override
public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
super.onFragmentDetached(fm, f);
// TODO (4): Stop recording the screen traces as soon as the Fragment is
// detached from its host Activity.
if (FRAGMENT_TAG.equals(f.getTag()) && screenTrace.isScreenTraceSupported()) {
screenTrace.sendScreenTrace();
}
// Unregister Fragment lifecycle callbacks after the Fragment is detached
fm.unregisterFragmentLifecycleCallbacks(fragmentLifecycleCallbacks);
}
};
- إعادة تشغيل التطبيق انقر بعد ذلك على زر "
LOAD FRAGMENT
". انتظِر بضع ثوانٍ، ثم انقر علىback button
في شريط التنقل السفلي.
فلتِر أداة Logcat باستخدام مقياس تتبُّع تسجيل الدخول، ثم ابحث عن السجلّات على النحو التالي:
I/FirebasePerformance: Logging trace metric: _st_MainActivity-TestFragment (duration: XXXms)
فلتِر Logcat باستخدام "FireperfViews"، ثم ابحث عن السجلّات على النحو التالي:
D/FireperfViews: sendScreenTrace MainActivity-TestFragment, name: _st_MainActivity-TestFragment, total_frames: XX, slow_frames: XX, frozen_frames: XX
🎉 تهانينا. لقد نجحت في قياس اللقطات البطيئة/الثابتة للجزء، وأبلغت "مراقبة أداء Firebase" بهذه البيانات. وسنعرض المقاييس المسجَّلة في وحدة تحكُّم Firebase لاحقًا في هذا الدرس التطبيقي حول الترميز.
9- الاطّلاع على المقاييس في "وحدة تحكُّم Firebase"
- في Logcat، انقر على عنوان URL الخاص بـ "وحدة تحكُّم Firebase" لزيارة صفحة التفاصيل لإجراء عملية التتبُّع.
ويمكنك بدلاً من ذلك اختيار المشروع الذي يحتوي على تطبيقك في وحدة تحكُّم Firebase. في اللوحة اليمنى، ابحث عن زر الإصدار المراقبة، ثمّ انقر على الأداء.
- في علامة التبويب لوحة البيانات الرئيسية، انتقِل إلى أسفل الصفحة إلى جدول بيانات التتبُّع، ثم انقر على علامة التبويب عمليات التتبُّع المخصّصة. في هذا الجدول، ستظهر لك عمليات تتبُّع الرموز المخصَّصة التي أضفناها في السابق بالإضافة إلى بعض عمليات تتبُّع الرموز غير الجاهزة، مثل عمليات تتبُّع
_app_start
. - ابحث عن عمليتَي تتبُّع الرموز المخصّصتَين،
TestActivity-LoadTime
وTestFragment-LoadTime
. انقر على المدة لأي منهما لعرض مزيد من التفاصيل عن البيانات التي تم جمعها.
- تعرض لك صفحة التفاصيل الخاصة بتتبُّع الرموز المخصّصة معلومات عن مدة التتبُّع (أي وقت التحميل الذي تم قياسه).
- يمكنك أيضًا عرض بيانات الأداء لتتبُّع الشاشة المخصّص.
- ارجع إلى علامة التبويب الرئيسية لوحة البيانات، وانتقِل للأسفل إلى جدول التتبُّع، ثم انقر على علامة التبويب عرض الشاشة. في هذا الجدول، ستظهر لك عمليات تتبُّع الشاشة المخصّصة التي أضفناها سابقًا بالإضافة إلى أي تتبُّعات شاشة غير متوفّرة، مثل عمليات تتبُّع
MainActivity
. - ابحث عن رمز تتبُّع الشاشة المخصّص،
MainActivity-TestFragment
. انقر على اسم عملية التتبّع للاطّلاع على البيانات المجمّعة للعرض البطيء واللقطات الثابتة.
10- تهانينا
تهانينا لقد تمكّنت من قياس وقت التحميل وأداء عرض الشاشة لأحد "النشاط" و"جزء من الصفحة" باستخدام ميزة "مراقبة الأداء في Firebase".
الإنجازات
- لقد دمجت مراقبة أداء Firebase في نموذج تطبيق
- أصبحت تعرف الآن دورة حياة تحميل العرض
- لقد تمكّنت من قياس وقت تحميل كلّ من نشاط وجزء من خلال إضافة عمليات تتبُّع الرموز المخصّصة.
- لقد سجّلت لقطات بطيئة أو مجمّدة من خلال إضافة تتبُّعات الشاشة المخصّصة باستخدام مقاييس مخصّصة.
الخطوات التالية
يوفّر تقرير "الأداء في Firebase" طرقًا إضافية لقياس أداء تطبيقك، بالإضافة إلى وسائل التتبُّع المخصّصة. وهي تقيس تلقائيًا بيانات أداء التطبيق في الخلفية ووقت بدء تشغيله ومقدمة التطبيق. حان الوقت للاطّلاع على هذه المقاييس في وحدة تحكُّم Firebase.
بالإضافة إلى ذلك، توفّر ميزة "أداء Firebase" المراقبة التلقائية لطلبات الشبكة المستندة إلى HTTP/S. باستخدام ذلك، يمكنك بسهولة التعامل مع طلبات الشبكة بدون كتابة سطر واحد من الرموز. هل يمكنك محاولة إرسال بعض طلبات الشبكة من تطبيقك والعثور على المقاييس في وحدة تحكُّم Firebase؟
مكافأة
والآن بعد أن تعرفت على كيفية قياس وقت التحميل وأداء عرض الشاشة لنشاطك أو التجزئة باستخدام عمليات تتبُّع الرموز المخصّصة، هل يمكنك استكشاف قاعدة الرموز البرمجية المفتوحة المصدر لمعرفة ما إذا كان بإمكانك تسجيل هذه المقاييس بطريقة غير تقليدية لأي نشاط أو جزء يشكّل جزءًا من التطبيق؟ يمكنك إرسال مسؤول العلاقات العامة إذا أردت ذلك :-)
11- تعلُّم إضافي
سيساعدك فهم ما يحدث أثناء تحميل أحد الأنشطة في فهم خصائص أداء تطبيقك بشكل أفضل. في خطوة سابقة، وصفنا على مستوى عالٍ ما يحدث أثناء تحميل نشاط، ولكن الرسم التخطيطي التالي يصف كل مرحلة بتفصيل أكبر.