در آموزش های قبلی یاد گرفتیم که با استفاده از event bus رویدادها رو broadcast بکنیم به طور مثال یک اکتیویتی و یک سرویس داریم زمانی که یک اتفاقی در سرویس رخ داد رنگ یک دکمه رو در اکتیویتی تغییر بدیم، یا یک سری داده رو به اکتیویتی ارسال بکینم.
در این آموزش قصد داریم بهتون یاد بدیم چطور ازRxjava برای پاس دادن اطلاعات استفاده بکنیم، قبل از اون مزیت هایی که این روش نسبت به روش قبلی داره رو بهتون میگم:
خب مرحله اول یک کلاس 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(); }
شما کتابخونه ای میشناسید که بتونه این کار رو بهتر انجام بده؟ معرفی کنید.