首页
苏兮影视
随笔记
壁纸
更多
直播
时光轴
友联
关于
统计
Search
1
软件添加id功能按钮
760 阅读
2
v2ray节点搭建
727 阅读
3
typecho非常有特色的模块
548 阅读
4
QQxml消息卡片生成源码
501 阅读
5
网易云音乐歌单ID获取教程
471 阅读
谈天说地
建站源码
经验教程
资源分享
动漫美图
登录
Search
标签搜索
java
flutter
springboot
安卓
rust
linux
vue
docker
joe
快捷键
git
fish shell
maven
redis
netty
dart
groovy
js
设计模式
rpc
尽意
累计撰写
101
篇文章
累计收到
39
条评论
首页
栏目
谈天说地
建站源码
经验教程
资源分享
动漫美图
页面
苏兮影视
随笔记
壁纸
直播
时光轴
友联
关于
统计
搜索到
1
篇与
的结果
安卓使用 RxJava 封装 RxBus 实现事件总线
1. 引入依赖在 build.gradle 文件中添加 RxJava 和 RxBus 所需的依赖:dependencies { implementation 'io.reactivex.rxjava2:rxjava:2.2.21' // RxJava 依赖 implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // RxAndroid 依赖(可选,用于 Android 线程切换) }2. 定义 RxBus 类创建一个封装了 RxJava 的 RxBus 类,它负责管理消息的发布与订阅。public class RxBus { private final PublishSubject<Object> bus; private RxBus() { bus = PublishSubject.create(); } private static class Holder { private static final RxBus INSTANCE = new RxBus(); } public static RxBus getInstance() { return Holder.INSTANCE; } // 发送事件 public void post(Object event) { bus.onNext(event); } // 订阅事件 public <T> Observable<T> toObservable(Class<T> eventType) { return bus.ofType(eventType); } }PublishSubject 是 RxJava 提供的一个 Subject,它可以同时作为观察者和被观察者。当你调用 onNext 时,所有订阅者都会接收到消息。toObservable 方法允许我们根据事件类型过滤消息。3. 创建自定义事件类根据不同的需求定义不同的事件类。例如,创建一个表示登录成功的事件:public class LoginEvent { private String userName; private String userId; public LoginEvent(String userName, String userId) { this.userName = userName; this.userId = userId; } public String getUserName() { return userName; } public String getUserId() { return userId; } }4. 发送事件当需要发送事件时,可以通过 RxBus.getInstance().post() 方法将事件发布出去:// 发送登录成功事件 LoginEvent loginEvent = new LoginEvent("JohnDoe", "12345"); RxBus.getInstance().post(loginEvent);5. 在多个地方监听事件在不同的地方(如 Activity 或 Fragment),你可以通过 RxBus 监听事件。为了避免内存泄露,我们使用 CompositeDisposable 来管理订阅。public class MainActivity extends AppCompatActivity { private CompositeDisposable compositeDisposable = new CompositeDisposable(); @Override protected void onStart() { super.onStart(); // 订阅事件 Disposable disposable = RxBus.getInstance() .toObservable(LoginEvent.class) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loginEvent -> { // 处理登录事件 Log.d("MainActivity", "User Logged In: " + loginEvent.getUserName()); }); compositeDisposable.add(disposable); // 添加到 CompositeDisposable 管理 } @Override protected void onStop() { super.onStop(); compositeDisposable.clear(); // 清除所有订阅,避免内存泄露 } }compositeDisposable.add(disposable) 用于添加订阅到 CompositeDisposable 中。在 onStop() 中调用 compositeDisposable.clear() 来清除所有的订阅,避免因为 Activity 或 Fragment 销毁后仍然存在未取消的订阅导致内存泄露。
2025年02月13日
46 阅读
0 评论
2 点赞