PDA

View Full Version : RecyclerView



Ruhallah.Ahmadian
شنبه 12 دی 1394, 17:07 عصر
سلام دوستان
در RecyclerView برای اینکه عناصری که دیده نمیشه از حافظه خارج بشن لازمه کار خاصی انجام بگیره
چون من چک کردم حافظه ام پر میشه بعدشم force close میشه

Ruhallah.Ahmadian
شنبه 12 دی 1394, 21:24 عصر
اگه میشه راهنمایی کنید ممنون میشم

Nevercom
یک شنبه 13 دی 1394, 07:56 صبح
نیازی به انجام کار خاصی نیست، خود RecyclerView این رو مدیریت می کنه تا پرفرمنس بهتری داشته باشه.
اگر حافظه پر میشه ایراد از جای دیگری هست، شاید آداپتور رو درست پیاده سازی نکردید.

Ruhallah.Ahmadian
دوشنبه 14 دی 1394, 17:55 عصر
نیازی به انجام کار خاصی نیست، خود RecyclerView این رو مدیریت می کنه تا پرفرمنس بهتری داشته باشه.
اگر حافظه پر میشه ایراد از جای دیگری هست، شاید آداپتور رو درست پیاده سازی نکردید.

سلام خیلی ممنون از پاسخ ولی مطمئن هستم که اشتباهی نکرده ام
و ی چیزی که متوجه شدم اینکه ایتم ها از حافظه خارج میشن ولی cache برنامه در حال پر شدن است

Nevercom
دوشنبه 14 دی 1394, 18:24 عصر
اصولاً لیست ویو هم همه ی آبجکت ها رو در حافظه نگه نمیداره، و فقط View هایی که نمایش داده میشن (به اضافه ی چند تا قبل و بعد) رو نگه میداره و هربار که ردیف جدیدی قراره نمایش داده بشه، بجای ساخت ویو های جدید، از همون ها استفاده می کنه، این ها همه بصورت داخلی انجام میشه و نیاز نیست برنامه نویس نگران این موضوع باشه.

از همون ابتدا الگوی ViewHolder بعنوان یک الگوی استاندارد مورد استفاده قرار گرفت، چون با حذف نیاز به تخصیص منابع در هر بار نمایش (findViewById) پرفرمنس و سرعت بهتری بهمون بده.

در RecyclerView ساختار ListView بهینه تر شده و API جدیدی واسه Adapter این شئ معرفی شد تا الزامی رو برای الگوی مناسب استفاده از این شئ ایجاد کنه.

برای استفاده از RecyclerView نیاز نیست کار خاصی بکنید تا بهینه بشه.
اگر از تصاویر در Layout استفاده کردید و بصورت داینامیک لودشون می کنید، این میتونه یک نقطه ی بررسی باشه، بخصوص اگر حجیم باشن.

Ruhallah.Ahmadian
دوشنبه 14 دی 1394, 19:43 عصر
اصولاً لیست ویو هم همه ی آبجکت ها رو در حافظه نگه نمیداره، و فقط View هایی که نمایش داده میشن (به اضافه ی چند تا قبل و بعد) رو نگه میداره و هربار که ردیف جدیدی قراره نمایش داده بشه، بجای ساخت ویو های جدید، از همون ها استفاده می کنه، این ها همه بصورت داخلی انجام میشه و نیاز نیست برنامه نویس نگران این موضوع باشه.

از همون ابتدا الگوی ViewHolder بعنوان یک الگوی استاندارد مورد استفاده قرار گرفت، چون با حذف نیاز به تخصیص منابع در هر بار نمایش (findViewById) پرفرمنس و سرعت بهتری بهمون بده.

در RecyclerView ساختار ListView بهینه تر شده و API جدیدی واسه Adapter این شئ معرفی شد تا الزامی رو برای الگوی مناسب استفاده از این شئ ایجاد کنه.

برای استفاده از RecyclerView نیاز نیست کار خاصی بکنید تا بهینه بشه.
اگر از تصاویر در Layout استفاده کردید و بصورت داینامیک لودشون می کنید، این میتونه یک نقطه ی بررسی باشه، بخصوص اگر حجیم باشن.

از تصویر استفاده میکنم ولی از piccaso هم استفاده میکنم
البته تصاویر در drawable هستن

Ruhallah.Ahmadian
دوشنبه 14 دی 1394, 19:48 عصر
البته قبلا هم با viewpager این مشکل رو داشتم
که بعد ی سرچ فهمیدم توی اداپتر باید از FragmentStatePagerAdapter استفاده کنم نه FragmentPagerAdapter
و مشکل حل شد
الانم احساس میکنم مشکل همینه
چون من ی حرکتی ام کردم
اومدم هر چی توی item بود رو پاک کردم یعنی holder رو خالی کردم و مشکل حل شد یعنی کش پر نمیشد

Ruhallah.Ahmadian
چهارشنبه 16 دی 1394, 15:44 عصر
کسی نمیتونه کمک کنه

Ruhallah.Ahmadian
چهارشنبه 23 دی 1394, 20:15 عصر
کلا بیخیال RecyclerView شدم با GridView پیاده کردم دور شدن

Mohadi
چهارشنبه 23 دی 1394, 22:13 عصر
سلام دوست عزیز, لطفا کد بذار تا ببینیم مشکل چیه.
من که از تا حالا همچین مشکلی تو استفاده از رسایکلویو نداشتم.

Mohadi
جمعه 25 دی 1394, 01:42 صبح
به صورت تجربی فکر کنم بدونم مشکلت باید چی باشه. احتمالا عکس های کیفیت بالا و زیادی توی رسایلکت یا حالا کلا اون اکتیویتی داری استفاده میکنی! کیفیت و حجم و تعداد عکس هارو کاهش بده میبینی که کاملا باهم دیگه رابطه ی مستقیم دارن

Ruhallah.Ahmadian
جمعه 25 دی 1394, 16:24 عصر
سلام
اتفاقا عکس ها رو هم حذف کردم ولی باز همین مشکل بود
کدم رو از ریسایکل به گریدویو تفییر دادم مشکل حل شد پس یعنی مشکل از من هم نبوده!