RxBus使用
来源:互联网 发布:今日头条待遇 知乎 编辑:程序博客网 时间:2024/05/29 18:55
package com.tutu.googletraining;import android.support.annotation.NonNull;import android.util.Log;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.concurrent.ConcurrentHashMap;import rx.Observable;import rx.subjects.PublishSubject;import rx.subjects.Subject;/** * Created by tutu on 16/6/30. */public class RxBus {private static final String TAG = RxBus.class.getSimpleName();private static RxBus instance;public static boolean DEBUG = false;public static synchronized RxBus get() {if (null == instance) {instance = new RxBus();}return instance;}private RxBus() {}private ConcurrentHashMap<Object, List<Subject>> subjectMapper = new ConcurrentHashMap<>();@SuppressWarnings("unchecked")public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) {List<Subject> subjectList = subjectMapper.get(tag);if (null == subjectList) {subjectList = new ArrayList<>();subjectMapper.put(tag, subjectList);}Subject<T, T> subject;subjectList.add(subject = PublishSubject.create());if (DEBUG) Log.d(TAG, "[register]subjectMapper: " + subjectMapper);return subject;}public void unregister(@NonNull Object tag, @NonNull Observable observable) {List<Subject> subjects = subjectMapper.get(tag);if (null != subjects) {subjects.remove((Subject) observable);if (isEmpty(subjects)) {subjectMapper.remove(tag);}}if (DEBUG) Log.d(TAG, "[unregister]subjectMapper: " + subjectMapper);}public void post(@NonNull Object content) {post(content.getClass().getName(), content);}@SuppressWarnings("unchecked")public void post(@NonNull Object tag, @NonNull Object content) {List<Subject> subjectList = subjectMapper.get(tag);if (!isEmpty(subjectList)) {for (Subject subject : subjectList) {subject.onNext(content);}}if (DEBUG) Log.d(TAG, "[send]subjectMapper: " + subjectMapper);}public static boolean isEmpty(Collection collection) {return null == collection || collection.isEmpty();}}
</pre><pre code_snippet_id="1737899" snippet_file_name="blog_20160630_1_7083191" name="code" class="java">
<pre name="code" class="java">package com.tutu.googletraining;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import rx.Observable;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action1;public class RxActivity extends AppCompatActivity {private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_rx);
<span style="white-space:pre"></span>//这里创建订阅者和订阅Observable<String> addob = RxBus.get().register("tag",String.class);addob.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.e("xxxx",s);btn.setText(s);}});btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {RxBus.get().post("tag","hahahahaha");}});}}
不要忘了添加依赖
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
0 0
- RxBus使用
- RxJava+RxBus的使用
- RxBus使用示例
- RXBUS的简单使用
- 使用和配置RxBus
- RxBus的使用示例
- RxBus使用总结
- 使用RxBus代替广播
- Android Rxbus的使用
- RxBus使用总结
- Rxbus的简单使用
- Android RxBus的使用
- RxBus简单使用
- RxBus 简单使用学习
- 使用RxBus替换EvenBus
- RxBus
- RxBus
- RXBUS
- Div+Css布局教程(-)CSS必备知识
- DSM -- 远程连接,并且建立数据库连接的流程
- Python 安装 httplib2
- 加减乘除的c++实现
- Android 应用监听后台切换前台的方法
- RxBus使用
- Android 上自定义的复式折线图(三)
- IOS 永久保存相册或相机拍照的图片
- Berkeley DB学习笔记
- 【那些年遇到过的面试题】list和vector有什么区别
- R语言table函数
- 你是否也因为骚扰电话各种烦呢
- Andorid6.0音量调整(设置)流程
- Swift语言精要 - 浅谈代理模式(Delegate)