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
原创粉丝点击