【Android】EventBus使用関連
11060 ワード
【Android】EventBus使用関連
EventBusの使用は非常に簡単で、主に以下の3つの方法に使われています.
EventManager'管理クラスを作成し、イベント登録が必要なクラスの購読方法があるかどうかをEventManagerで判断します.
EventBusの使用は非常に簡単で、主に以下の3つの方法に使われています.
// EventBus
EventBus.getDefault().register(Object subscriber);
//
@Subscribe
public void onEventXXX(Object event){
//
...
}
//
EventBus.getDefault().post(Object event);
// EventBus
EventBus.getDefault().unregister(Object subscriber);
注意して使用していますEventManager'管理クラスを作成し、イベント登録が必要なクラスの購読方法があるかどうかをEventManagerで判断します.
public static boolean isBindEventBus(Class clazz) {
Method[] ms = clazz.getDeclaredMethods();
for (Method m : ms) {
if (m.isAnnotationPresent(Subscribe.class)) {
return true;
}
}
return false;
}
管理クラスコード:public class EventManager {
private static EventManager sInstance = new EventManager();
private static EventBus mEventBus;
private EventManager() {
mEventBus = new CustomEventBus();
}
public static EventManager getsInstance() {
return sInstance;
}
public void post(Object event) {
mEventBus.post(event);
}
public void postSticky(Object event) {
mEventBus.postSticky(event);
}
public void register(Object event) {
mEventBus.register(event);
}
public void unRegister(Object event) {
mEventBus.unregister(event);
}
/**
*
*
* @param clazz
* @return
*/
public static boolean isBindEventBus(Class clazz) {
Method[] ms = clazz.getDeclaredMethods();
for (Method m : ms) {
if (m.isAnnotationPresent(Subscribe.class)) {
return true;
}
}
return false;
}
static final class CustomEventBus extends EventBus {
@Override
public void register(Object subscriber) {
if (!isRegistered(subscriber)) {
super.register(subscriber);
}
}
}
}