AsyncToken模式,替换凡是的Listener模式
对付一个异步的要领挪用,我们需要异步的获得挪用功效,凡是我们会利用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后再添加监听要领