用RxBus替代EventBus、Otto
来源:互联网 发布:怎样用手机淘宝购物 编辑:程序博客网 时间:2024/06/05 09:08
RxJava已经渐渐走进了程序员的日常生活,用习惯了EventBus的Coder哥决定用Rxjava的思想来实现一个Rxbus,用于替代EventBus。闲话少说,直接上代码,欢迎批评指正。
import rx.Observable;import rx.subjects.PublishSubject;import rx.subjects.SerializedSubject;import rx.subjects.Subject;/** * 类描述:RxBus,时间事件总线 */public class RxBus { private final Subject<Object, Object> bus; private RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } public static RxBus getInstance() { return SingletonHolder.mInstance; } // 采用内部类的方式实现单例,线程安全 private static class SingletonHolder { private static final RxBus mInstance = new RxBus(); } public synchronized <T> Observable<T> toObservable(Class<T> eventType) { return bus.ofType(eventType); } // 发送一个事件 public void post(Object content) { bus.onNext(content); }}
使用方式:
public class CenterListFragment extends Fragment { private RecyclerView mRecyclerView; private List<Movie> mMovieList = new ArrayList<>(); private RecyclerViewAdapter mAdapter; private Subscription mSubscription; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initRxBus(); } /** * 在onCreate或是onResume中注册相应的监听事件 */ private void initRxBus() { mSubscription = RxBus.getInstance().toObservable(IEvent.class).subscribe(new Action1<IEvent>() { @Override public void call(IEvent event) { if (event instanceof DownloadFinishEvent) { Log.d("##!##", "CenterFragment接收到事件"); return; } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { // TODO: 处理异常 } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mRecyclerView = (RecyclerView) inflater.inflate(R.layout.list_fragment, container, false); return mRecyclerView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext())); mAdapter = new RecyclerViewAdapter(getActivity(), mMovieList); mRecyclerView.setAdapter(mAdapter); } @Override public void onDestroy() { super.onDestroy(); mSubscription.unsubscribe(); //反注册RxBus,防止内存泄漏 }}
IEvent.java
/*** 类描述:事件接口*/public interface IEvent {}
DownloadFinishEvent.java
/*** 类描述:下载结束事件*/public class DownloadFinishEvent implements IEvent {}
0 0
- 用RxBus替代EventBus、Otto
- 简单使用RxBus替代EventBus
- RxBus真的能替代EventBus吗?
- OTTO-EVENTBUS
- EventBus & Otto
- EventBus和Otto
- Otto EventBus实践
- otto与EventBus对比
- EventBus,RxBus相关介绍
- RxBus 替换EventBus
- EventBus替代品, RxBus.
- RxBus----Rxjava实现EventBus
- Android EventBus , RxBus
- RxBus对比EventBus
- 实现RxBus代替EventBus
- EventBus和RxBus基本原理
- Android 用RxJava模拟一个EventBus ———RxBus
- 用RxJava实现Rxbus替换EventBus事件总线
- 欢迎使用CSDN-markdown编辑器
- spring-boot中font-awesome在ie8中不显示的问题
- python直接获取API传递回来的参数
- 丹的Python学习笔记Day3
- rman 备份 DB到 asm 磁盘新目录(backup as cpoy)
- 用RxBus替代EventBus、Otto
- 网络数据包收发流程(四):协议栈之packet_type
- Shell while循环
- JEECMS源代码基本结构及相关技术简介
- 架构的核心
- cdh 下载地址
- tomcat启动时同时自启动一个servlet
- 理解SQL原理,写出高效的SQL语句
- eclipse最有用快捷键整理