您的位置:首页 > 移动开发 > Android开发

Java Future Pattern和Android AsyncTask

2016-04-22 14:42 295 查看

JDK 5 Future Pattern

使用Future Pattern,应用需要提供自己的
Callable
接口实现, 并且确定使用哪种线程池(由Executors创建)。Future Pattern适用于希望有个任务放在后台执行,前台在需要的时候去查询后台执行情况。也可以利用
FutureTask
done
方法,在任务完成时,获得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
类的主要目的是作为(
Thread
Handler
的)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

http://developer.android.com/reference/android/os/AsyncTask.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: