XUtils的BitmapUtils实现分析:

来源:互联网 发布:matlab最优化工具箱 编辑:程序博客网 时间:2024/05/17 01:04
调用:BitmapUtils.display(ImageView, url);
public <T extends View> void display(T container, String uri, BitmapDisplayConfig displayConfig, BitmapLoadCallBack<T> callBack) {    if (container == null) {        return;    }    // Optimize Max Size    BitmapSize size = displayConfig.getBitmapMaxSize();    displayConfig.setBitmapMaxSize(BitmapCommonUtils.optimizeMaxSizeByView(container, size.getWidth(), size.getHeight()));    // start loading 这里为空实现    callBack.onPreLoad(container, uri, displayConfig);    // find bitmap from mem cache. 缓存为HashMap<url, Bitmap>缓存图片信息    Bitmap bitmap = globalConfig.getBitmapCache().getBitmapFromMemCache(uri, displayConfig);    if (bitmap != null) {
// 有缓存直接取缓存数据        callBack.onLoadStarted(container, uri, displayConfig);        callBack.onLoadCompleted(                container,                uri,                bitmap,                displayConfig,                BitmapLoadFrom.MEMORY_CACHE);    } else if (!bitmapLoadTaskExist(container, uri, callBack)) {// 没缓冲启动加载Bitmap任务        final BitmapLoadTask<T> loadTask = new BitmapLoadTask<T>(container, uri, displayConfig, callBack);        // get executor        PriorityExecutor executor = globalConfig.getBitmapLoadExecutor();        File diskCacheFile = this.getBitmapFileFromDiskCache(uri);        boolean diskCacheExist = diskCacheFile != null && diskCacheFile.exists();        if (diskCacheExist && executor.isBusy()) {            executor = globalConfig.getDiskCacheExecutor();        }        // set loading image        Drawable loadingDrawable = displayConfig.getLoadingDrawable();        callBack.setDrawable(container, new AsyncDrawable<T>(loadingDrawable, loadTask));        // 线程池中加载任务        loadTask.executeOnExecutor(executor);    }}
总结:BitmapUtils加载数据核心采用一级缓存,如果内存中有数据则直接从内存中取出图片,否则网络加载
1 0
原创粉丝点击