最近做一个项目里面要用的socket协议,向服务器发送请求获取返回值,这块要涉及到异步任务处理,一般发送的时候不会只发送一个请求(int cmd),我这块用的是Handler传值的,有一个请求,我就会有一个handler与之对应,所以后来想到了用HashMap<Integer, List<Handler>> msgHandlerMap来处理这些命令和线程。
map里面添加数据:(int cmd, Handler handler)
if(msgHandlerMap.containsKey(cmd)){
List<Handler> list = msgHandlerMap.get(cmd);
if(list == null){
list = new ArrayList<Handler>();
if(!list.contains(handler)){
list.add(handler);
}
}
}else{
List<Handler> lstHandler = new ArrayList<Handler>();
lstHandler.add(handler);
msgHandlerMap.put(command, lstHandler);
}
map里面删除数据:(int cmd, Handler handler)
List<Handler> lstHandler = msgHandlerMap.get(command);
if(lstHandler!=null)
lstHandler.remove(handler);
map遍历通过handler发送消息:
Iterator iterator = msgHandlerMap.keySet().iterator();
while (iterator.hasNext()) {
Integer cmdResponse = (Integer) iterator.next();
List<Handler> lstHandler = msgHandlerMap .get(cmdResponse);
if(cmdResponse==cmd){
for (int i = 0; i < lstHandler.size(); i++) {
Handler handler2Notify = lstHandler.get(i);
if (handler2Notify != null) {
handler2Notify.sendMessage();
lstHandler.remove(handler2Notify);
}