歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> AsyncToken機制替換通用的Listener機制

AsyncToken機制替換通用的Listener機制

日期:2017/3/1 10:08:40   编辑:Linux編程

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