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