使用RxJava和RxAndroid封装RxBus,实现EventBus功能
来源:互联网 发布:做一名网络星探的诀窍 编辑:程序博客网 时间:2024/06/05 19:28
使用RxJava和RxAndroid封装RxBus,实现EventBus功能
依赖第三方库:RxJava和RxAndroid
compile '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实现++
0 1
- 使用RxJava和RxAndroid封装RxBus,实现EventBus功能
- RxBus----Rxjava实现EventBus
- RxJava使用示例: 实现Rxbus代替eventbus
- 通过Rxjava和RxAndroid实现的EventBus
- RxJava和RxBus代替EventBus
- RxJava RxAndroid RxBus入门
- Rxjava——使用RxBus替换EventBus
- 基于RxJava、RxAndroid的EventBus实现
- [Android]基于RxJava、RxAndroid的EventBus实现
- 用RxJava实现Rxbus替换EventBus事件总线
- 使用RxJava实现EventBus
- 使用Rxjava实现Eventbus
- RxJava和RxAndroid使用详解
- 实现RxBus代替EventBus
- EventBus和RxBus基本原理
- 用RxJava实现RxBus
- Android RxJava 实现RxBus
- RxJava+RxBus的使用
- 值传递跟引用传递的区别,hashCode()和equals()的区别, 抽象类和接口的区别
- Palindrome Linked List
- 171. Excel Sheet Column Number
- CSDN这体验我也真是醉了
- 169. Majority Element
- 使用RxJava和RxAndroid封装RxBus,实现EventBus功能
- java 中wait和notify 线程等待和线程唤醒的使用方式 需要借助synchronized
- 217. Contains Duplicate
- LeetCode-29.Divide Two Integers
- 350. Intersection of Two Arrays II
- 机器学习整理笔记——k-近邻算法
- 关于EventBus的基本应用(基于v3.0)
- Java注解在Android中使用
- 206. Reverse Linked List