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

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

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

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

الموارد

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

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

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

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

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

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

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

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

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

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

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

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