در این مقاله سعی بر توضیح دیتابیس ROOM با Live Data است
Live data یک مشاهدکننده نگه دارانده داده است یا همان (Data Holder) بخشی از اندروید جت پک است
Livedata یک نوع مشاهده کننده از کلاس DataHolder است. برخلاف مشاهده کننده عادی live Data یک چرخه زندگی داره آگاهی دارد
یه این معنی است که به بقیه چرخه های زندگی برنامه را خراب نمیکند اجزایی مانند Activity ها Fragment ها یا سرویس ها (که هر کدام چرخه زندگی دارند)
این آگاهی اطمینان میدهد Livedata فقط بر اجزای برنامه که مشاهده میکند که داخل چرخه هستند را بروز رسانی میکند
به عنوان یک مشاهده کننده که مشخص میکند توسط کلاس observer ("مشاهده کننده"),که در حالت فعال اگر چرخه زندگی به عنوان حالت STATED یا RESUME باشد
LiveData فقط مشاهده های فعال در مورد بروز رسانی را اطلاع میدهد. مشاهده های غیر فعال که ثبت شده در Live Data در مورد تغیر آنها اطلاعی نمیدهد
چرا استفاده از LiveData؟
LiveData از الگوی مشاهده گر پیروی می کند. LiveData هنگام تغییر وضعیت چرخه زندگی ، ناظر (مشاهده کننده ) را مطلع می کند. می توانید کد خود را برای به روزرسانی رابط کاربری در این اشیا Observer یکی کنید. به جای به روزرسانی رابط کاربری هر بار که داده های برنامه تغییر می کند ، ناظر شما می تواند هر زمان تغییراتی در رابط کاربر را به روز کند.
ناظران به چرخه حیات اشیا چسبیده هستند و وقتی حافظه را پاک میکنند که چرخه حیاتشان خراب شده باشد
اگر چرخه حیات ناظر غیر فعال باشد ، مانند فعالیت(Activity) در پشت پشته ، هیچ رویداد LiveData دریافت نمی کند.
اجزای UI فقط ناظر داده های مربوط است که نه توقف یا ادامه مشاهده کننده رو میده. LiveData به طور خودکار همه اینها را مدیریت می کند ، زیرا هنگام مشاهده از تغییرات وضعیت مربوط به چرخه زندگی آگاه است.
اگر چرخه زندگی غیرفعال شود ، با فعال شدن مجدد آخرین داده ها را دریافت می کند. به عنوان مثال ، فعالیتی که در پس زمینه بود ، آخرین داده ها را بلافاصله پس از بازگشت به پیش زمینه دریافت می کند.
اگر یک فعالیت(Activity) یا قطعه ای(fragment) به دلیل تغییر تنظیمات مانند چرخش دستگاه دوباره ایجاد شود ، بلافاصله آخرین داده های موجود را دریافت می کند.
می توانید یک شی LiveData را با استفاده از الگوی singleton گسترش دهید تا خدمات سیستم را بپیچید تا بتوانند در برنامه شما به اشتراک گذاشته شوند. شی LiveData یک بار به سرویس سیستم متصل می شود و سپس هر مشاهده کننده ای که به منبع نیاز دارد فقط می تواند شی LiveData را مشاهده کند. برای اطلاعات بیشتر ، به توسعه LiveData مراجعه کنید.MoreLiveData
پیاده سازی ROOM
1.فایل build.gradle را برای پروژه خود باز کنید (نه موارد مربوط به برنامه یا ماژول) و ()Google repository را مانند تصویر زیر اضافه کنید:
2. فایل build.gradle را برای برنامه یا ماژول خود باز کرده و وابستگی ها(Dependencies) را اضافه کنید:
مرحله 2: LiveData را اضافه کنید
ما وقتی می خواهیم یک خروجی را مشاهده کنیم از LiveData استفاده می کنیم ، بنابراین باید داده های دریافتی را با LiveData بپیچیم
بیایید ببینیم چگونه این کار را انجام می دهیم
اول از همه ، ما باید شناسایی کنیم که می خواهیم ناظر را در کجا قرار دهیم. در مسئله ما ، داده های بازیابی شده از پایگاه داده را مشاهده خواهیم کرد.
قبل از اضافه کردن LiveData ، می توانیم ببینیم که فقط لیست افراد را از پایگاه داده بازیابی می کنیم.
وقتی LiveData را اضافه می کنیم فقط باید با LiveData بسته بندی کنیم تا بتوانیم یک ناظر را بگذاریم
اکنون ما دریافت میکنیم شیِ <<LiveData<List<Person به جای <List<Person
و اکنون میبینیم که خطا که جایی که صدا زده شده از ()LoadAllpersonsدریافت شده از متد DAO
متد ()loadAllpersons اکنون در حال بازگرداندن LiveData Objects از DAO است.
به جای این کار ?
این کار را خواهید کرد
اکنون ما یک مشاهده گر را به ()loadAllpersons متصل کرده ایم تا بتوانیم تغییرات موجود در پایگاه داده را مشاهده کنیم.
این ناظر فقط در صورت تغییر در پایگاه داده مشاهده خواهد کرد.
اکنون نگران نباشید از کجا می خواهید این را فراخوانی کنید زیرا این فقط درصورت ایجاد هر نوع تغییر در پایگاه داده فراخوانی می شود.
با تشکر از خواننده گرامی برای خواندن این مقاله Source