سؤال

أعرض أكثر من 150 صورة في صفحة العرض ، عندما يتجاوز حجم الصفحة 70 تطبيقًا يتعطل ، يتم تحميل جميع الصور من الشبكة ، وقد سقطت [رابط]: غريبمشكلة نفاد الذاكرة أثناء تحميل صورة إلى كائن نقطي

وأنا أعيد تدويره عندما يصل تمرير الصفحة إلى 4 ،

لتطبيق 70 صفحة يستهلك 200 ميغابايت من الذاكرة.

أحتاج إلى المساعدة منك ، وكيفية التعامل معها

لا بد لي من إظهار كل الصفحات مع التمرير ...

لقد استخدمت أيضًا Runtime.getRuntime (). gc ()؛

هي أي طريقة لتحرير الذاكرة إذا وصلت ذاكرة التطبيق إلى 50 ميغابايت أو أكثر

شكرًا مقدمًا

هل كانت مفيدة؟

المحلول

يمكن العثور على الحل الكامل أدناه ، فالأسطر المهمة هي تلك الموجودة في طريقة التدمير: Genacodicetagpre

نصائح أخرى

أعتقد أن هذا يحدث لأن لديك تسربًا للذاكرة ، تحقق جيدًا من متغيراتك ، لا تستخدم المتغيرات الثابتة لأي شيء كبير ، استخدم المتغيرات الثابتة عندما يكون ذلك ممكنًا ، اجعل كل الأعضاء خاصين.

أقترح عليك إجراء التزام (أو حفظ الكود الحالي الخاص بك) ثم محاولة القيام بما طلبته ومعرفة ما إذا كان يعمل على إصلاحه.

يسمح لي نموذج التعليمات البرمجية بإخبارك إذا كان لديك تسرب في الذاكرة ، فربما يمكنك نشر الرمز في مكان ما مثل github أو google code

خلاصة القول: يمكن أن تفعل كل شيء بشكل صحيح ولكن المتغير لا يزال يحتفظ بمرجع إلى صورك حتى لا يتمكن جامع القمامة من لمسها.

أعلم أن القول بأن تسريب الذاكرة يؤلمك ولكن من فضلك لا تنزعج من حدوث ذلك لأفضل الأفضل ، لأنه من السهل جدًا حدوثه.

ملاحظة: بغض النظر عن حجم البيانات التي أحملها من تطبيقات الشبكة ، لا تحتاج أبدًا إلى أكثر من حجم ملف واحد إذا تم التعامل معها بشكل صحيح.

شكرا

شيتال ،

بعد الاطلاع على شفرتك ، يمكنك تجربة ما يلي: Genacodicetagpre

يجب أن يؤدي هذا إلى تحرير imageView للمجموعة المهملة.

هل تقوم بتحميل صورك في طريقة عرض onCreateView ()؟

يبدو أن إطار العمل يعتني بمتطلبات إدارة الذاكرة عند القيام بذلك بهذه الطريقة.لقد حاولت تحميل صوري في FragmentPageAdapter لتمريرها إلى مُنشئ Fragment الذي تم تحميله مسبقًا أو كجزء من طريقة Fragment instaniateItem ولكن كلاهما أعطاني المشكلة التي تواجهها.في النهاية قمت بتمرير المعلومات اللازمة لتحميل كل صورة في مُنشئ Fragment ثم استخدمت هذه التفاصيل في طريقة onCreateView ().

وضع علامة

شيتال ،

ليس لدي الرمز الخاص بي أمامي في الوقت الحالي ولكن يجب أن يكون شيئًا مشابهًا لما يلي: Genacodicetagpre

هذا بعيد جدًا عن رأسي ، لذا قد لا يكون دقيقًا ، لكنه قريب جدًا.

إذا كنت بحاجة إلى المزيد من المساعدة ، فما عليك سوى الصراخ ، ولا تنسَ وضع علامة على هذه الإجابة على أنها ساعدتك :).

شيتال ،

حسب الطلب ، أستخدم الكود أعلاه على النحو التالي:

في FragmentActivity الخاص بي ، أفعل ما يلي في طريقة onCreate ():

Genacodicetagpre

ثم في PagerAdapter الخاص بي ، أفعل ما يلي: Genacodicetagpre

ثم أستخدم الرمز في إجابتي السابقة أعلاه.

من الواضح أن هذا ليس رمزًا كاملاً وقد تم تعديله من الكود الفعلي الخاص بي ، ولكن يجب أن يمنحك فكرة جيدة عما يجب القيام به وأين تفعل ذلك.

وضع علامة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top