این ساختمان از دو قسمت اساسی ساخته شده میباشد – طراحی اپلیکیشن صاحبان چرخه حیات (Lifecycle owners) و ناظران چرخه حیات (Lifecycle owners).
1- صاحبان چرخه حیات (Lifecycle owners) در اختیار گرفتن کنندگان رابط کاربری میباشند، که چرخه حیات خودشان را داراهستند مثل اکتیویتی و فرگمنت.
2- ناظران چرخه حیات (Lifecycle owners) مشاهده رایاپارس گر صاحبان چرخه حیات (Lifecycle owners) میباشند و هر تغییر و تحول در باب چرخه حیات انها را اعلان میکنند. ما از LifecycleObserver برای ساختوساز کامپوننت های باخبر از چرخه حیات (lifecycle-aware) به کار گیری میکنیم.
LiveData
LiveData برای این به کار گیری میگردد که بلافاصله تغییرات تولید گردیده در اطلاعات را به رابط کاربری خبر دهد. لیست ذیل توصیفی میباشد از LiveData :
-یک نگهدارنده داده قابل مشاهده میباشد.
-ناظران را از تغییرات اطلاعات آگاه میکند به این ترتیب قادر است رابط کاربری را بروزرسانی نماید.
-به چرخه حیات احترام میگذارد.
-خیلی مشابه به RxJava میباشد.
جریان کلی (Overall flow) LiveData
کامپوننت های رابط کاربری تغییرات را در LiveData مشاهده می نمایند که به نوبه خویش در واقع صاحبان چرخه حیات را مشاهده میکنند از جمله اکتیویتی یا این که فرگمنت برای چرخه حیات.
اینجا میگوییم که LiveData به چه شکل شغل میکند. آغاز بر روی بروزرسانی ها و تغییرات در اطلاعات پژوهش می نماید.
و هنگامی که مقدار اطلاعات بروز شد در اختیار گرفتن گر های رابط کاربری را نظارت می نماید از جمله اکتیویتی یا این که فرگمنت در موقعیت استارت (started) یا این که ادامه (Resumed) باشند.(یعنی در واقع رابط کاربری در اکنون اکران به یوزرها است) که به ناظران استحضار دهد که رابط کاربری را بروز نماید.
هنوز چیزهایی بیشتری وجود دارااست البته برای معمولی خیس شدن اینجانب صرفا بروی بخش های اصلی که در صورت 3 امده میباشد تمرکز کرده ام.
مزیت های کلیدی LiveData :
-مدام اطلاعات را بروز می نماید.
-یک چرخه حیات باخبر میباشد.
-به کار گیری از تنظیمات های مطلوب با هر تغییراتی.
-پرهیز از هدررفت یاد.
سبک نما (ViewModel)
ViewModel یک محیط برای ذخیره سازی داده های مرتبط با رابط کاربریست. که دربرگیرنده داده های مورد نیاز رابط کاربری میشود. به عنوان مثال، در حالتیکه رابط کاربری دربرگیرنده لیستی از ایتم های خبری میباشد، پس ViewModel خبرها را در خویش نگه میدارد/ذخیره میکند و در دست رابط کاربری میگذارد در شرایطی که نیاز باشد.
این منجر میشود که بخش های متعدد کد از هم غیر وابسته شوند (separation of concerns) ، و کنترلگرهای رابط کاربری (Activity و Fragment) به طور خالص تنها مشمول کدهای مختص به رابط کاربری مشوند مانند findViewById, click listeners, manipulating widgets ,... در حالی که ViewModel دربرگیرنده داده هایی است که می بایست در رابط کاربری به اکران درایند.
این جداسازی اشتباهات عمده ای از پیشرفت دهدگان اندروید را حل نموده است از جمله کرش کردن اپلیکیشن یا این که از دست رفتن اطلاعات در هنگام چرخش دستگاه. ملخص حرف این میباشد که، ViewModel ها تغییرات در تنظیمات را مراقبت می نماید.
یک نمونه:میخواهیم یک رابط کاربری که یک لیست از نوشتهیعلمی های خبری را به اکران می گذارد را بسازیم. اینجا داده های لازم، یک لیست از نوشتهعلمی های خبریست. درحالی که ViewModel چیزی مشابه آنچه که در پایین امده میباشد میباشد:
class NewsViewModel() : ViewModel() {
private var newsArticles: List
init {
// Load the data over here
newsArticles = ....
}
fun getNewsArticles(): List {
return newsArticles
}
}
کلاس NewsViewModel که اطلاعات را نگه میدارد که دراین نصیب \"newsArticles\" میباشد، و از جایی گرفته میگردد (در شرایط ایده ال از یک repository، که پیرو میبینیم). همان گونه که تا قبل از این مشاجره کردیم، ViewModel معمولا اطلاعات رو در یک هیبت از LiveData نگه می دارد تا رابط کاربری را فورا پس از تغییرو تحول بروز نماید.