Java Future Pattern和Android AsyncTask

来源:互联网 发布:smart 改装轮毂数据 编辑:程序博客网 时间:2024/04/19 22:16

JDK 5 Future Pattern

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

Future Patter交互

Created with Raphaël 2.1.0Future PatternApplicationApplicationCallableCallableFutureTaskFutureTaskExecutorsExecutorsExecutorServiceExecutorServicectoraBackgroundTaskctor(aBackgroundTask)aFutureTasknewFixedThreadPool(1)anExecutoranExecutorsubmit(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.0Andorid AsyncTask (Future Pattern)AsyncTaskAsyncTaskWorkerRunnableWorkerRunnableFutureTaskFutureTaskExecutorsExecutorsExecutorServiceExecutorServicectormWorkerctor(mWorker)mFuturenewFixedThreadPool(1)??anExecutoranExecutorsubmit(aFutureTask)?doneget()mFuture.get()Result rpostResultIfNotInvoked(r)postResult(r)发送消息到Android消息队列

Reference

  1. http://developer.android.com/reference/android/os/AsyncTask.html
0 0
原创粉丝点击