设为首页 加入收藏

TOP

Android中的消息注册Registrant机制
2014-11-24 12:35:34 来源: 作者: 【 】 浏览:0
Tags:Android 消息 注册 Registrant 机制

消息注册机制更加丰富了MessageHandle的流程,它把过程严格阶段化了,分成消息注册和通知消息处理两个部分,让人一目了然。


消息注册机制的总体思想是:一个对象中开辟一个空间用于存放Message,当调用regist方法时将Message存放进去,当其调用notify方法时将所有Message取出并发送到MessageQueue中等待处理。


下面是模拟程序,提供Registrant,RegistrantList,AsyncResult,MiddleUser类


package com.zte.liu.registermessage;


public class AsyncResult {


MessageParmeters parmList;
Object result;
Throwable exception;

public Throwable getException() {
return exception;
}


public void setException(Throwable exception) {
this.exception = exception;
}


AsyncResult(Object result, Throwable exception){
parmList = new MessageParmeters();
this.result = result;
this.exception = exception;
}

public MessageParmeters getMessageParms(){
return parmList;
}

public Object getResult(){
return result;
}

public void setResult(Object result){
this.result = result;
}

public AsyncResult refresh(Object parm){
parmList.refresh(parm);
return this;
}
}





package com.zte.liu.registermessage;


import com.zte.liu.messagehandler.Handler;


public class MiddleUser {


RegistrantList registrantList = new RegistrantList();

public void registForReason(Handler handler, int what, Object firstParms){
registrantList.add(handler, what, firstParms);
}

public void notifyRegistrant(Object secondParms, Throwable exception){
registrantList.notifyRegistrantList(secondParms, exception);
}

public void unRegistForReason(int what){
registrantList.remove(what);
}
}





package com.zte.liu.registermessage;


import com.zte.liu.messagehandler.Handler;
import com.zte.liu.messagehandler.Message;


public class Registrant {


private Message msg = null;

Registrant(Handler handler, int what, Object firstParms){
msg = new Message(what, handler, new AsyncResult(null, null).refresh(firstParms));
}

public void notifyRegistrant(Object secondParms, Throwable exception){
if(msg == null){
return;
}
AsyncResult asyncResult = (AsyncResult)msg.getObj();
asyncResult.refresh(secondParms).setException(exception);
msg.sendToTarget();
}

public Message getMessage(){
return msg;
}
}






package com.zte.liu.registermessage;


import java.util.ArrayList;


import com.zte.liu.messagehandler.Handler;


public class RegistrantList {

private ArrayList registrantList = new ArrayList();

public synchronized void add(Handler handler, int what, Object firstParms){
Registrant registrant = new Registrant(handler, what, firstParms);
registrantList.add(registrant);
}

public synchronized void remove(int what){
for(int i=0; i if(((Registrant)registrantList.get(i)).getMessage().getId() == what){
registrantList.remove(i);
}
}
}

public synchronized void notifyRegistrantList(Object secondParms, Throwable exception){
for(int i=0; i Registrant registrant = (Registrant)registrantList.get(i);
registrant.notifyRegistrant(secondParms, exception);
}
}


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android手机归属地查询工具 下一篇Android 上移植 Ghostscript 9.04..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)