歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

AsyncToken機制替換通用的Listener機制

對於一個異步的方法調用,我們需要異步的得到調用結果,通常我們會使用Listener模式,用於監聽方法異步調用的結果.

但應用該方法在實際使用中其實並不靈活.

1.因為由於Service的方法很多,可能會導致Listener要監聽的事件過多.

2.一般Listenner都是事先設置好監聽器,不能在方法調用的過程中靈活的增加新的監聽器

3.對如發送消息失敗再次發送消息這種需求處理會比較別扭.

以下為應用AsyncToken的使用示例:

  1.   public void testSendEmail() { 
  2.         final String address = "badqiu(a)gmail.com"; 
  3.         final String subject = "test"; 
  4.         final String content = "async token test"; 
  5.          
  6.         //返回的token,包含token.addResponder()用於監聽異步方法的執行結果  
  7.         AsyncToken token = sendAsyncEmail(address,subject,content); 
  8.          
  9.         //token可以繼續傳遞給外部,以便外面感興趣的listener監聽這個異步方法的執行結果  
  10.         token.addResponder(new IResponder() { 
  11.             public void onFault(Exception fault) { 
  12.                 System.out.println("email send fail,cause:"+fault); 
  13.                 //此處可以直接引用address,subject,content,如,我們可以再次發送一次  
  14.                 sendAsyncEmail(address,subject,content); 
  15.             } 
  16.             public void onResult(Object result) { 
  17.                 System.out.println("email send success,result:"+result); 
  18.             } 
  19.         }); 
  20.     } 
  21.      
  22.     public AsyncToken sendAsyncEmail(String address,String subject,String content) { 
  23.         final AsyncToken token = new AsyncToken(); 
  24.          
  25.         Thread thread = new Thread(new Runnable() { 
  26.             public void run() { 
  27.                 try { 
  28.                     //do send email job...  
  29.                     token.setComplete(executeResult); //通知Responder token執行完  
  30.                 }catch(Exception e) { 
  31.                     token.setFault(e); //通知Responder token發生錯誤  
  32.                 } 
  33.             } 
  34.         }); 
  35.         thread.start(); 
  36.          
  37.         return token; 
  38.     }
Copyright © Linux教程網 All Rights Reserved