AsyncToken机制替换通用的Listener机制
AsyncToken机制替换通用的Listener机制
对于一个异步的方法调用,我们需要异步的得到调用结果,通常我们会使用Listener模式,用于监听方法异步调用的结果.
但应用该方法在实际使用中其实并不灵活.
1.因为由于Service的方法很多,可能会导致Listener要监听的事件过多.
2.一般Listenner都是事先设置好监听器,不能在方法调用的过程中灵活的增加新的监听器
3.对如发送消息失败再次发送消息这种需求处理会比较别扭.
以下为应用AsyncToken的使用示例:
- 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;
- }
|
评论暂时关闭