يتطلّب تقديم تجربة سلسة ومستقرة وفعّالة من حيث استهلاك البطارية تحديد المشاكل الشائعة التي تؤدي إلى بطء الأداء وحلّها، وذلك في ما يتعلّق بالثبات وعرض واجهة المستخدم واستهلاك الذاكرة والعمل في الخلفية ووقت الاستجابة عند بدء التشغيل وتحسين عملية الإنشاء.
توضّح الأدلة الواردة في هذا القسم سلوك منصة Android الأساسية لكل نوع من المشاكل، كما تشرح كيفية تشخيصها وتحديد خصائصها وإصلاحها باستخدام أدوات مثل Android Studio Profiler وPerfetto وLogcat وApplicationExitInfo.
الثبات
- أخطاء ANR: يمكنك تشخيص أخطاء "التطبيق لا يستجيب" (ANR) الناتجة عن حظر سلاسل محادثات واجهة المستخدم أو عمليات الإدخال/الإخراج في سلسلة المحادثات الرئيسية أو تعارض الأقفال أو بطء أجهزة استقبال البث وإصلاحها.
- الأعطال: يمكنك الاطّلاع على عمليات تتبُّع تسلسل استدعاء الدوال البرمجية وفحص نتائج Logcat ومنع الاستثناءات غير المعالَجة والإشارات الأصلية.
العرض والبدء
- العرض البطيء: حدِّد وأصلِح إطارات واجهة المستخدم التي تم إسقاطها أو تجميدها (
>16msو>700ms) بسبب التصميمات المكلفة أو عمليات الربط أو توقّف مؤقت في سلسلة التعليمات الرئيسية. - الجلسات البطيئة (الألعاب فقط):
يمكنك قياس سرعة عرض اللقطات باستخدام
SurfaceFlingerوتحسين عدد اللقطات في الثانية في اللعبة باستخدام Android Frame Pacing (Swappy) وVulkan و"إطار عمل الأداء الديناميكي في Android" (ADPF). - مدة بدء تشغيل التطبيق: يمكنك فهم التفاصيل الداخلية لعمليات التشغيل على البارد وإعادة التشغيل البطيء وإعادة التشغيل السريع، وقياس الوقت المستغرَق للعرض الأولي (TTID) والوقت المستغرَق للعرض الكامل (TTFD)، وتحسين عملية بدء التشغيل.
إدارة الذاكرة
- برامج إيقاف العمليات عند انخفاض الذاكرة (LMK): تعرَّف على كيفية تحديد أولوية العمليات من خلال برنامج Low Memory Killer الخفي (
lmkd)oom_adj_scoreفي نظام التشغيل Android، بالإضافة إلى ملفات تعريف حجم الذاكرة في "استوديو Android" وUnity وUnreal Engine. - استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال): يمكنك قياس حجم ذاكرة RSS المجهولة ومساحة الإبدال في تطبيقك وتقليلهما في حالات المقدّمة والخدمة والخلفية.
- استخدام ذاكرة الصور النقطية: تشخيص عمليات تخصيص الصور النقطية الكبيرة جدًا أو التي تم تسريبها وإصدار مخازن مؤقتة للرسومات عندما تنتقل مكوّنات واجهة المستخدم إلى الخلفية
البطارية والعمل في الخلفية
- عمليات قفل التنشيط الزائدة عن الحد: تجنَّب الاحتفاظ بعمليات قفل التنشيط الجزئي لفترات طويلة، ونقِّل المهام التي يتم تنفيذها في الخلفية إلى
WorkManagerأوJobScheduler. - عمليات قفل التنشيط الجزئية المتوقفة: تأكَّد من إيقاف كل عملية قفل تنشيط جزئية تم الحصول عليها بشكل صحيح في جميع مسارات التنفيذ ومسارات الأخطاء.
- عمليات التنشيط الزائدة: قلِّل عمليات تنشيط المنبّه الدقيق، ونفِّذ العمليات المجدوَلة في الخلفية على دفعات أو أجِّلها.
- عمليات البحث الزائدة عن شبكات Wi-Fi في الخلفية: قلِّل عدد مرات البحث عن شبكات Wi-Fi في الخلفية واستخدِم واجهات برمجة التطبيقات السلبية أو المجمّعة الخاصة بالموقع الجغرافي والاتصال.
- الاستخدام الزائد عن الحد للشبكة في الخلفية:
يمكنك تجميع عمليات نقل بيانات شبكة الجوّال في الخلفية وتأجيلها باستخدام قيود
WorkManager. - الاستخدام المفرط للبطارية: يمكنك تشخيص الاستنزاف المفرط للبطارية على الأجهزة الجوّالة وأجهزة Wear OS من خلال إنشاء ملفات تعريف لوحدة المعالجة المركزية وأجهزة الاستشعار ونشاط الراديو.
الأذونات وتحسين عملية الإنشاء
- رفض الأذونات: اطلب أذونات التشغيل في السياق واشرح للمستخدمين بوضوح الأساس المنطقي للأذونات.
- تحسين رمز DEX: يمكنك ضبط قواعد تقليص الحجم وإخفاء التشويش والتحسين في R8 لتقليل حجم DEX وتحسين أداء وقت التشغيل.