Android事件分发库
- 模块间解耦;
- 提高开发效率;
在gradle中引入EventScheduler
dependencies {
compile 'com.devyok.eventscheduler:event_scheduler:0.0.3'
}
监听事件
普通优先级的事件,按照添加顺序接收
EventScheduler.getDefault().addEventListener(Event.obtain(EventType.UI), new EventListener() {
@Override
public boolean handle(Event event) {
return false;
}
});
支持优先级的事件
EventScheduler.getDefault().addEventListener(Event.obtain(100, EventType.UI), new PriorityEventListener() {
@Override
public int getPriority() {
//定义优先级
return PriorityEventListener.MAX_PRIORITY;
}
@Override
public boolean handle(Event event) {
return false;
}
});
拦截所有事件
EventScheduler.getDefault().setEventInterceptor(new EventInterceptor() {
@Override
public boolean onIntercept(Event event) {
//true:将不在分发这个事件
return false;
}
});
EventType默认共包含以下类似:
public interface EventType {
//如果有此事件发出时,表示有更新UI的需求,所有UI事件都会被提交到主线程的队列中。
EventType UI = new EventType.UIType();
//如果有此事件发出时,表示有业务功能被完成或更新等操作,所有SERVICE事件都被提交到SERVICE线程队列中。
EventType SERVICE = new EventType.ServiceType();
//如果有此事件发出时,表示有相关业务数据发生了变化(CRUD),所有DAT事件都被提交到DATA线程队列中。
EventType DATA = new EventType.DataType();
//如果有此事件发出时,表示系统相关状态发生变化等操作,所有SYSTEM事件都被提交到SYSTEM线程队列中。
EventType SYSTEM = new EventType.SystemType();
}
每个EventType包含一个android.os.Looper,对应一个线程队列。
调度一个UI事件,此事件将被运行在UI线程
Event uievent = Event.obtain(EventType.UI);
uievent.setData("ui事件");
try {
EventScheduler.getDefault().schedul(uievent);
} catch (EventSchedulerException e) {
e.printStackTrace();
}
final EventType CUSTOME = new EventType() {
@Override
public String asType() {
return "custom";
}
};
EventScheduler.getDefault().addEventListener(Event.obtain(100, CUSTOME), new EventListener() {
@Override
public boolean handle(Event event) {
Thread currentThread = Thread.currentThread();
Log.i("MainActivity","" + event.getData().toString() + ",tid = " + currentThread.getId() + " , tname = " + currentThread.getName());
return false;
}
});
Event event = Event.obtain(100, CUSTOME);
event.setData("code为100的custome事件");
try {
EventScheduler.getDefault().schedul(event);
} catch (EventSchedulerException e) {
e.printStackTrace();
}
请参考:
EventScheduler is released under the Apache 2.0 license.
Copyright (C) 2017 DengWei.