Glide核心总结

411 阅读1分钟

图片加载框架应该关注哪些方面

  • 线程池
  • 线程切换
  • 缓存

线程池

线程池一般有三级,内存,磁盘,网络 由于网络会阻塞,所以网络单独一个线程池,内存和磁盘一个线程池

public final class GlideBuilder {
 	...
	private GlideExecutor sourceExecutor;//加载源文件的线程池,包括网络加载
	private GlideExecutor diskCacheExecutor;//加载硬盘缓存的线程池
	private GlideExecutor animationExecutor;//加载动画的线程池
    ...
}

线程切换

无论是Eventbus,RxJava,只要涉及到子线程切换到Android主线程,都使用的handler

com/bumptech/glide/util/Executors.java

  private static final Executor MAIN_THREAD_EXECUTOR =
      new Executor() {
        @Override
        public void execute(@NonNull Runnable command) {
          Util.postOnUiThread(command);
        }
      };

缓存

线程池一般有三级,内存,磁盘,网络

内存缓存

使用最近最少缓存算法,内部使用LinkedHashMap,是一个双向链表结构,内部可以保证新添加的放到header

磁盘缓存

通过DiskLruCache,内部同样使用的是

private final LinkedHashMap<String, Entry> lruEntries =
      new LinkedHashMap<String, Entry>(0, 0.75f, true);