面试

Android源码分析计划

2018-03-11  本文已影响5人  吕志豪

1. okhttp3 源码分析

public synchronized ExecutorService executorService() {
 if (executorService == null) {
   executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
       new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false));
 }
 return executorService;
}

2. retrofit

3. Glide

只从缓存中读取,如果缓存没有,则失败.
private void retrieveFromCache(){
    GlideApp.with(this)
            .asBitmap()
            .load(URL)
            .placeholder(R.drawable.default_avatar)
            .error(R.drawable.image_error)
            .fallback(R.drawable.fallback_nodata)
            .onlyRetrieveFromCache(true)
            .into(mImageView);
}
跳过缓存. 每次都从服务端获取最新.
/**
 * 跳过缓存. 每次都从服务端获取最新.
 * diskCacheStrategy: 磁盘缓存
 * skipMemoryCache:内存缓存
 */
private void skipCache(){
    GlideApp.with(this)
            .asBitmap()
            .load(URL)
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .skipMemoryCache(true)
            .into(mImageView);
}

Glide 需要缓存的 图片资源 分为两类:
原始图片(Source) :即图片源的图片初始大小 & 分辨率
转换后的图片(Result) :经过 尺寸缩放 和 大小压缩等处理后的图片

内存缓存:防止应用 重复将图片数据 读取到内存当中
// 默认开启内存缓存,用户不需要作任何设置
Glide.with(this)
     .load(url)
     .into(imageView);

// 可通过 API 禁用 内存缓存功能
Glide.with(this)
     .load(url)
     .skipMemoryCache(true) // 禁用 内存缓存
     .into(imageView);

Glide的内存缓存实现是基于:LruCache 算法(Least Recently Used) & 弱引用机制
LruCache算法原理:将 最近使用的对象 用强引用的方式 存储在LinkedHashMap中 ;当缓存满时 ,将最近最少使用的对象从内存中移除
弱引用:弱引用的对象具备更短生命周期,因为 **当JVM进行垃圾回收时,一旦发现弱引用对象,都会进行回收(无论内存充足否)

硬盘缓存:防止应用 重复从网络或其他地方重复下载和读取数据
with()

得到一个RequestManager对象
根据传入with()方法的参数 将Glide图片加载的生命周期与Activity/Fragment的生命周期进行绑定,从而实现自动执行请求,暂停操作

load()

预先创建好对图片进行一系列操作(加载、编解码、转码)的对象,并全部封装到 DrawableTypeRequest `对象中。

into()

即获取图片资源 & 加载图片并显示

上一篇 下一篇

猜你喜欢

热点阅读