آموزش جاوا و اندروید

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

آموزش جاوا و اندروید

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

طبقه بندی موضوعی

terminology در Rxjava - قسمت اول

شنبه, ۲ اسفند ۱۳۹۹، ۰۱:۳۵ ق.ظ

RxJava دارای سه عنصر اصلی است:

1. Observable: مسئول منتشر کردن آیتم ها

2. Subscriber: مصرف کننده آیتم های منتشر شده توسط Observable

3. Schedulers: در واقع همون  thread pool هست که برای انجام تسک ها ازش استفاده میشه

RxJava در واقع همون دیزاین پترن Observable هست اما با امکاناتی بیشتر. مثلا معمولا Observable تا وقتی Subscriber نداشته باشه چیزی رو منتشر نمیکنه که این امر سبب بهبود پرفورمنس میشه.

مقاله مدیوم، مفاهیم مقدماتی Rxjava و مثال های ابتدایی

 

فلوی اجرای کدهای RxJava:

اول Observable ساخته میشه، سپس Subscriber (یا همون observable بهش متصل میشه)، پس از آن با توجه به تردی که در subscribeOn مشخص شده، عملیات اپراتورها در آن ترد انجام شده و در نهایت، با توجه به تردی که توسط observeOn معرفی میگردد، در ترد مذکور منتشر میشود. به جز اپراتورهای just و from

 

Hot Observable، Cold Observable، Connectable Observable:

Hot Observable به محض ساخته شدن دیتا اون رو منتشر میکنه و منتظر subscription نمیمونه. subscription از هر جا به Hot Observable متصل بشه از همون جا دیتا رو دریافت میکنه (یعنی ممکنه یه مقداری از دیتا رو از دست بده). در این حالت میشه چند تا subscription داشت ولی هر کدوم از نقطه ای که به Hot Observable متصل شدن به دیتا دسترسی خواهند داشت.

HOT Observable may begin emitting items as soon as it is created, and so any observer who later subscribes to that Observable may start observing the sequence somewhere in the middle.

Think of a hot Observable as a radio station. All of the listeners that are listening to it at this moment listen to the same song.

 

Cold Observable هر وقت subscription بهش متصل بشه دیتا رو منتشر میکنه. در این حالت میشه چند تا subscription داشت ولی برخلاف قبلی، هر کدوم کل دیتا رو دریافت میکنن.

COLD Observable, on the other hand, waits until an observer subscribes to it before it begins to emit items, and so such an observer is guaranteed to see the whole sequence from the beginning.

A cold Observable is a music CD. Many people can buy it and listen to it independently.

 

Hot Observable توسط Connectable Observable ساخته میشه که در ادامه کدش اومده.

 

Hot Observable (به هایلایت ها توجه شود):

ConnectableObservable observable = Observable.create(new ObservableOnSubscribe<CharSequence>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<CharSequence> emitter) throws Throwable {
        emitter.onNext("Maryam");
        emitter.onNext("is");
        emitter.onNext("a");
        emitter.onNext("professional");
        emitter.onNext("developer");
    }
}).publish();
observable.subscribe(observable("observable 1: "));
observable.subscribe(observable("observable 2: "));
observable.subscribe(observable("observable 3: "));
observable.connect();

خروجی:

همانطور که مشخص است، در این حالت همه observer ها به صورت موازی مقدار میگیرند که به این فرآیند "multiCasting" گفته می شود.

 

Cold Observable:

Observable observable = Observable.create(new ObservableOnSubscribe<CharSequence>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<CharSequence> emitter) throws Throwable {
        emitter.onNext("Maryam");
        emitter.onNext("is");
        emitter.onNext("a");
        emitter.onNext("professional");
        emitter.onNext("developer");
    }
});
observable.subscribe(observable("observable 1: "));
observable.subscribe(observable("observable 2: "));
observable.subscribe(observable("observable 3: "));

خروجی:

در این حالت دیتا به صورت کامل به یک observer میرسه و بعد سراغ بعدی میره.

 

نکته: ما عمدتا با Cold Observableها کار می کنیم.

 

مثال هایی همراه با توضیح در این مورد:

1

2

3

4

5

موافقین ۰ مخالفین ۰ ۹۹/۱۲/۰۲
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی