Glide 缓存原理实现

2020-03-24  本文已影响0人  他晓

Glide 缓存原理实现

专注于Android开发,分享经验总结,欢迎加入
QQ群:686809487

Glide使用方式如下:

Glide.with(MainActivity.this)
                    .load(path)
                    .into(iv);

Glide缓存分为:活动缓存、内存缓存、Bitmap复用池、磁盘缓存、加载外置(网络或者SD卡)、绑定生命周期
具体的流程如下

在这里插入图片描述
    // 继承WeakReference(目的:为了监听这个弱引用 是否被回收了)
    public class CustomWeakReference extends WeakReference {
        public String key;

        public CustomWeakReference(Object referent, ReferenceQueue queue, String key) {
            super(referent, queue);
            this.key = key;
        }
    }

     /**
     * 目的:为了监听这个弱引用 是否被回收了
     * queue.remove() 会阻塞线程
     *
     * @return
     */
    public ReferenceQueue<Value> getQueue() {
        if (queue == null) {
            queue = new ReferenceQueue<>();
            // 监听这个弱引用 是否被回收了
            thread = new Thread() {
                @Override
                public void run() {
                    while (!isCloseThread) {
                        if (!isShoudonRemove) {
                            try {
                                // 阻塞式的方法,被动调用queue.remove(),进行回收
                                Reference<? extends Value> remove = queue.remove();
                                CustomWeakReference customWeakReference = (CustomWeakReference) remove;
                                if (map != null && !map.isEmpty()) {
                                    // 移除容器 !isShoudonRemove:为了区分手动移除 和 被动移除
                                    map.remove(customWeakReference.key);
                                }
                                Log.d(TAG, "getQueue remove ");
                            } catch (InterruptedException e) {
                                Log.d(TAG, "getQueue InterruptedException e :" + e.getMessage());
                                e.printStackTrace();
                            }
                        }
                    }
                }
            };
            thread.start();
        }
        return queue;
    }
> 当活动缓存的值不在被使用时,从活动缓存移除,并加入都内存缓存
image

源码查看,关注公众号回复 Glide ,获取

微信公众号 -->> 他晓 (欢迎加入)

上一篇下一篇

猜你喜欢

热点阅读