码迷,mamicode.com
首页 > 其他好文 > 详细

ZhihuDialy纯净版-分析MyAsyncTask

时间:2015-05-17 23:30:30      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

1.ThreadFactory接口

此接口用来作为一个工厂来生成线程

 

2.BlockingDeque队列

阻塞队列是一个处理异步问题的队列,满足生产消费的条件特性。LinkedBlockingDeque是一个可以自定义队列大小的阻塞队列数据结构。

 

3.ThreadPoolExecutor

这个是一个继承自AbstractExecutorService的类,顾名思义,这个是一个ExecutorService的子类对象,可以分配线程执行任务。

这个多参数的构造方法是:

new ThreadPoolExecutor(CORE_POOL_SIZE,MAXIMUM_POOL_SIZE,KEEP_ALIVE,
                    TimeUnit.SECONDS,sPoolWorkQueue,sThreadFactory,
                    new ThreadPoolExecutor.DiscardOldestPolicy());

这些参数的意义是:

CORE_POOL,维持的线程池大小,

MAXINUM_POOL,线程池可以同时包含的最大线程数,

KEEP_ALIVE,当有超过线程池大小的线程时,多余的空闲线程等待任务的时间,超时则被中断

TimeUnit.SECONDS,对于KEEP_ALIVE计数变量的单位,这个是以秒为单位

sPoolWorkQueque。用来保存运行完毕的线程的队列

sThreadFactory,用来创建新线程的工厂

new ThreadPoolExecutor.DiscardOldestPolicy(),针对线程池外被创建的线程的操作,这个表明县城会在一段时间之后不再等待任务而被销毁u。

 

4.实现Executor接口

如果实现接口的过程中只实现他的execute方法,那么一旦使用execute方法则只执行他的实现中的方法,

譬如:

 private static final Executor EXECUTOR = new Executor() {
        @Override
        public void execute(Runnable command) {
            command.run();
        }
    };

问题来了,如果不是在内部制定command的run的话,那么Runnable command将不会被执行。

 

5.构造方法建立的对象

mWorker是一个Callable实现下的对象,call返回的是一个后台处理doInBackground根据参数处理任务之后的返回的结果

mFuture是一个FutureTask的对象,可以返回执行之后的结果

 

使用的postResult来post任务,使用内联的Handler来接受消息,根据消息不同选择处理方式。

这里的消息指的是一个是请求结果,另一个是请求更新进度。

 

6.execute(Params。。。)

这个方法默认执行的是executeOnExecutor方法,executeOnExecutor主要处理了异常问题和参数设置。

为WorkerRunnable设置好参数,然后通过Executor的execute执行mFuture这个任务。

 

7.finish方法

这个方法是用来撤销此对象,默认实现cancel是空值。

 

 

 

总结起来,这个MyAsyncTask作为基类实现的操作是根据参数处理任务,根据消息处理结果,更新数据,

 

任务的执行主要通过两个Executor来实现,这两个都是ThreadPoolExcutor的对象,分别维持有一个阻塞的Runnable对象和一个线程工厂,并应用了超限调度。

任务的结果通过Future来获取。

 

由于在不同线程中都要可能发送消息,所以使用一个内部Handler处理类内部的全局消息。

 

ZhihuDialy纯净版-分析MyAsyncTask

标签:

原文地址:http://www.cnblogs.com/lhyz/p/4510718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!