干货!听说过图片四级缓存框架吗?

日期:2018-05-10    阅读:417

开发App一定涉及到图片加载、图片处理,那就必须会用到三方的图片框架,要么选择自己封装。至于主流的三方图片框架,就不得不说老牌的ImageLoader、如今更流行的Glide、Picasso和Fresco。但三方的框架本文不会过多介绍。


Glide等框架,毕竟是大神及团队花费很大精力开发和维护的开源框架,他们的设计思路、性能优化、代码规范等等很值得我们学习,之前一段时间也研究过Glide的源码(不得不由衷佩服)。


今天,将自己对于图片加载的思路想法,也借鉴了开源框架的一些好的点,封装了一个图片加载框架——JsLoader。

至于图片的网络请求,我这里还是使用Android原生提供的HttpUrlConnection;请求网络图片时,开启子线程进行操作,使用线程池对线程进行统一管理;线程间通信还是用了Handler;提到图片加载,大家肯定会立刻想到图片的三级缓存(内存—外存—网络),但我这里提供一个新的思路——四级缓存,与三级缓存不同的是内存又分为了两级,这些稍后会详细介绍到。


本文目的在于和大家分享一个图片框架的封装思路,至于代码的优化,如使用OkHttp替换HttpUrlConnection,使用RxJava替换Handler等,或者有别的不足的地方,也希望大家能够反馈给我,我们一起进步。

public class MyThreadFactory {
   //Android的线程池类
   private static ThreadPoolExecutor threadPoolExecutor=null;
   //获取当前用户的手机的CPU的核心数
   private static int num= Runtime.getRuntime().availableProcessors();
   //用于存储提交任务的任务队列
   private static BlockingDeque<Runnable> workQueue=new LinkedBlockingDeque<>(num*50);
   private MyThreadFactory(){
   }
   public static ThreadPoolExecutor getThreadPoolExecutor(){
       if(null==threadPoolExecutor){
           threadPoolExecutor=new ThreadPoolExecutor(num*2, num*4, 8, TimeUnit.SECONDS, workQueue, new ThreadPoolExecutor.CallerRunsPolicy());
//            threadPoolExecutor=new ThreadPoolExecutor(1, 1, 8, TimeUnit.SECONDS, workQueue, new ThreadPoolExecutor.CallerRunsPolicy());
       }
       return threadPoolExecutor;
   }
}


当前类是一个线程池的管理类。由于当前的线程池,在整个项目中不需要创建多个对象,直接使用单例模式进行创建。
补充:Android中的线程池
在Android中使用线程池的类是:ThreadPoolExecutor;
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(int corePoolSize, int maxinumPoolSize, long keepAliveTime, TimeUnit unit, BlockingDeque<Runnable> workQueue, ThreadFactory threadFactory);


参数:
int corePoolSize  : 线程池中的核心线程数
int maxinumPoolSize :线程池中允许的最大线程数目
long keepAliveTime :非核心线程的超时时间,超出这个时间非核心线程会被回收
TimeUnit unit     :非核心线程的超时时间的时间单位
workQueue  : 保存需要线程池执行的任务的列表
ThreadFactory threadFactory  : 线程工厂,只是一个接口,只有一个方法Thread newThread(Runnable r)


在上文展示的类中,我们获取了手机的CPU核心数num,本线程池的核心线程数为CPU数的2倍,最大线程数为CPU核心数的4倍。

Copyright © 2015 宿迁灵感软件有限公司  | 保留公司所有权利 | 苏ICP备13038063

新闻动态  |  网站建设  |  网站优化  |  网站案例  |  联系我们  |     |  返回首页  |