میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

RxJava در اندروید

هر برنامه ای که دارای چهار ویژگی یا پارامتر (قابلیت مدیریت خطاها و ارائه ی بهترین سرویس) resilience ، (انعطاف و مقایس پذیری) scalability ، ( واکنش گرا و تعاملی ) responsive و (رویداد محور) Event-driven باشد را در اصطلاح reactive می نامند. در مدل برنامه نویسی reactive ، سرویس گیرنده یا کاربر به محض ورود داده به آن واکنش نشان می دهند. به همین خاطر برنامه نویسی asynch را برنامه نویسی reactive نیز می خوانند. مدل برنامه نویسی reactive این امکان را فراهم می آورد تا تغییرات eventها را به observerها (توابع) گوش فرا دهنده و ثبت شده، منتشر ( propagate ) و اعمال نمایید.

در واقع RxJava امکان پیاده سازی وظایف غیر همزمان را به راحتی برای توسعه دهنده فراهم می آورد.

RxJava پیاده سازی از ReativeX برای Java می باشد که NetFlix توسعه داده و در بین برنامه نویسان جاوا محبوبیت زیادی پیدا کره است. Rxjava در سال ۲۰۱۴ کد باز ( open source ) شده و تحت آدرس / http://reactivex.io میزبانی می شود. ورژن جاوایی آن تحت https://github.com/ReactiveX/RxJava قابل دسترسی می باشد. این کتابخانه تحت لیسانس Apache 2.0 منتشر می شود.

RxJava خود را تحت عنوان یک API که برای برنامه نویسی ناهمزمان طراحی شده (تعریف تسک ها و وظایف نا همزمان) و از ( stream observable آبجکت های observable اطلاعاتی را منتشر کرده و آن ها را به توابع گوش فرادهنده به تغییرات که همان observer ها هستند ارسال می کنند) استفاده می کند، معرفی می نماید.

 


اضافه کردن کتابخانه RxJava 2

از زمان نگارش این مقاله، ویرایش جدیدتری از کتابخانه ی RxJava ارائه شده است. مقدار g.a.y را با ۲٫۰٫۱ یا نسخه ی جدیدتر جایگزین نمایید.
برای افزودن کتابخانه ی مزبور ویژه ی سیستم کامپایل ،Maven می توانید تکه کد زیر را در بخش dependency ها اضافه نمایید.

 

<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>g.a.v</version>
</dependency>

برای سیستم کامپایل Gradle ، می توانید RxJava را از طریق دستور زیر اضافه نمایید.

 

compile group: 'io.reactivex.rxjava2', name: 'rxjava', version: 'g.a.v'

برنامه نویسی ناهزمان (Async)

امروزه برنامه نویسی به سبک دستوری/ imperative طوری که اپلیکیشن در لحظه تنها یک عملیات را پردازش کند(single-thread) دیگر به هیچ وجه کارامد نیست و ممکن است UI های unresponsive را مسدود کند و در نهایت تجربه ی کاربری ضعیفی را در پی داشته باشد.
با مدیریت رخدادهای پیش بینی نشده به صورت ناهمزمان (
async، می توان از این اتفاق جلوگیری کرد. برای مثال، چنانچه لازم باشد منتظر فراخوانی وب سرویس یا کوئری دیتابیس باشید،
اگر شبکه پاسخگو نبود ( responsive
)، قطعا اپلیکیشن هنگ خواهد کرد.

 

مثالی در این زمینه:

 

public List<Todo> getTodos() {
List<Todo> todosFromWeb = // query a webservice (with bad network latency)
return todosFromDb;
}

فراخوانی متد () getTodos از thread اصلی یا یک UI thread سبب می شود تا زمان رسیدن todosFromWeb ، اپلیکیشن nonresponsive بوده و تجربه ی کاربری ضعیفی برای کاربر رقم خورده شود.
برای بهبود کارایی این query که مدت زمان اجرای آن مشخص نیست، می بایست آن را در یک thread دیگر اجرا نموده و سپس به هنگام رسیدن نتیجه thread
، اصلی را مطلع نمایید.

 

public void getTodos(Consumer<List<Todo>> todosConsumer) {
Thread thread = new Thread(()-> {
List<Todo> todosFromWeb = // query a webservice
todosConsumer.accept(todosFromWeb);
});
thread.start();
}

حال پس از فراخوانی متد getTodos(Consumer<List<Todo>> todosConsumer)  نخ یا thread اصلی می تواند بدون متوقف شدن همچنان به اجرا ادامه دهد و زمانی که متد accept از consumer صدا خورده شد، واکنش نشان دهد.

 


Observable ها  ، Observer ها ، Subscription ها

RxJava از مفهوم Observable ها و Observer ها استفاده می کند. Observer ها توابعی هستند که با گوش فراخوانی و subscribe کردن به Observable ها که آبجکت هستند، از تغییرات رخ داده بلافاصله آگاه شده و آن تغییرات را در خود منعکس می نمایند. Observer ها به مجرد اینکه یک observable مقداری را  emit (ارسال) می کند، از آن مطلع می شوند. همچنین زمانی که observable اطلاعاتی را مبنی بر اینکه دیگر مقادیری وجود ندارد ارسال می کند، observer ها از آن مطلع می شوند. زمانی هم که observable با خطایی مواجه می شود، متد ( onError( Throwable e خورده شده و باز observer از آن آگاه می شود. توابع مربوطه Observer ای به نام interface هستند که همگی از onCompleted() و onError() ، onNext() ارث بری می شوند. آبجکت یا نمونه ای از Subscription بیانگر اتصال و ارتباط بین یک observer و observable است. اگر متد () unsubscribe را بر روی این نمونه صدا بزنید، observable از عضویت متد بیرون آمده و اتصال بین آن ها قطع می شود. این متد می تواند زمانی مفید باشد که شما می خواهید بروز رسانی و آپدیت یک المان رابط کاربری یا widget خاتمه یافته ( dispose ) و از حافظه حذف شود.

 


تعریف thread اجرا و یک thread برای گوش دادن به تغییرات (observe)

می توانید thread ای که observable در آن قرار است اجرا شود را با فراخوانی متد () subscribeOn تعریف نمایید و thread ای که observer ها در آن اجرا می شوند را با اجرای متد () observeOn اعلان کنید.

 


امیدواریم آموزش RxJava در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

ارسال دیدگاه

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

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟