Search in sources :

Example 1 with MemoryCacheParams

use of com.facebook.imagepipeline.cache.MemoryCacheParams in project DevRing by LJYcoder.

the class FrescoManager method init.

@Override
public void init(Context context, final ImageConfig imageConfig) {
    mContext = context;
    mImageConfig = imageConfig;
    // 配置管理者
    ImagePipelineConfig.Builder imagePipelineConfigBuilder = ImagePipelineConfig.newBuilder(context);
    // 配置内存缓存(已解码部分的缓存)
    if (imageConfig.getMemoryCacheSize() > 0) {
        imagePipelineConfigBuilder.setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {

            public MemoryCacheParams get() {
                MemoryCacheParams bitmapCacheParams = new // 
                MemoryCacheParams(// 可用最大内存数,以字节为单位
                imageConfig.getMemoryCacheSize(), // 内存中允许的最多图片数量
                Integer.MAX_VALUE, // 内存中准备清理但是尚未删除的总图片所可用的最大内存数,以字节为单位
                imageConfig.getMemoryCacheSize(), // 内存中准备清除的图片最大数量
                Integer.MAX_VALUE, // 内存中单图片的最大大小
                Integer.MAX_VALUE);
                return bitmapCacheParams;
            }
        });
    }
    // 配置磁盘缓存
    if (imageConfig.getDiskCacheFile() != null) {
        DiskCacheConfig.Builder diakBuilder = DiskCacheConfig.newBuilder(context);
        // 磁盘缓存目录路径
        diakBuilder.setBaseDirectoryPath(imageConfig.getDiskCacheFile().getParentFile());
        // 磁盘缓存目录名
        diakBuilder.setBaseDirectoryName(imageConfig.getDiskCacheFile().getName());
        // 磁盘缓存大小
        if (imageConfig.getDiskCacheSize() > 0)
            diakBuilder.setMaxCacheSize(imageConfig.getDiskCacheSize());
        imagePipelineConfigBuilder.setMainDiskCacheConfig(diakBuilder.build());
    } else if (imageConfig.isDiskCacheExternal()) {
        DiskCacheConfig.Builder diakBuilder = DiskCacheConfig.newBuilder(context);
        // 磁盘缓存目录路径
        diakBuilder.setBaseDirectoryPath(context.getExternalCacheDir());
        // 磁盘缓存目录名
        diakBuilder.setBaseDirectoryName("fresco_image_cache");
        // 磁盘缓存大小
        if (imageConfig.getDiskCacheSize() > 0)
            diakBuilder.setMaxCacheSize(imageConfig.getDiskCacheSize());
        imagePipelineConfigBuilder.setMainDiskCacheConfig(diakBuilder.build());
    }
    if (imageConfig.isUseOkhttp())
        imagePipelineConfigBuilder.setNetworkFetcher(new OkHttpNetworkFetcher(DevRing.ringComponent().okHttpClient()));
    // 当内存紧张时采取的措施
    MemoryTrimmableRegistry memoryTrimmableRegistry = NoOpMemoryTrimmableRegistry.getInstance();
    memoryTrimmableRegistry.registerMemoryTrimmable(new MemoryTrimmable() {

        @Override
        public void trim(MemoryTrimType trimType) {
            final double suggestedTrimRatio = trimType.getSuggestedTrimRatio();
            RingLog.e(String.format("onCreate suggestedTrimRatio : %f", suggestedTrimRatio));
            if (MemoryTrimType.OnCloseToDalvikHeapLimit.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInBackground.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInForeground.getSuggestedTrimRatio() == suggestedTrimRatio) {
                ImagePipelineFactory.getInstance().getImagePipeline().clearMemoryCaches();
            }
        }
    });
    imagePipelineConfigBuilder.setMemoryTrimmableRegistry(memoryTrimmableRegistry);
    /**
     * 在图片解码时根据ResizeOptions所设的宽高的像素进行解码,这样解码出来可以得到一个更小的Bitmap。
     * 必须和ImageRequest的ResizeOptions一起使用,ResizeOptions和DownsampleEnabled参数都不影响原图片的大小,影响的是EncodeImage的大小,
     * 进而影响Decode出来的Bitmap的大小,ResizeOptions须和此参数结合使用,
     * 是因为单独使用ResizeOptions的话只支持JPEG图,所以需支持png、jpg、webp需要先设置此参数。
     */
    imagePipelineConfigBuilder.setDownsampleEnabled(true);
    // 配置渐进式显示(使用默认效果),仅支持文件类型为JPEG的网络图片
    imagePipelineConfigBuilder.setProgressiveJpegConfig(new SimpleProgressiveJpegConfig());
    // 设置调试时,显示图片加载的Log
    FLog.setMinimumLoggingLevel(FLog.VERBOSE);
    Set<RequestListener> requestListeners = new HashSet<>();
    requestListeners.add(new RequestLoggingListener());
    imagePipelineConfigBuilder.setRequestListeners(requestListeners);
    // 进行初始化
    Fresco.initialize(context, imagePipelineConfigBuilder.build());
}
Also used : MemoryTrimType(com.facebook.common.memory.MemoryTrimType) RequestListener(com.facebook.imagepipeline.listener.RequestListener) NoOpMemoryTrimmableRegistry(com.facebook.common.memory.NoOpMemoryTrimmableRegistry) MemoryTrimmableRegistry(com.facebook.common.memory.MemoryTrimmableRegistry) ImagePipelineConfig(com.facebook.imagepipeline.core.ImagePipelineConfig) PipelineDraweeControllerBuilder(com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder) ImageRequestBuilder(com.facebook.imagepipeline.request.ImageRequestBuilder) RequestLoggingListener(com.facebook.imagepipeline.listener.RequestLoggingListener) MemoryTrimmable(com.facebook.common.memory.MemoryTrimmable) DiskCacheConfig(com.facebook.cache.disk.DiskCacheConfig) SimpleProgressiveJpegConfig(com.facebook.imagepipeline.decoder.SimpleProgressiveJpegConfig) MemoryCacheParams(com.facebook.imagepipeline.cache.MemoryCacheParams) OkHttpNetworkFetcher(com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher) HashSet(java.util.HashSet)

Example 2 with MemoryCacheParams

use of com.facebook.imagepipeline.cache.MemoryCacheParams in project remusic by aa112901.

the class MainApplication method getConfigureCaches.

private ImagePipelineConfig getConfigureCaches(Context context) {
    final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(// 内存缓存中总图片的最大大小,以字节为单位。
    MAX_MEM, // 内存缓存中图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。
    MAX_MEM, // 内存缓存中准备清除的总图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中单个图片的最大大小。
    Integer.MAX_VALUE / 10);
    Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = new Supplier<MemoryCacheParams>() {

        @Override
        public MemoryCacheParams get() {
            return bitmapCacheParams;
        }
    };
    ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context).setDownsampleEnabled(true);
    builder.setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams);
    // 小图片的磁盘配置
    DiskCacheConfig diskSmallCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    context.getApplicationContext().getCacheDir()).build();
    // 默认图片的磁盘配置
    DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    Environment.getExternalStorageDirectory().getAbsoluteFile()).build();
    // 缓存图片配置
    ImagePipelineConfig.Builder configBuilder = ImagePipelineConfig.newBuilder(context).setBitmapMemoryCacheParamsSupplier(// 内存缓存配置(一级缓存,已解码的图片)
    mSupplierMemoryCacheParams).setMainDiskCacheConfig(// 磁盘缓存配置(总,三级缓存)
    diskCacheConfig);
    return builder.build();
}
Also used : DiskCacheConfig(com.facebook.cache.disk.DiskCacheConfig) ImagePipelineConfig(com.facebook.imagepipeline.core.ImagePipelineConfig) MemoryCacheParams(com.facebook.imagepipeline.cache.MemoryCacheParams) Supplier(com.facebook.common.internal.Supplier)

Example 3 with MemoryCacheParams

use of com.facebook.imagepipeline.cache.MemoryCacheParams in project fresco by facebook.

the class ImagePipelineConfigFactory method configureCaches.

/**
 * Configures disk and memory cache not to exceed common limits
 */
private static void configureCaches(ImagePipelineConfig.Builder configBuilder, Context context) {
    final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(// Max total size of elements in the cache
    ConfigConstants.MAX_MEMORY_CACHE_SIZE, // Max entries in the cache
    Integer.MAX_VALUE, // Max total size of elements in eviction queue
    ConfigConstants.MAX_MEMORY_CACHE_SIZE, // Max length of eviction queue
    Integer.MAX_VALUE, // Max cache entry size
    Integer.MAX_VALUE, // Interval for checking cache parameters
    TimeUnit.MINUTES.toMillis(5));
    configBuilder.setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {

        public MemoryCacheParams get() {
            return bitmapCacheParams;
        }
    }).setMainDiskCacheConfig(DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(context.getApplicationContext().getCacheDir()).setBaseDirectoryName(IMAGE_PIPELINE_CACHE_DIR).setMaxCacheSize(ConfigConstants.MAX_DISK_CACHE_SIZE).build());
}
Also used : MemoryCacheParams(com.facebook.imagepipeline.cache.MemoryCacheParams) Supplier(com.facebook.common.internal.Supplier)

Example 4 with MemoryCacheParams

use of com.facebook.imagepipeline.cache.MemoryCacheParams in project teaTime by ancfdy.

the class FrescoUtils method configureCaches.

/**
 * 初始化配置
 * @param context
 * @return
 */
private static ImagePipelineConfig configureCaches(Context context) {
    // 内存配置
    final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(// 内存缓存中总图片的最大大小,以字节为单位。
    FrescoUtils.MAX_MEMORY_CACHE_SIZE, // 内存缓存中图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。
    FrescoUtils.MAX_MEMORY_CACHE_SIZE, // 内存缓存中准备清除的总图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中单个图片的最大大小。
    Integer.MAX_VALUE);
    // 修改内存图片缓存数量,空间策略(这个方式有点恶心)
    Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = new Supplier<MemoryCacheParams>() {

        @Override
        public MemoryCacheParams get() {
            return bitmapCacheParams;
        }
    };
    // 小图片的磁盘配置
    DiskCacheConfig diskSmallCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    context.getApplicationContext().getCacheDir()).setBaseDirectoryName(// 文件夹名
    IMAGE_PIPELINE_SMALL_CACHE_DIR).setMaxCacheSize(// 默认缓存的最大大小。
    FrescoUtils.MAX_DISK_CACHE_SIZE).setMaxCacheSizeOnLowDiskSpace(// 缓存的最大大小,使用设备时低磁盘空间。
    MAX_SMALL_DISK_LOW_CACHE_SIZE).setMaxCacheSizeOnVeryLowDiskSpace(// 缓存的最大大小,当设备极低磁盘空间
    MAX_SMALL_DISK_VERYLOW_CACHE_SIZE).build();
    // 默认图片的磁盘配置
    DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    Environment.getExternalStorageDirectory().getAbsoluteFile()).setBaseDirectoryName(// 文件夹名
    IMAGE_PIPELINE_CACHE_DIR).setMaxCacheSize(// 默认缓存的最大大小。
    FrescoUtils.MAX_DISK_CACHE_SIZE).setMaxCacheSizeOnLowDiskSpace(// 缓存的最大大小,使用设备时低磁盘空间。
    MAX_DISK_CACHE_LOW_SIZE).setMaxCacheSizeOnVeryLowDiskSpace(// 缓存的最大大小,当设备极低磁盘空间
    MAX_DISK_CACHE_VERYLOW_SIZE).build();
    // 缓存图片配置
    ImagePipelineConfig.Builder configBuilder = ImagePipelineConfig.newBuilder(context).setBitmapMemoryCacheParamsSupplier(// 内存缓存配置(一级缓存,已解码的图片)
    mSupplierMemoryCacheParams).setMainDiskCacheConfig(// 磁盘缓存配置(总,三级缓存)
    diskCacheConfig).setSmallImageDiskCacheConfig(// 磁盘缓存配置(小图片,可选~三级缓存的小图优化缓存)
    diskSmallCacheConfig);
    return configBuilder.build();
}
Also used : DiskCacheConfig(com.facebook.cache.disk.DiskCacheConfig) ImagePipelineConfig(com.facebook.imagepipeline.core.ImagePipelineConfig) MemoryCacheParams(com.facebook.imagepipeline.cache.MemoryCacheParams) Supplier(com.facebook.common.internal.Supplier)

Example 5 with MemoryCacheParams

use of com.facebook.imagepipeline.cache.MemoryCacheParams in project teaTime by ancfdy.

the class FrescoUtils method configureCaches.

/**
 * 初始化配置
 * @param context
 * @return
 */
private static ImagePipelineConfig configureCaches(Context context) {
    // 内存配置
    final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(// 内存缓存中总图片的最大大小,以字节为单位。
    FrescoUtils.MAX_MEMORY_CACHE_SIZE, // 内存缓存中图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。
    FrescoUtils.MAX_MEMORY_CACHE_SIZE, // 内存缓存中准备清除的总图片的最大数量。
    Integer.MAX_VALUE, // 内存缓存中单个图片的最大大小。
    Integer.MAX_VALUE);
    // 修改内存图片缓存数量,空间策略(这个方式有点恶心)
    Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = new Supplier<MemoryCacheParams>() {

        @Override
        public MemoryCacheParams get() {
            return bitmapCacheParams;
        }
    };
    // 小图片的磁盘配置
    DiskCacheConfig diskSmallCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    context.getApplicationContext().getCacheDir()).setBaseDirectoryName(// 文件夹名
    IMAGE_PIPELINE_SMALL_CACHE_DIR).setMaxCacheSize(// 默认缓存的最大大小。
    FrescoUtils.MAX_DISK_CACHE_SIZE).setMaxCacheSizeOnLowDiskSpace(// 缓存的最大大小,使用设备时低磁盘空间。
    MAX_SMALL_DISK_LOW_CACHE_SIZE).setMaxCacheSizeOnVeryLowDiskSpace(// 缓存的最大大小,当设备极低磁盘空间
    MAX_SMALL_DISK_VERYLOW_CACHE_SIZE).build();
    // 默认图片的磁盘配置
    DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(// 缓存图片基路径
    Environment.getExternalStorageDirectory().getAbsoluteFile()).setBaseDirectoryName(// 文件夹名
    IMAGE_PIPELINE_CACHE_DIR).setMaxCacheSize(// 默认缓存的最大大小。
    FrescoUtils.MAX_DISK_CACHE_SIZE).setMaxCacheSizeOnLowDiskSpace(// 缓存的最大大小,使用设备时低磁盘空间。
    MAX_DISK_CACHE_LOW_SIZE).setMaxCacheSizeOnVeryLowDiskSpace(// 缓存的最大大小,当设备极低磁盘空间
    MAX_DISK_CACHE_VERYLOW_SIZE).build();
    // 缓存图片配置
    ImagePipelineConfig.Builder configBuilder = ImagePipelineConfig.newBuilder(context).setBitmapMemoryCacheParamsSupplier(// 内存缓存配置(一级缓存,已解码的图片)
    mSupplierMemoryCacheParams).setMainDiskCacheConfig(// 磁盘缓存配置(总,三级缓存)
    diskCacheConfig).setSmallImageDiskCacheConfig(// 磁盘缓存配置(小图片,可选~三级缓存的小图优化缓存)
    diskSmallCacheConfig);
    return configBuilder.build();
}
Also used : DiskCacheConfig(com.facebook.cache.disk.DiskCacheConfig) ImagePipelineConfig(com.facebook.imagepipeline.core.ImagePipelineConfig) MemoryCacheParams(com.facebook.imagepipeline.cache.MemoryCacheParams) Supplier(com.facebook.common.internal.Supplier)

Aggregations

MemoryCacheParams (com.facebook.imagepipeline.cache.MemoryCacheParams)8 DiskCacheConfig (com.facebook.cache.disk.DiskCacheConfig)6 ImagePipelineConfig (com.facebook.imagepipeline.core.ImagePipelineConfig)6 Supplier (com.facebook.common.internal.Supplier)5 File (java.io.File)2 SharedPreferences (android.content.SharedPreferences)1 Crashlytics (com.crashlytics.android.Crashlytics)1 CacheKey (com.facebook.cache.common.CacheKey)1 SimpleCacheKey (com.facebook.cache.common.SimpleCacheKey)1 MemoryTrimType (com.facebook.common.memory.MemoryTrimType)1 MemoryTrimmable (com.facebook.common.memory.MemoryTrimmable)1 MemoryTrimmableRegistry (com.facebook.common.memory.MemoryTrimmableRegistry)1 NoOpMemoryTrimmableRegistry (com.facebook.common.memory.NoOpMemoryTrimmableRegistry)1 PipelineDraweeControllerBuilder (com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder)1 OkHttpNetworkFetcher (com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher)1 BitmapMemoryCacheTrimStrategy (com.facebook.imagepipeline.cache.BitmapMemoryCacheTrimStrategy)1 CountingLruBitmapMemoryCacheFactory (com.facebook.imagepipeline.cache.CountingLruBitmapMemoryCacheFactory)1 SimpleProgressiveJpegConfig (com.facebook.imagepipeline.decoder.SimpleProgressiveJpegConfig)1 CloseableImage (com.facebook.imagepipeline.image.CloseableImage)1 RequestListener (com.facebook.imagepipeline.listener.RequestListener)1