Android图片缓存框架 - Fresco设置和清除缓存(十一)

目录

 

1.Fresco 简介

2. Fresco 文档

3. Fresco开发步骤

4. Fresco加载图片6种方式

5. Drawees xm属性设置

6 Fresco实现圆角或圆形图片

7. DraweeHierarchy设置

8. Fresco的DraweeController

9. ControllerListener 图片加载监听

10. Fresco的ImageRequest

11 Fresco的显示GIF

12 Fresco的BasePostprocessor图片处理

12.1 BasePostprocessor图片处理

12.2 图片添加红色网格

12.3 图片水平翻转

12.4 裁剪1/4图片

13.Fresco设置和清除缓存

13.1 查找Uri的Bitmap是否缓存

13.2 查询内存缓存的操作是同步

13.3 设置磁盘内存

13.4 设置Bitmap缓存

13.5  判断内存大时,清空内存

13.6 清理内存、磁盘缓存

 13.7 根据Uri删除缓存

 13.8 设置日志


13.Fresco设置和清除缓存

13.1 查找Uri的Bitmap是否缓存

ImagePipeline imagePipeline = Fresco.getImagePipeline();
Uri uri;
boolean inMemoryCache = imagePipeline.isInBitmapMemoryCache(uri);

13.2 查询内存缓存的操作是同步

查询内存缓存的操作是同步的, 不过查询缓存的操作是异步的。因为这个操作可以使用另一个线程操作。你可以这样使用:

DataSource inDiskCacheSource = imagePipeline.isInDiskCache(uri);
DataSubscriber subscriber = new BaseDataSubscriber() {
    @Override
    protected void onNewResultImpl(DataSource dataSource) {
      if (!dataSource.isFinished()) {
        return;
      }
      boolean isInCache = dataSource.getResult();
      // your code here
    }
  };
inDiskCacheSource.subscribe(subscriber, executor);

13.3 设置磁盘内存

     ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context);
     DiskCacheConfig config = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(saveFilePath)
                .setBaseDirectoryName(saveName).setMaxCacheSize(MAX_DISK_CACHE_SIZE).build();
     builder.setMainDiskCacheConfig(config);

13.4 设置Bitmap缓存

        ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context);
        Supplier supplier = new Supplier() {
            @Override
            public MemoryCacheParams get() {
                //获取手机最大内存
                int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory();
                //设置为手机内存的 1/5
                int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 5;
                MemoryCacheParams bitmapParams = new MemoryCacheParams(
                        //可用最大内存数
                        MAX_MEMORY_CACHE_SIZE,
                        //内存允许的最多图片数量
                        Integer.MAX_VALUE,
                        //内存中准备清理图片最大内存
                        MAX_MEMORY_CACHE_SIZE,
                        //内存中准备清理图片最大数量
                        Integer.MAX_VALUE,
                        //内存中单张图片的最大大小
                        Integer.MAX_VALUE);
                return bitmapParams;
            }
        };
        builder.setBitmapMemoryCacheParamsSupplier(supplier);

13.5  判断内存大时,清空内存

  private void registerMemoryTrimmable(ImagePipelineConfig.Builder builder) {
        MemoryTrimmableRegistry registry = NoOpMemoryTrimmableRegistry.getInstance();
        registry.registerMemoryTrimmable(new MemoryTrimmable() {
            @Override
            public void trim(MemoryTrimType trimType) {
                final double suggestedTrimRatio = trimType.getSuggestedTrimRatio();

                if (MemoryTrimType.OnCloseToDalvikHeapLimit.getSuggestedTrimRatio() == suggestedTrimRatio
                        || MemoryTrimType.OnSystemLowMemoryWhileAppInBackground.getSuggestedTrimRatio() == suggestedTrimRatio
                        || MemoryTrimType.OnSystemLowMemoryWhileAppInForeground.getSuggestedTrimRatio() == suggestedTrimRatio) {
                    //清空内存缓存
                    //  ImagePipelineFactory.getInstance().getImagePipeline().clearMemoryCaches();
                    clearMemory();
                }
            }
        });
        builder.setMemoryTrimmableRegistry(registry);
    }

13.6 清理内存、磁盘缓存

       ImagePipeline imagePipeline = ImagePipelineFactory.getInstance().getImagePipeline();
        //清空内存缓存(包括Bitmap缓存和未解码图片的缓存)
        imagePipeline.clearMemoryCaches();
        //清空硬盘缓存,一般在设置界面供用户手动清理
        imagePipeline.clearDiskCaches();
        //同时清理内存缓存和硬盘缓存
        imagePipeline.clearCaches();

 13.7 根据Uri删除缓存

ImagePipeline现有函数可以根据Uri删除缓存

ImagePipeline imagePipeline = Fresco.getImagePipeline();
Uri uri;
imagePipeline.evictFromMemoryCache(uri);
imagePipeline.evictFromDiskCache(uri);

// combines above two lines
imagePipeline.evictFromCache(uri);

13.8 设置日志

Set requestListeners = new HashSet<>();
requestListeners.add(new RequestLoggingListener());
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
   // other setters
   .setRequestListeners(requestListeners)
   .build();
Fresco.initialize(context, config);
FLog.setMinimumLoggingLevel(FLog.VERBOSE);

 

你可能感兴趣的:(Android图片缓存框架,Fresco,Android开发)