使用
1.
流程
注册作为监听者:A>B#registerFor***
通知监听者:B#notify*** > A#ourHandler
2.
注册监听类
CLASS A{
private final int EVENT_**** = 4
Handler ourHandler = new OurHandler
Class OurHandler extends Handler{}
B.registerFor***(ourHandler,EVENT_****,null);
}
消息维护通知类
CLASS B{
//RegistrantList、RegistrantList 代码细节如下
protected RegistrantList ourRegistrants = new RegistrantList();
function registerFor***(Handler h, int what, Object obj){
Registrant r = new Registrant (h, what, obj);
ourRegistrants.add(r);
}
function notify***(){
ourRegistrants.notifyRegistrants()
}
}
//代码细节
CLASS RegistrantList{
//通知事件,无传参调用
public void notifyRegistrants()
{
internalNotifyRegistrants(null, null);
}
//通知事件,有传参调用
public void notifyRegistrants(AsyncResult ar)
{
internalNotifyRegistrants(ar.result, ar.exception);
}
//同步锁
private synchronized void internalNotifyRegistrants (Object result, Throwable exception)
{
for (int i = 0, s = registrants.size(); i < s ; i++) {
Registrant r = (Registrant) registrants.get(i);
r.internalNotifyRegistrant(result, exception);
}
}
}
CLASS Registrant{
public Registrant(Handler h, int what, Object obj)
{
refH = new WeakReference(h);
this.what = what;
userObj = obj;
}
public void notifyRegistrant(AsyncResult ar)
{
internalNotifyRegistrant (ar.result, ar.exception);
}
void internalNotifyRegistrant (Object result, Throwable exception)
{
Handler h = getHandler();
if (h == null) {
clear();
} else {
Message msg = Message.obtain();
msg.what = what;
msg.obj = new AsyncResult(userObj, result, exception);
h.sendMessage(msg);
}
}
}
1.
流程
注册作为监听者:A>B#registerFor***
通知监听者:B#notify*** > A#ourHandler
2.
注册监听类
CLASS A{
private final int EVENT_**** = 4
Handler ourHandler = new OurHandler
Class OurHandler extends Handler{}
B.registerFor***(ourHandler,EVENT_****,null);
}
消息维护通知类
CLASS B{
//RegistrantList、RegistrantList 代码细节如下
protected RegistrantList ourRegistrants = new RegistrantList();
function registerFor***(Handler h, int what, Object obj){
Registrant r = new Registrant (h, what, obj);
ourRegistrants.add(r);
}
function notify***(){
ourRegistrants.notifyRegistrants()
}
}
//代码细节
CLASS RegistrantList{
//通知事件,无传参调用
public void notifyRegistrants()
{
internalNotifyRegistrants(null, null);
}
//通知事件,有传参调用
public void notifyRegistrants(AsyncResult ar)
{
internalNotifyRegistrants(ar.result, ar.exception);
}
//同步锁
private synchronized void internalNotifyRegistrants (Object result, Throwable exception)
{
for (int i = 0, s = registrants.size(); i < s ; i++) {
Registrant r = (Registrant) registrants.get(i);
r.internalNotifyRegistrant(result, exception);
}
}
}
CLASS Registrant{
public Registrant(Handler h, int what, Object obj)
{
refH = new WeakReference(h);
this.what = what;
userObj = obj;
}
public void notifyRegistrant(AsyncResult ar)
{
internalNotifyRegistrant (ar.result, ar.exception);
}
void internalNotifyRegistrant (Object result, Throwable exception)
{
Handler h = getHandler();
if (h == null) {
clear();
} else {
Message msg = Message.obtain();
msg.what = what;
msg.obj = new AsyncResult(userObj, result, exception);
h.sendMessage(msg);
}
}
}