三级缓存之AsyncTask学习
来源:互联网 发布:仿淘宝手机网站模板 编辑:程序博客网 时间:2024/06/05 23:59
在做三级缓存的时候,显示图片的实现,都会post一个runnable,如果数据较多的情况下,会开销大量的线程,这样就会造成加载的卡断;
所以需要对线程的优化,在Android上面对线程池有一个轻量级的封装——AsyncTask;
AsyncTask的源码其实也就是对java线程池ThreadPoolExecutor 的一个封装
学习理解一下ThreadPoolExecutor 的使用
//ThreadPoolExecutor executor = new ThreadPoolExecutor(
//corePoolSize, 核心线程数量 -- 正式员工
//maximumPoolSize,最大 线程数量 -- 最大 - 正式 = 临时工
//keepAliveTime, unit, 如果临时工空闲了,过多久开除
//workQueue 等待被执行的任务
//);
ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 5, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3));
简单看一下AsynTask的源码如下
177
public abstract class AsyncTask<Params, Progress, Result> {
178
private static final String LOG_TAG = "AsyncTask";
179
180
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
181
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
182
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
183
private static final int KEEP_ALIVE = 1;
184
185
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
186
private final AtomicInteger mCount = new AtomicInteger(1);
187
188
public Thread newThread(Runnable r) {
189
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
190
}
191
};
192
193
private static final BlockingQueue<Runnable> sPoolWorkQueue =
194
new LinkedBlockingQueue<Runnable>(128);
也就是说,AsynTask好用是好用,但是,一旦线程太多,就会挂掉;
简单分析一下AsynTask的优缺点
* AsyncTask的优缺点:
* 优点
* 安卓中 主线程不能进行耗时操作,子线程不能更改ui, 系统提供了此框架,可以简单快速的实现异步操作 使用方便
*
* 缺点
* 1 如果任务过多 会挂掉 128 + 核心数 *2 +1
* 2 旧版 <API19的最大线程数量 128,cpu资源会过多的消耗在线程切换上
* 3 优先任务不能得到优先执行,会排队
针对这个缺点的解决办法
602
603
public static void execute(Runnable runnable) {
604
sDefaultExecutor.execute(runnable);
605
}
源码中是使用的默认的执行器,那么解决的办法就是单独去指定执行器不使用默认的
使用executeOnExecutor 单独指定执行器,不使用默认的执行器
- 三级缓存之AsyncTask学习
- 三级缓存之LruCache 学习
- Android图片的三级缓存和AsyncTask的使用的研究学习
- android基础学习之android图片的三级缓存
- android学习之20160309图片的三级缓存
- 图片加载之三级缓存机制、AsyncTask优化、ComViewHolder极致优化ListView、LruCache搭配Runtime完美内存优化
- Android三级缓存的基础框架学习
- CPU之CPU一级\二级\三级缓存
- Android性能优化之三级缓存
- <Android>之三级缓存(及封装方法)
- 三级缓存之弱引用概念
- Android学习之 AsyncTask
- Android学习之 AsyncTask
- Android 之AsyncTask 学习
- Android之AsyncTask学习
- Android之AsyncTask学习
- 三级缓存
- 三级缓存
- wm_concat
- js数组对象排序
- Canvas 简介及适配
- wget命令部分参数使用一般方法
- Chrome浏览器的黑屏如何解决
- 三级缓存之AsyncTask学习
- 旅游市场调查:亚太地区游客需求调查报告
- 腾讯手游如何提早揭露游戏外挂风险?
- Linux Centos 7安装在VirtualBox虚拟机上的网络配置
- sql注入逻辑分析
- ConfigurablePropertyResolver
- UUID生成工具
- 解决ios音乐不自动播放的问题
- TMA3.0.2.5铁塔制造助手+屏幕录像专家