Android Studio:RxBus联合ICompositeSubscription使用

[复制链接]
发表于 2025-10-31 19:52:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        我现在想用 RxBus 来发布和订阅变乱,同时使用 ICompositeSubscription 来管理订阅。跟前一个博客的区别在于,变乱流的产生方式差异,更加得全面。
目标


  • 使用 RxBus 发布变乱。
  • 使用 ICompositeSubscription 来管理订阅。
  • 在 Activity 中创建订阅,并确保在 Activity 烧毁时取消订阅,克制内存走漏。
代码实现

1、RxBus:发布和订阅变乱。
  1. public class RxBus {
  2.     private final SerializedSubject<Object, Object> subject;
  3.     public RxBus() {
  4.         subject = new SerializedSubject<>(PublishSubject.create());
  5.     }
  6.     public void post(Object object) {
  7.         subject.onNext(object); // 发布事件
  8.     }
  9.     @NonNull
  10.     public <T> Observable<T> toObservable(Class<T> type) {
  11.         return subject.ofType(type); // 转换成指定类型的 Observable
  12.     }
  13.     public <T> Subscription toSubscription(Class<T> type, Action1<T> action1, Scheduler scheduler) {
  14.         return this
  15.                 .toObservable(type)
  16.                 .subscribeOn(scheduler) // 指定线程调度器
  17.                 .subscribe(action1);
  18.     }
  19. }
复制代码
2、 ICompositeSubscription:管理订阅。
  1. public class ICompositeSubscription {
  2.     private CompositeSubscription mCompositeSubscription;
  3.     public ICompositeSubscription() {
  4.         mCompositeSubscription = new CompositeSubscription();
  5.     }
  6.     public Subscription putSubscription(Subscription subscription) {
  7.         mCompositeSubscription.add(subscription); // 添加订阅
  8.         return subscription;
  9.     }
  10.     public void unSubscribe() {
  11.         if (mCompositeSubscription != null) {
  12.             mCompositeSubscription.clear(); // 取消所有订阅
  13.         }
  14.     }
  15. }
复制代码
3、Event 类:界说变乱类。
  1. public class Event {
  2.     private String message;
  3.     public Event(String message) {
  4.         this.message = message;
  5.     }
  6.     public String getMessage() {
  7.         return message;
  8.     }
  9. }
复制代码
4、Activity 代码:在 Activity 中,使用 RxBus 发布和订阅变乱,并使用 ICompositeSubscription 来管理订阅。
  1. public class MyActivity extends AppCompatActivity {
  2.     private ICompositeSubscription subscriptionManager = new ICompositeSubscription();
  3.     private RxBus mRxBus;
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_main);
  8.         mRxBus = new RxBus();  // 初始化 RxBus
  9.         // 设置订阅事件的规则
  10.         Subscription subscription = mRxBus.toObservable(Event.class) // 订阅 Event 类型的事件
  11.                 .observeOn(AndroidSchedulers.mainThread()) // 在主线程处理
  12.                 .subscribe(event -> {
  13.                     Log.d("RxJava", "收到事件:" + event.getMessage());
  14.                 });
  15.         // 管理订阅
  16.         subscriptionManager.putSubscription(subscription);
  17.         // 模拟发布事件
  18.         findViewById(R.id.btnSendEvent).setOnClickListener(view -> {
  19.             // 发布一个 Event 类型的事件
  20.             mRxBus.post(new Event("Hello from RxBus!"));
  21.         });
  22.     }
  23.     @Override
  24.     protected void onDestroy() {
  25.         super.onDestroy();
  26.         // 取消所有订阅,避免内存泄漏
  27.         subscriptionManager.unSubscribe();
  28.     }
  29. }
复制代码
代码表明


  •         RxBus 类:

    • 用于发布和订阅变乱。通过 post() 方法发布变乱,使用 toObservable() 将变乱转换为 Observable,让订阅者可以订阅该变乱。
           
  •         ICompositeSubscription 类:

    • 用于管理多个订阅。在 onCreate() 中,订阅变乱后将订阅对象参加到 CompositeSubscription 中,确保在 onDestroy() 时可以同一取消全部订阅,克制内存走漏。
           
  •         Event 类:

    • 简朴的变乱类,包罗一个 message 字段和构造方法,用于转达变乱数据。
           
  •         MyActivity:

    • 在 onCreate() 中初始化 RxBus 和 ICompositeSubscription,并订阅 Event 范例的变乱。
    • btnSendEvent 按钮点击后,调用 RxBus.post() 发布一个变乱。
    • 在 onDestroy() 中调用 subscriptionManager.unSubscribe() 来取消订阅。
           
紧张概念


  •         RxBus 的发布和订阅:

    • RxBus 是一个变乱总线,通过 toObservable() 和 post() 方法实现发布和订阅变乱。
    • 订阅 RxBus 后,每当有变乱发布时,订阅者会吸收到这个变乱,并做出相应。
           
  •         ICompositeSubscription 的作用:

    • ICompositeSubscription 管理多个订阅,当 Activity 烧毁时,调用 unSubscribe() 取消全部订阅,防止内存走漏。
    • 在 Activity 中添加每个新的订阅并通过 putSubscription() 方法管理。
           


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表