WEB开发网
开发学院软件开发Java AsyncToken模式,替换通常的Listener模式 阅读

AsyncToken模式,替换通常的Listener模式

 2009-09-21 00:00:00 来源:WEB开发网   
核心提示:对于一个异步的方法调用,我们需要异步的得到调用结果,通常我们会使用Listener模式,用于监听方法异步调用的结果.但应用该方法在实际使用中其实并不灵活.1.因为由于Service的方法很多,可能会导致Listener要监听的事件过多.2.一般Listenner都是事先设置好监听器,不能在方法调用的过程中灵活的增加新的

对于一个异步的方法调用,我们需要异步的得到调用结果,通常我们会使用Listener模式,用于监听方法异步调用的结果.

但应用该方法在实际使用中其实并不灵活.

1.因为由于Service的方法很多,可能会导致Listener要监听的事件过多.

2.一般Listenner都是事先设置好监听器,不能在方法调用的过程中灵活的增加新的监听器

3.对如发送消息失败再次发送消息这种需求处理会比较别扭.

以下为应用AsyncToken的使用示例:

Java代码   

 public void testSendEmail() { 
 final String address = "badqiu(a)gmail.com"; 
 final String subject = "test"; 
 final String content = "async token test"; 
  
 //返回的token,包含token.addResponder()用于监听异步方法的执行结果 
 AsyncToken token = sendAsyncEmail(address,subject,content); 
  
 //token可以继续传递给外部,以便外面感兴趣的listener监听这个异步方法的执行结果 
 token.addResponder(new IResponder() { 
  public void onFault(Exception fault) { 
  System.out.println("email send fail,cause:"+fault); 
  //此处可以直接引用address,subject,content,如,我们可以再次发送一次 
  sendAsyncEmail(address,subject,content); 
  } 
  public void onResult(Object result) { 
  System.out.println("email send success,result:"+result); 
  } 
 }); 
 } 
 
 public AsyncToken sendAsyncEmail(String address,String subject,String content) { 
 final AsyncToken token = new AsyncToken(); 
  
 Thread thread = new Thread(new Runnable() { 
  public void run() { 
  try { 
   //do send email job... 
   token.setComplete(executeResult); //通知Responder token执行完 
  }catch(Exception e) { 
   token.setFault(e); //通知Responder token发生错误 
  } 
  } 
 }); 
 thread.start(); 
  
 return token; 
 }

如上代码,使用AsyncToken的好处:

1. token可以无限传递,只要对方法的执行结果感兴趣,都可以监听方法的执行结果.

2. 拥有上下文,还可以引用前面的参数,以执行任务email重发这种任务

3. 一个token与一个方法对应,方法调用时你即知道token对应的事件,不需要使用listener模式中的一般用EventType来区别不现的事件

3. 灵活转换,也可以将上面的token再转至listener,再由listener以事件的方式派发事件

与Listener的异同:

1.token可以无限传递

2.没有使用事件或是监听不同的方法,listener一般配合需要使用事件,然后由事件进行参数的绑定.

3.listener模式一般是先设置好listener,而AsyncToken可以得到token后再添加监听方法

Tags:AsyncToken 模式 替换

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接