android AsyncTask封装学习

概述

基本的使用就不说了,网上也有大量的介绍,主要简单介绍内部结构,流程。

带泛型参数的抽象类

串行执行:默认是串行。
并行执行:直接调用

executeOnExecutor(Executor exec, Params.. params)
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params)

直接使用其内部的线层池。如下为其封装的线层池。最大缓存队列为128个,超出会导致FC。
封装的线程池:

//根据cpu的大小来配置核心的线程
private static final int CPU_COUNT=Runtime.getRuntime().availableProcessors(); 
//内核线程数量
private static final int CORE_POOL_SIZE=CPU_COUNT+1;
//线程池中允许的最大线程数目
private static final int MAXIMUM_POOL_SIZE=CPU_COUNT*2+1;
//空闲线程的超时时间
private static final int KEEP_ALIVE=1;
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
    }
};

private static final BlockingQueue<Runnable> sPoolWorkQueue =new LinkedBlockingQueue<Runnable>(128);

/**
 * An {@link Executor} that can be used to execute tasks in parallel.
 */
public static final Executor THREAD_POOL_EXECUTOR= 
new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

关键字

看完内部源码,认识很多线程操作的关键字。
AtomicInteger 线程安全的加减操作接口
AtomicBoolean 线程安全的boolean操作接口
Executor 工厂类,专门创建各种线程池(例如子类:ExecutorService )
FutureTask 获取线程状态的接口
Callable,synchronized,volatile,ThreadPoolExecutor,Handler,泛型,枚举等等。

流程图

图片引自github的一篇大神的MD
这里写图片描述
参考链接:
AsyncTask源码解析
haha,MarkDown写博客好舒服。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值