您的位置:首页 > 移动开发 > Android开发

使用RxJava和RxAndroid封装RxBus,实现EventBus功能

2016-06-04 21:37 381 查看

使用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实现++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: