使用RxJava和RxAndroid封装RxBus,实现EventBus功能
2016-06-04 21:37
381 查看
使用RxJava和RxAndroid封装RxBus,实现EventBus功能
依赖第三方库:RxJava和RxAndroidcompile 'io.reactivex:rxjava:1.1.5' compile 'io.reactivex:rxandroid:1.2.0'
RxBus的具体代码:
public class RxBus { private HashMap<Object, List<Subject>> maps = new HashMap<>(); private static RxBus instance; private RxBus() { } public static RxBus get() { if (instance == null) { synchronized (RxBus.class) { if (instance == null) { instance = new RxBus(); } } } return instance; } @SuppressWarnings("unchecked") public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) { List<Subject> subjects = maps.get(tag); if (subjects == null) { subjects = new ArrayList<>(); maps.put(tag, subjects); } Subject<T, T> subject = PublishSubject.<T>create(); subjects.add(subject); return subject; } @SuppressWarnings("unchecked") public void unregister(@NonNull Object tag, @NonNull Observable observable) { List<Subject> subjects = maps.get(tag); if (subjects != null) { subjects.remove((Subject) observable); if (subjects.isEmpty()) { maps.remove(tag); } } } @SuppressWarnings("unchecked") public void post(@NonNull Object o) { post(o.getClass().getSimpleName(), o); } @SuppressWarnings("unchecked") public void post(@NonNull Object tag, @NonNull Object o) { List<Subject> subjects = maps.get(tag); if (subjects != null && !subjects.isEmpty()) { for (Subject s : subjects) { s.onNext(o); } } } }
在MianActivity中注册,接收消息,在SecondActivity页面中发送消息
public class MainActivity extends AppCompatActivity { private Observable<String> zhang; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.main); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); zhang = RxBus.get().register("zhang", String.class); zhang.subscribe(new Action1<String>() { @Override public void call(String s) { Log.e("zhang", "+++++++++++++++++++++++++++++++"+s); } }); } @Override protected void onDestroy() { super.onDestroy(); RxBus.get().unregister("zhang", zhang); } }
public class SecondActivity extends AppCompatActivity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btn = (Button) findViewById(R.id.second); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { @Override public void run() { super.run(); RxBus.get().post("zhang", "传递数据++++++"); } }.start(); } }); } }
参考:++基于RxJava、RxAndroid的EventBus实现++
相关文章推荐
- Android系统ViewGroup事件分发
- android清除应用缓存数据
- Android 基础总结:( 十六)Android Thread
- FlowingDrawer 一个bug的解决
- Android中activity的生命周期
- android 目录文件
- Android学习笔记之进度条
- Android系统中View的onTouchEvent和OnTouch区别
- android中的键值对
- Android 生成xml文件
- 动态获取程序的版本名称的方法以及dialog的简单用法以及两种上下文的区别
- Android 热补丁动态修复框架小结
- Android开源框架——事件总线otto
- Android录音、WAV、AMR
- Ubuntu16.04搭建ionic开发环境
- 从头学android_activity之间的切换_姻缘测算器
- 两个surfaceview的重叠效果类似直播效果中的视频和讲义实践
- Android ListView优化
- 02、Android 开发环境搭建
- 01、Android简介