استخدام ذاكرة الصورة النقطية

غالبًا ما تكون الصور النقطية أكبر العناصر التي تستهلك الذاكرة في التطبيق. وعادةً ما تكون عمليات فك الترميز وتغيير الحجم على المسار الأساسي لعرض الإطارات. يؤدي تحسين استخدام الذاكرة للصور النقطية إلى تحسينات كبيرة في استجابة واجهة المستخدم وعمر البطارية والثبات العام من خلال تقليل إيقاف مؤقت لعرض واجهة المستخدم وANR وعمليات إغلاق العمليات المرتبطة بنفاد الذاكرة (OOM).

تحديد حالات الاستخدام المرتفع للصور النقطية للذاكرة

توفر "مؤشرات Android الحيوية" مقاييس حول استهلاك الذاكرة للصور النقطية في التطبيق من خلال تجميع البيانات من أجهزة Android. تتضمّن هذه المقاييس شرائح مئوية تستند إلى الفترة الزمنية (مثل 28 يومًا) لكل حزمة وعملية. تساعد هذه البيانات في تحديد الاتجاهات وحالات التراجع المحتملة في كفاءة الذاكرة على أنواع الأجهزة والإصدارات المختلفة.

تشارك "مؤشرات Android الحيوية" استخدام تطبيقك للصور النقطية للذاكرة مقسّمًا حسب حالات العملية التالية:

  • في المقدّمة: تكون عملية التطبيق مرئية. من المتوقّع أن يكون المقياس P99 أعلى بكثير في المقدّمة مقارنةً بحالات العمليات الأخرى، ولكن على المطوّرين التحقيق في ما إذا كانت نسبة P99/P50 كبيرة (مثل أعلى من 3.5 مرة)، لأنّ ذلك يشير غالبًا إلى تسرّب الذاكرة للصور النقطية. يمكنك تحديد ذلك من خلال البحث عن اختلاف بين الاستخدام العادي (P50) والاستخدام الخارجي (P99). وفي حين أنّ زيادة مواد العرض العامة تزيد من الذاكرة بشكل موحّد على جميع الشرائح المئوية، فإنّ تسرّبات الذاكرة تتراكم بمرور الوقت، ما يؤدي إلى تحريف البيانات في نهاية الفترة (P99) بشكل كبير. تأكَّد من عدم استمرار عمليات تخصيص الصور النقطية في المقدّمة بدون داعٍ بعد انتقال التطبيق إلى حالات أخرى.
  • الخدمات التي يلاحظها المستخدم: تكون عملية التطبيق قيد التشغيل في حالة يمكن ملاحظتها. ويشمل ذلك الخدمات التي تعمل في المقدّمة والمهام السريعة ومهام نقل البيانات التي يبدؤها المستخدم. يجب ألا تحتفظ التطبيقات بعمليات تخصيص الصور النقطية الكبيرة في المقدّمة عند الانتقال إلى هذه الحالات. بما أنّ هذه الخدمات مصمّمة للمهام الطويلة الأمد، فإنّ الاحتفاظ بمواد عرض كبيرة يؤدي إلى تدهور تجربة المستخدم العامة ويجبر برنامج Low Memory Killer Daemon (LMKD) على استعادة الذاكرة من خلال إنهاء العمليات ذات الأولوية المنخفضة.
  • في الخلفية: يشغّل التطبيق خدمة تُشغَّل في الخلفية أو تم نقله مؤخرًا إلى الخلفية، ولكن لم يتم تخزينه مؤقتًا بعد. بما أنّ حالة العملية هذه أقل أهمية من العمليات التي تعمل في المقدّمة أو العمليات التي يمكن ملاحظتها، يجب أن تحرّر التطبيقات بشكل صريح مواد عرض الصور النقطية الكبيرة هنا لتقليل ضغط الذاكرة.
  • مخزّنة مؤقتًا: يكون التطبيق في حالة مخزّنة مؤقتًا. تتأثر هذه الحالة بشكل كبير بضغط ذاكرة النظام، مثل عمليات إغلاق التطبيقات بسبب نقص الذاكرة (LMK). يجب أن تقلّل التطبيقات بشكل استباقي من استخدام الذاكرة للصور النقطية في هذه الحالة لتجنُّب إزالتها من قِبل نظام التشغيل.

العوامل التي تساهم في الاستخدام المرتفع للصور النقطية للذاكرة

قد يتم أيضًا تضمين الذاكرة الافتراضية التي لم يتم استخدامها مطلقًا في عملية الاحتساب. إذا لاحظت استخدامًا مرتفعًا بشكل غير متوقّع للصور النقطية للذاكرة، تأكَّد من أنّك لا تخصّص ذاكرة لا يتم استخدامها.

الموارد

تحليل الصور النقطية في "استوديو Android"

إنشاء ملفات الأداء في "استوديو Android" للصور النقطية

استخدِم محلّل الذاكرة لفحص عمليات تخصيص الذاكرة في الوقت الفعلي، والتقاط لقطات لأجزاء من الذاكرة، وتحليل الكائنات بحثًا عن تسرّبات الذاكرة. بالإضافة إلى ذلك، استخدِم أداة Heap Analyzer لرصد تسرّبات الذاكرة، وتحديد عمليات تخصيص الصور النقطية المكرّرة، وعرض الاحتفاظ بالكائنات.

رصد تسرّبات الذاكرة تلقائيًا باستخدام LeakCanary

يمكنك دمج مكتبة LeakCanary لأتمتة رصد تسرّبات الذاكرة في تطبيقك. توفّر LeakCanary تحليلًا تلقائيًا للذاكرة المؤقتة، وتحدّد الكائنات التي كان من المفترض أن يتم جمعها كبيانات غير ضرورية ولكنها لا تزال محتفظًا بها في الذاكرة، مثل الصور النقطية التي تحتفظ بها الأنشطة أو الأجزاء التي تم إتلافها.

مستندات أداء الصور النقطية

توفّر هذه الموارد إرشادات شاملة حول أفضل الممارسات للتعامل بكفاءة مع الصور النقطية في مكوّنات Android المختلفة.

قائمة التحقّق للمطوّرين لتحسين استخدام الذاكرة للصور النقطية

لتحسين كفاءة استخدام الصور النقطية للذاكرة، اتّبِع ثلاثة مبادئ أساسية: تقليل وإعادة استخدام وإعادة تدوير.

  • تقليل: قلّل من استهلاك الذاكرة الأولي عند تحميل الصور النقطية أو عرضها.
  • إعادة استخدام: نفِّذ آليات التخزين المؤقت لتجنُّب عمليات تخصيص الصور النقطية المكرّرة.
  • إعادة تدوير: حرِّر الموارد بشكل استباقي للسماح بإعادة تخصيص الذاكرة للعمليات النشطة.

يمكن أن تساعدك قائمة التحقّق التالية للمطوّرين في تحسين استخدام الذاكرة للصور النقطية.

مبدآن المنطقة الوصف
نحدّ من المحتوى المخالف إزالة الصور النقطية المكرّرة يمكنك تحليل عمليات تفريغ الذاكرة المؤقتة باستخدام أداة محلّل الذاكرة لرصد عمليات تخصيص الصور النقطية المكرّرة. راجِع دليل إدارة ذاكرة الصور النقطية.
الاستفادة من مكتبات تحميل الصور استخدِم مكتبات مثل Glide وCoil لأتمتة عمليات إنشاء سلاسل المحادثات والتخزين المؤقت وفك الترميز بكفاءة.
تنفيذ تصغير نطاق العيّنات يمكنك فك ترميز الصور لتتطابق مع أبعاد حاوية واجهة المستخدم المستهدَفة بدلاً من تحميل مواد العرض بالدقة الكاملة.
استخدام RGB_565 للصور غير الشفافة يمكنك تقليل استهلاك الذاكرة بنسبة% 50 من خلال التبديل من ARGB_8888 إلى إعداد 16 بت للصور بدون شفافية.
منح الأولوية لـ VectorDrawables استخدِم المتجهات للرموز والرسومات الأساسية لضمان تغيير الحجم بدقة مع الحد الأدنى من استخدام الذاكرة.
تحسين عرض الصور من جهة الخادم اضبِط واجهات برمجة التطبيقات للواجهة الخلفية لعرض الصور المصمّمة خصيصًا لكثافة الجهاز وأبعاد ImageView.
إزالة الهوامش الشفافة تجنَّب تخصيص الذاكرة لوحدات البكسل "غير المرئية" من خلال استخدام InsetDrawable أو مساحة ترك في التصميم بدلاً من الهوامش المضمّنة. راجِع مقالة تصميم تطبيقات Android فعّالة من حيث استخدام الذاكرة.
إعادة استخدام ضبط أحجام ذاكرة التخزين المؤقت المثالية يمكنك تخصيص حدود ذاكرة التخزين المؤقت على الذاكرة وذاكرة التخزين المؤقت للقرص استنادًا إلى ذاكرة الوصول العشوائي (RAM) ودقة الشاشة في الجهاز. راجِع مقالة التخزين المؤقت للصور النقطية.
إعادة تدوير إزالة الموارد في الخلفية نفِّذ TRIM_MEMORY_BACKGROUND لمسح ذاكرات التخزين المؤقت وتحسين بقاء العملية أثناء ضغط ذاكرة النظام.
تحرير مواد العرض عند إخفاء واجهة المستخدم استخدِم TRIM_MEMORY_UI_HIDDEN لتحرير ذاكرات التخزين المؤقت للصور النقطية عندما لا يعود التطبيق مرئيًا للمستخدم.
مراقبة تسرّبات الذاكرة استخدِم LeakCanary ومحلّل الذاكرة للعثور على الصور النقطية التي تم الاحتفاظ بها بعد إتلاف LifecycleOwner. راجِع مقالة إدارة ذاكرة تطبيقك.