图片加载框架应该关注哪些方面
- 线程池
- 线程切换
- 缓存
线程池
线程池一般有三级,内存,磁盘,网络 由于网络会阻塞,所以网络单独一个线程池,内存和磁盘一个线程池
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);