EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

معرفی Loader

در درس قبل از آموزش اندروید ، تولید کننده های محتوا و نحوه پیاده سازی آن ها را آموختیم. در این درس با موستانگ همراه شوید تا با مفهوم جدیدی به نام loader و CursorLoader آشنا شویم.

 

Loader چیست ؟

loader در اندروید 3 معرفی شد. وظیفه آن این است که بطور Asynchrone یا غیر همگام، داده را در یک اکتیویتی یا fragment لود کند. به شکل زیر توجه کنید. وقتی یک Loader می سازیم، یک AsyncTask ساخته می شود تا داده ها را در پس زمینه (Background Thread) (نه در اکتیویتی اصلی) دریافت کند و وقتی کار لود داده ها تمام شد، با  UI Thread همزمان شده و داده را تحویل دهد. Loader حتی می تواند طوری تنظیم شود که وقتی داده ها دچار تغییر شدند، UI Thread را باخبر کند.

loader در اندروید - موستانگ
loader در اندروید – موستانگ

 

CursorLoader

CursorLoader، یک پیاده سازی از AsyncTaskLoader بوده که به طور ویژه برای کار با ContentProvier طراحی شده است. بدین صورت که یک کوئری را به ContentProvider فرستاده و یک Cursor را برمی گرداند. آنگاه، این Cursor به UI داده می شود و هر گاه پایگاه داده (و در نتیجه ContentProvider) تغییر کرد، این Cursor نیز بطور خودکار تغییر خواهد کرد.

بنابرین CursorLoader، خودش تمام کارهای لود داده در پس زمینه، همزمانی با UI و مانیتور کردن پایگاه داده را انجام می دهد و شما دیگر لزومی به درگیر شدن با این موارد نخواهید داشت.

[*] نکته خوب دیگر در مورد loader این است که:

هر گاه اکتیویتی دوباره ساخته شد (مثلاً کاربر گوشی را از حالت عمودی به افقی تغییر داد)، loader می تواند بطور خودکار به آخرین Cursor وصل شود و داده های لود شده تا به اینجا را بگیرد و و در نتیجه لزومی به کوئری گرفتن مجدد نخواهد بود.

loader و CursorLoader در اندروید - موستانگ
CursorLoader – موستانگ

 

فواید استفاده از loader

اگر به خاطر داشته باشید، ما از AsyncTask برای لود کردن داده های هواشناسی استفاده کردیم. یعنی در تابع onCreate، یک AsyncTask ساختیم که آن هم یک Thread می ساخت و در پس زمینه، داده را دانلود می کرد. حالا اگر گوشی را بچرخانیم (از حالت افقی به عمودی تبدیل کنیم)، تابع onCreate دوباره فراخوانی می شود، یک AsyncTask دیگر ساخته شده و داده باید دوباره دانلود شود. در نتیجه، ما در اینجا هم زمان لود را طولانی تر می کنیم و هم منابعمان را هدر می دهیم.

اما، وقتی این اتفاق با وجود CursorLoader می افتد، loader جدید به Cursor قبلی وصل می شود و داده های آن را دریافت می کند. این کار باعث صرفه جویی در منبع و کم شدن زمان لود داده خواهد شد. با این اوصاف، مفهوم loader به این دلیل به اندروید اضافه شد که از دسترسی مستقیم UI Thread به پایگاه داده جلوگیری شود.

به تصویر زیر نگاه کنید. وقتی ما به پایگاه داده کوئری می دهیم، کلاس های زیر به ترتیب استفاده می شوند:

loader در اندروید - موستانگ
مراحل اجرای کوئری در اندروید – موستانگ

 

ابتدا UI با استفاده از WeatherContract، یک URI می سازذ و سپس از این URI استفاده کرده و تابعی از ContentResolver را فراخوانی می کند که آن هم درخواستمان را به WeatherProvider می فرستد. WeatherProvider از کلاس DB Helper استفاده می کند و نمونه ای از پایگاه داده SQLite را می گیرد تا با جداولمان در ارتباط باشد. سپس، کوئری به کلاس SQLiteDatabase فرستاده می شود که آن هم آن را به پایگاه داده می فرستد.

حالا CursorLoader اضافه می شود و کارش را اینطور انجام می دهد: URI را می گیرد و به جای ما، ContentResolver را فراخوانی می کند. (داخل یک AsyncTask)

 

 

 

در نهایت

[*] در این درس، با مفهوم loader و نحوه پیاده سازی آن در اندروید آشنا شدید. با موستانگ در درس آینده همراه باشید تا ساخت رابط های کاربری غنی و ریسپانسیو را تمرین کنیم.

[*] سوالات و نظرات خود را می توانید در پایین این نوشته و در قسمت دیدگاه ها ثبت کنید. همچنین، در این قسمت از مانژ می توانید نمونه کدهایی از این درس را مشاهده کرده و سوالات اندروید خود را نیز قرار دهید. تیم متخصصان برنامه نویسی موستانگ ، پاسخگوی شما خواهند بود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *