مهرداد
مهرداد
خواندن ۳ دقیقه·۵ سال پیش

آموزش Rxjava | استفاده از RxJava به جای Event Bus (انتقال اطلاعات با RxJava)

در آموزش های قبلی یاد گرفتیم که با استفاده از event bus رویدادها رو broadcast بکنیم به طور مثال یک اکتیویتی و یک سرویس داریم زمانی که یک اتفاقی در سرویس رخ داد رنگ یک دکمه رو در اکتیویتی تغییر بدیم، یا یک سری داده رو به اکتیویتی ارسال بکینم.

اگر آموزش EventBus رو ندیدید اینجا کلیک کنید.

در این آموزش قصد داریم بهتون یاد بدیم چطور ازRxjava برای پاس دادن اطلاعات استفاده بکنیم، قبل از اون مزیت هایی که این روش نسبت به روش قبلی داره رو بهتون میگم:

  1. بررسی کد ها از لحاظ منطقی راحت تره
  2. تست و دیباگ برنامه خیلی سریع تره
  3. مدیریت thread ها ساده تره

خب مرحله اول یک کلاس bus می سازیم به جای object کلاس خودمون رو میذاریم. منظورم همون مدل دیتامونه که ممکنه یه String ساده باشه یا لیستی از اطلاعاتی که از وب سرویس میگرفتیم و Serialize میکردیم.

public final class RxBus { private static final BehaviorSubject<Object> behaviorSubject = BehaviorSubject.create(); public static BehaviorSubject<Object> getSubject() { return behaviorSubject; }

به اون قسمت از برنامه که میخوایم یه سری اطلاعات رو ارسال کنیم میریم وکدای زیر رو اونجا میزاریم

MyData data =getMyData(); RxBus.getSubject().onNext(data) ; startActivity(new Intent(MainActivity.this, AnotherAct.class));

بعد از اون به اکتیوتی که میخوایم اطلاعات رو دریافت کنه میریم

DisposableObserver disposable; disposable = RxBus.getSubject(). subscribeWith(new DisposableObserver<Object>() { @Override public void onNext(Object o) { if (o instanceof MyData) { Log.d("tag", (MyData)o.getData(); } } @Override public void (Throwable e) { } @Override public void onComplete() { } }); });

در اینجا متد onNext اطلاعات رو دریافت میکنه میتونیم هر عملیاتی مثلا نمایش در یک لیست ویو رو اونجا انجام بدیم .

فقط در آخر توجه داشته باشیم که برای جلوگیری از memoryleak حتما باید unSubscribe کنیم

@Override protected void onDestroy() { super.onDestroy(); disposable.dispose(); }

شما کتابخونه ای میشناسید که بتونه این کار رو بهتر انجام بده؟ معرفی کنید.

شاد و پیروز باشید.

آموزش Rxjavaآموزش rxانتقال اطلاعات با rxمقایسه ی rx و eventbusبرنامه نویسی
Android and Flutter developer
شاید از این پست‌ها خوشتان بیاید