💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ مهرداد فدایی
سرچ به همراه pagination
وحید گروسی حل شده توسط وحید گروسی

سلام استاد

در همین پروژه اگر تعداد آیتم‌ها زیاد باشه مثلا 150 تا و بخوایم سرچ کنیم مشکلی در performance لیست پیش نمیاد ؟

چون تعداد زیادی از آیتم‌ها باید inflate بشن و همزمان 150 تا آیتم ادد بشه به لیست. 

اگر در خصوص سرچ در دیتابیس با pagination هم صحبت کنید ممنون میشم .

سلام قطعا در هر لحظه تعداد آیتمی که در صفحه نمایش مشاهده می‌کنید به علاوه چند آیتم قبلی و بعدی در دسترس هست.

شما وقتی از دیتابیس جستجو می‌کنید نتیجه رو دریافت و سپس داخل ریسایکلرویو نمایش میدید

منبع شما برای سرچ دیتابیس باید باشه نه ریسایکلرویو

بهترین پاسخ
وحید گروسی ۱۸ فروردین ۱۳۹۹، ۲۲:۱۵

سلام.

* عمل inflate فقط به اندازه ی آیتم هایی که روی گوشی قابل نمایش هست انجام میشه. یعنی فرضاً برای یک لیست ۱۵۰ تایی عملا ۵ تا یا ۶ تا یا ۷ تا بسته به سایز صفحه نمایش گوشی، این عمل انجام میشه نه بیشتر.

زمانی که یک آیتم از صفحه خارج میشه، همون آیتم جاشو به آیتمی که داخل صفحه میاد میده و onBindViewHolder فراخوانی میشه.

* قبل ازینکه متد onBind فراخوانی بشه، recycler چندین مورد در حافظه از جمله کش حافظه رو چک میکنه تا اگر آیتم مورد نظر وجود نداشت، بعد متد onBindViewHolder رو فراخوانی کنه.

بنابراین میتونید از متد زیر استفاده کنید برای کش کردن و نگه داشتن آیتم‌های بیشتری در حافظه: (مقدار پیشفرض ۲ هست)

recyclerView.setItemViewCacheSize(20)

 

* اگر width و height آیتم لیوت مقدار مشخصی داره و مقادیرشون به محتوایی که داخل adapter میذارید وابسته نیستن، میتونید متد زیرو استفاده کنید تا هربار که بایند میشن، مقادیر محاسبه نشن:

recyclerView.setHasFixedSize(true)

 

* نکته ی دیگه، توصیه شده اگر به فکر performance بالای recyclerview هستیم از constraint layout استفاده نکنیم.

 

* مسئله آخر هم در مورد ۱۵۰ یا مقادیر بیشتری از رکوردهایی که از دیتابیس میگیرید (Endless Scrolling) داخل نت مطلب زیاده درموردش.

محسن موحد ۱۹ فروردین ۱۳۹۹، ۱۵:۲۱