سؤال

أقوم حاليًا بتطوير تطبيق يستخدم ViewPager ، والمشكلة هي أن الطريقة التي أقوم بها تجعله بطيئًا للغاية في البدء ويستهلك أطنانًا من الذاكرة.

أنا أقوم بتطبيق pageradapter مثل: Genacodicetagpre

تحتوي جميع كائنات التخطيط على FrameLayout مع عرض النص و اللوحة التي تحتوي على عرض ويب باستخدام html محلي. تحتوي جميع التخطيطات على محتوى فريد يتم تحميله وتضخيمه عند إنشاء فئة SliderLayout.

حاولت أيضًا إضافة طرق عرض أثناء التنقل في طريقة InstantiateItem ، ولكن هذا يجعل التمرير أكثر مراوغة وسيعطي استثناء OutOfMemory فادحًا إذا قمت بالتمرير بسرعة كبيرة.

إذن ، سؤالي هو ، ما هي أفضل طريقة لتنفيذ ViewPager الذي يحتوي على العديد من العروض الفريدة (ولكن استنادًا إلى نفس التخطيط) ، بحيث لا يستهلك الكثير من الذاكرة ويبدأ بشكل أسرع؟

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

المحلول

يجب إرفاق طرق العرض بجهاز الاستدعاء في عنصر InstantiateItem () (كما تفعل في طريقة getView () للمحول العادي).في هذه الحالة ، يعتني ViewPager بإدارة الذاكرة.ألق نظرة على المشروع التجريبي في CompatibilityPackage.في الواقع يمكنك الحصول على آلاف الصفحات دون أي تأخير. Genacodicetagpre

نصائح أخرى

حسنًا ، فكرتي هي التقاط الحدث "onPageChanged ()" في ViewPager وتعيين عرض الويب بعد تغيير الصفحة - أو تحميل صفحة كمثال مسبقًا "تأثير التمرير": تقوم بما يلي:

على سبيل المثال ، لديك عدد 10 صفحات.إذا كان عارض العرض الخاص بك في الصفحة 0 ، فأنت تقوم بتحميل وتحميل الصفحات 0،1،2.إذا كان عارض الصفحة في الشاشة 4 ، فأنت تقوم بإزالة عروض الويب في المواضع 0،1 و 7،8،9 ...

بهذه الطريقة لن تحتاج إلى جميع مثيلات عروض الويب (تستهلك webkit الكثير من الذاكرة) ولدي المزيد من الذاكرة.

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