رفتن به مطلب
  • 0

پردازش نشدن اکتویتی روی گوشی های ضعیف


امیرحسین قاسمی

سوال

سلام،

دوستان من یک اکتویتی فروشگاه ایجاد کردم، توی اون یک اسکرول ویوی افقی هست که باید حدود 23 تا محصول بهش اضافه بشن.یک پنل تعریف کردم توی حلقه for و توی اون پنل لایوت خاص محصول رو لود کردم(جمعا 23 تا لایوت دارم)

توی بعضی از گوشی ها و همچنین روی شبیه ساز بنده اکتویتی فروشگاه با موفقیت استارت زده میشه و همه چی اوکی هست. اما توی برخی دیگر از گوشی ها(بخصوص گوشی های ضعیف و دارای رم کمتر) هنگامی که اکتویتی فروشگاه استارت زده میشه کلا صفحه سیاه میشه و پس از چند ثانیه Android این پیغام رو به کاربر نشون میده:

این برنامه پاسخ نمی دهد، آیا همچنان منتظر می مانید؟

راستی از AriaAsyncTask هم استفاده کردم ولی از ویو پشتیبانی نمیکرد(هنگام استارت همین اکتویتی در گوشی های ضعیف هیچ مشکلی هنگام استفاده از AriaAsyncTask پیش نمیومد اما پنل و ویوها لود نمیشدن!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

راه حل نهایی:

بهتره قبل از پایان دادن به حیات اکتویتی BitMap کل imageview های اون اکتویتی رو null کنیم و همچنین اونارو Remove کنیم تا به رم فشار نیاورند. بنده همین کار رو انجام دادم حتی توی همون گوشی های ضعیف در عرض 2 ثانیه بالا میومد. توی ضعیف ترین گوشی(با رم 400مگابایت(که از این مقدار 60 مگابایتش خالی بود))امتحان کردم در عرض 3 ثانیه بالا اومد. در حالی که قبلا حتی در گوشی دارای 1 گیگ رم کلا هنگ می کرد.

همچنین این کد رو هم به Manifest اضافه کردم تا اندروید برای برنامه بنده تا حدامکان بیشترین منابع رو در اختیارش بگذاره:

SetApplicationAttribute(android:largeHeap,"true")

موفق و سربلند باشید.:53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوستان این بار از لایوت استفاده نکردم بجاش اومدم با کد پنل و لیبل ایجاد کردم و توی اسکرول ویو قرار دادم یعنی اینکار 23 بار انجام میشه بازم همون مشکل قبلی وجود داره. تعداد تکرار حلقه رو جهت تست از 23 به 5 کاهش دادم درست شد. فکر کنم فشار زیادی وارد میشه و گوشی های ضعیف نمیتونن تحملش کنن. لطفا بگید از نخ چگونه برای اینکار استفاده کنم تا سرعت پردازش برنامه بالاتر بره!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوستان پس از تحقیقات فراوان تونستم کاری کنم.

ببینید توی بعضی از گوشی ها رم کاربر پایینه و نمیتونه بخوبی پردازش کنه.

من حدود 23 تا لوگو رو برای ایمیج ویو هر panel لود می کردم. این عکس ها میرن و به طور موقت توی رم ذخیره میشن تا جهت پردازش نهایی به CPU ارسال بشن. خب این تصویرها هرچه بیشتر باشن فضای رم بیشتری رواشغال میکنن(تازه هرچی تصویر و داده موقت که توی اکتویتی های قبلی هم استفاده کردیم تا زمانی که برنامه مون کاملا بسته نشه داخل رم میمونن و جمع میشن و فشار زیادی به اکتویتی وارد میکنند.

الان به جای 23 تصویر برای هر ایمیج ویو یک تصویر کلی لود کردم یعنی مثلا این عکس من باشه:mypicture.png همینو برای تمام ایمیج ویو لود کردم در حالی که قبلا مثلا mypicture1.png روی برای اولین ایمیج ویو، mypicture2.png  برای دومین ایمیج ویو، mypicture3.png برای سومین ایمیج ویو لود می کردم.

حالا چون یدونه تصویر لود میکنم فقط همون یدونه به رم ارسال میشه و توی همون گوشی ضعیف هم مشکلی بوجود نیومد.

 

اینارو چندساعته دارم تحقیق میکنم و اینجا مینویسم تا آینده اگه کسی مشکلی داشت همینو بخونه حل بشه.

اگه چیز جدیدی دستگیرم شد قرار خواهم داد:53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام چرا از مولتی پنل استفاده میکنید بهتره از کاستوم لیست ویو و از  VisibleRangeChanged استفاده کنید برای نمایش اطلاعات به صورت لیمیت شده.

https://www.b4x.com/android/forum/threads/b4x-xui-customlistview-lazy-loading-virtualization.87930/

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 7 ساعت قبل، mohsen m گفته است :

سلام چرا از مولتی پنل استفاده میکنید بهتره از کاستوم لیست ویو و از  VisibleRangeChanged استفاده کنید برای نمایش اطلاعات به صورت لیمیت شده.

https://www.b4x.com/android/forum/threads/b4x-xui-customlistview-lazy-loading-virtualization.87930/

 

این ریسکالر ویوی آقای شاهپیری هم جواب میده؟

یعنی هنگ نمیکنه دیگه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...