//导入依赖
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.2'
compile'com.trello:rxlifecycle:0.3.0'
compile'com.trello:rxlifecycle-components:0.3.0'
//RXBus工具类
public class RxBusUtils {
private static volatile RxBusUtils instance;
private SerializedSubject<Object, Object> bus;
public RxBusUtils(){
bus = new SerializedSubject<>(PublishSubject.create());
}
public static RxBusUtils getInstance(){
if(instance==null){
synchronized (RxBusUtils.class){
if(instance==null){
instance= new RxBusUtils();
}
}
}
return instance;
}
public void post(Object o){
bus.onNext(o);
}
public <T> Observable<T> tObservable(Class<T> event) {
return bus.ofType(event);
}
}//activity
public class MainActivity extends RxAppCompatActivity implements View.OnClickListener {
private Button btn;
private TextView textView;
private Subscription subscribe;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
textView = (TextView) findViewById(R.id.tv);
btn.setOnClickListener(this);
// //在没有忘记写防止内存泄漏使用接收方法 MainActivity extends AppCompatActivity
// subscribe = RxBusUtils.getInstance().tObservable(Person.class)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(new Action1<Person>() {
// @Override
// public void call(Person person) {
// textView.setText(person.getName());
// }
// });
//在忘记写防止内存泄漏使用接收方法 MainActivity extends RxAppCompatActivity
Observable<Person> observable = RxBusUtils.getInstance().tObservable(Person.class);
Subscription subscribe = observable
.compose(this.bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
subscribe = observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Person>() {
@Override
public void call(Person person) {
textView.setText(person.getName());
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn:
Person person = new Person("新数据,456");
RxBusUtils.getInstance().post(person);
break;
}
}
// @Override
// // 防止内存泄漏
// protected void onDestroy() {
// super.onDestroy();
// if (subscribe!=null) {
// if(subscribe.isUnsubscribed()){
// subscribe.unsubscribe();
// }
// }
// }
}
本文介绍如何在Android应用中使用RxJava结合RxBus实现事件总线功能,通过实例展示了事件发布与订阅的过程,并提供了防止内存泄漏的方法。
930

被折叠的 条评论
为什么被折叠?



