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; 

    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8069dafedcebd5d1ff0701be93a9612e.html