Rxbus的一种写法:
public class RxBus {
private static final String TAG = RxBus.class.getSimpleName();
private static RxBus instance;
public static boolean DEBUG = false;
public static RxBus get() {
if (null == instance) {
synchronized (RxBus.class) {
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());
return subject;
}
public void unregister(@NonNull Object tag, @NonNull Observable observable) {
List<Subject> subjects = subjectMapper.get(tag);
if (null != subjects) {
if (observable != null && subjects.contains(observable)) {
subjects.remove((Subject) observable);
}
}
if ((subjects == null || subjects.size() == 0) && subjectMapper.contains(tag)) {
subjectMapper.remove(tag);
}
}
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 (subjectList != null && subjectList.size() > 0) {
for (Subject subject : subjectList) {
subject.onNext(content);
}
}
}
}
使用:
private Observable<UserInfo> testObservable;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册rxbus
testObservable= RxBus.get().register("rxbus_test",
UserInfo.class);//需要传递的类
//处理通知
testObservable.subscribe(new Action1<UserInfo>() {
@Override
public void call(UserInfo userInfo) {
HD.LOG("界面刷新 "+userInfo.getId());
onRefresh();
}
});
}
//注销rxbus
@Override
public void onDestroy() {
RxBus.get().unregister("rxbus_test", testObservable);
super.onDestroy();
}
//发出通知
RxBus.get().post("rxbus_test",userInfo);//发出一个userInfo对象
//接收通知的Activity
//在生命周期开始的地方注册,在销毁的地方注销rxbus