Java Future Pattern和Android AsyncTask

JDK 5 Future Pattern

使用Future Pattern,应用需要提供自己的Callable接口实现, 并且确定使用哪种线程池(由Executors创建)。Future Pattern适用于希望有个任务放在后台执行,前台在需要的时候去查询后台执行情况。也可以利用FutureTaskdone方法,在任务完成时,获得FutureTask的执行结果并通知应用,Android中的AsyncTask就是用的第二种通知的办法。

Future Patter交互

Created with Raphaël 2.1.0 Future Pattern Application Application Callable Callable FutureTask FutureTask Executors Executors ExecutorService ExecutorService ctor aBackgroundTask ctor(aBackgroundTask) aFutureTask newFixedThreadPool(1) anExecutor anExecutor submit(aFutureTask) doSomething... get() result

Executors线程池

三种基本的线程池可以由Executors类创建(public static ExecutorService newXXX):
- Single Thread Pool: newSingleThreadExecutor()
- Fixed Thread Pool: newFixedThreadPool (int nThreads)
- Cached Thread Pool: newCachedThreadPool()

Andrid AsyncTask

android.os.AsyncTask<Params, Progress, Result>实际上是Future之上的封装。在AsyncTask中的私有静态内部抽象类WorkerRunnable<Params, Result> implements Callable<Result>提供了Callable接口的一个实现。

AsynTask类的主要目的是作为(ThreadHandler的)Helper类在后台执行短暂操作(最多几秒钟),然后更新UI线程。一个异步任务(Asynchronous Task)由后台计算线程运行,执行结果发布到UI线程。

Created with Raphaël 2.1.0 Andorid AsyncTask (Future Pattern) AsyncTask AsyncTask WorkerRunnable WorkerRunnable FutureTask FutureTask Executors Executors ExecutorService ExecutorService ctor mWorker ctor(mWorker) mFuture newFixedThreadPool(1)?? anExecutor anExecutor submit(aFutureTask) ?done get() mFuture.get() Result r postResultIfNotInvoked(r) postResult(r) 发送消息到Android消息队列

Reference

  1. http://developer.android.com/reference/android/os/AsyncTask.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值