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后再添加监听方法

时间: 2024-11-03 03:58:23

AsyncToken模式,替换通常的Listener模式的相关文章

Java模式开发之责任链模式

从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正.开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒. 假比说,贾母.贾赦.贾政.贾宝玉和贾环是五个参加击鼓传花游戏的传花者,他们组成一个环链.击鼓者将花传给贾母,开始传花游戏.花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又由贾宝玉传给贾环,由贾环传回给贾母,如此往复(见下图).当鼓声停止时,手中有花的人就得执行酒令. 开发之责任链

创建型模式--抽象工厂模式

工厂三兄弟之抽象工厂模式(一) 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中 存在大量的工厂类,势必会增加系统的开销.此时,我们可以考虑将一些相关的产品组成一个"产品族",由同一个工厂来统一生产,这就是我们本文将要学习的抽 象工厂模式的基本思想. 界面皮肤库的初始设计 Sunny 软件公司欲开发一套界面皮肤库,可以对 Java 桌面软件进行界面美化.为了保护版权,该皮肤库源代码不打算公开,而只

创建型模式中关于工厂的模式

   在创建型模式中,有3中关于工厂的模式,分别是:简单工厂模式,工厂方法模式,抽象工厂模式.这3中模式既有各自的优点,同时,这3中模式又可以逐步演化:如,简单工厂可以演化成工厂方法,工厂方法可以演化成抽象工厂.   简单工厂到工厂方法      由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中:它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了.     另外,当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同

解决编译内核模块helloworld.c:1: 错误:代码模式‘kernel’在 32 位模式下不受支持问题,未编译对64位的支持

Makefile内容: KERNELDIR ?=/root/Desktop/work/TI/linux-3.2.0 PWD := $(shell pwd) obj-m += helloworld.o default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: @rm -f *.o *.ord* *.sy* *.mod.* *.ko clean标记中的@表示,执行命令的时候,终端上面不打印rm -r xxx.xx make出错信息: [root

安卓百度地图导航的模式怎么设置?夜间模式还有白天模式 求代码

问题描述 安卓百度地图导航的模式怎么设置?夜间模式还有白天模式 求代码 安卓百度地图导航的模式怎么设置?夜间模式还有白天模式 求代码? 解决方案 UiModeManager设置夜间模式和行车模式

app-启动APP的时候想出现一个双选按钮,左边是A模式,右边是B模式,怎么弄

问题描述 启动APP的时候想出现一个双选按钮,左边是A模式,右边是B模式,怎么弄 1.手机上的APP都是中文名称,比如蹲蹲乐,是不是用android studio新建project的时候也要用中文名称,比如蹲蹲乐,2.启动APP的时候想出现一个双选按钮,左边是A模式,右边是B模式,怎么弄? 谢谢指点 解决方案 直接用ImageButton就可以了. 解决方案二: http://blog.sina.com.cn/s/blog_70677d110100qzhl.html 解决方案三: http://

ART模式是什么意思?ART模式怎么开?

ART模式是什么意思 安卓4.4新出的模式,ART模式英文全称为:Android runtime,谷歌Android 4.4系统新增的一种应用运行模式,优点是软件的运行和启动速度变快,软件后台占用内存变小.缺点是与其不兼容的软件太多.对于普通用户的话推荐使用D模式,简单的来介绍模式可以省内存的.但有的时候不太稳定. ART模式与Dalvik模式最大的不同在于,在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都

商业模式新生代之免费商业模式

   这次商业模式学习比较简单,可能于实际市场还有脱节,有些例子也不是很新.    但是商业模式贵在活学活用,这次下定决心今年利用周末时间,要把<商业模式新生代>全部看完.(宏.微观经济学还是靠后吧)    非科班出生,只能做做笔记,写写心得,希望以后每看到一个商业现象,就能想到是哪中商业模式大类.    这本书主要涵盖: .非绑定式商业模式 .长尾式商业模式 .多边平台式商业模式 .免费商业模式 .开放式商业模式     另外,还有设计.战略.流程....     呵呵,比较假大空,即使学会

三星S6如何下载更多拍照模式?S6下载更多拍照模式教程(G9200)

若想在照相机中下载更多拍照模式,请按以下步骤操作:  1.在待机页面下,点击[照相机].    2.点击[模式].    3.点击[下载].    4.选择想要下载照相机模式的类型,这里以[最新]为例.    5.选择想要下载照相机模式,这里以[Rear-cam selfie](后置照相机自拍)为例.    6.点击[安装].    7.阅读"应用程序许可"的提示后,点击[接受并下载].    8.正在下载并安装...    9.下载安装完成后,点击[返回]键至照相机界面.    10