使用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();
}
});
}
}