1. 程式人生 > >Fresco磁碟記憶體快取 工具類

Fresco磁碟記憶體快取 工具類

1. 新增依賴,在AndroidManifest.xml清單檔案中配置:

compile 'com.facebook.fresco:fresco:1.5.0'
<application
android:name=".util.BaseApplication"
            

2. 全域性初始化配置 Fresco :       

importandroid.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;

//全域性初始化Application類
public class BaseApplication extends 
Application { @Override public void onCreate() { super.onCreate(); //用於全域性配置初始化Fresco 圖片載入 Fresco.initialize(this,Fresco_ImagePipelineConfigUtil.getDefaultImagePipelineConfig(this)); } }      

3. 工具類:

import android.content.Context;
import android.graphics.Bitmap;
import 
android.os.Environment; import android.util.Log; import com.facebook.cache.disk.DiskCacheConfig; import com.facebook.common.disk.NoOpDiskTrimmableRegistry; import com.facebook.common.internal.Supplier; import com.facebook.common.memory.MemoryTrimType; import com.facebook.common.memory.MemoryTrimmable; import
com.facebook.common.memory.NoOpMemoryTrimmableRegistry; import com.facebook.common.util.ByteConstants; import com.facebook.imagepipeline.cache.MemoryCacheParams; import com.facebook.imagepipeline.core.ImagePipelineConfig; import com.facebook.imagepipeline.core.ImagePipelineFactory; /** * Fresco磁碟快取工具類 */ public class Fresco_ImagePipelineConfigUtil { //分配的可用記憶體 private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory(); //使用的快取數量 private static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 4; //小圖極低磁碟空間快取的最大值(特性:可將大量的小圖放到額外放在另一個磁碟空間防止大圖佔用磁碟空間而刪除了大量的小圖) private static final int MAX_SMALL_DISK_VERYLOW_CACHE_SIZE = 20 * ByteConstants.MB; //小圖低磁碟空間快取的最大值(特性:可將大量的小圖放到額外放在另一個磁碟空間防止大圖佔用磁碟空間而刪除了大量的小圖) private static final int MAX_SMALL_DISK_LOW_CACHE_SIZE = 60 * ByteConstants.MB; //預設圖極低磁碟空間快取的最大值 private static final int MAX_DISK_CACHE_VERYLOW_SIZE = 20 * ByteConstants.MB; //預設圖低磁碟空間快取的最大值 private static final int MAX_DISK_CACHE_LOW_SIZE = 60 * ByteConstants.MB; //預設圖磁碟快取的最大值 private static final int MAX_DISK_CACHE_SIZE = 100 * ByteConstants.MB; //小圖所放路徑的資料夾名 private static final String IMAGE_PIPELINE_SMALL_CACHE_DIR = "ImagePipelineCacheSmall"; //預設圖所放路徑的資料夾名 private static final String IMAGE_PIPELINE_CACHE_DIR = "ImagePipelineCacheDefault"; //ImagePipelineConfig 的完整配置 public static ImagePipelineConfig getDefaultImagePipelineConfig(Context context) { //記憶體配置 final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams( MAX_MEMORY_CACHE_SIZE,// 記憶體快取中總圖片的最大大小,以位元組為單位。 Integer.MAX_VALUE,// 記憶體快取中圖片的最大數量。 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(MAX_DISK_CACHE_SIZE)//預設快取的最大大小。 .setMaxCacheSizeOnLowDiskSpace(MAX_SMALL_DISK_LOW_CACHE_SIZE)//快取的最大大小,使用裝置時低磁碟空間。 .setMaxCacheSizeOnVeryLowDiskSpace(MAX_SMALL_DISK_VERYLOW_CACHE_SIZE)//快取的最大大小,當裝置極低磁碟空間 .setDiskTrimmableRegistry(NoOpDiskTrimmableRegistry.getInstance()) .build(); //預設圖片的磁碟配置 DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context).setBaseDirectoryPath(Environment.getExternalStorageDirectory().getAbsoluteFile())//快取圖片基路徑 .setBaseDirectoryName(IMAGE_PIPELINE_CACHE_DIR)//資料夾名 .setMaxCacheSize(MAX_DISK_CACHE_SIZE)//預設快取的最大大小。 .setMaxCacheSizeOnLowDiskSpace(MAX_DISK_CACHE_LOW_SIZE)//快取的最大大小,使用裝置時低磁碟空間。 .setMaxCacheSizeOnVeryLowDiskSpace(MAX_DISK_CACHE_VERYLOW_SIZE)//快取的最大大小,當裝置極低磁碟空間 .setDiskTrimmableRegistry(NoOpDiskTrimmableRegistry.getInstance()) .build(); //快取圖片配置 ImagePipelineConfig.Builder configBuilder = ImagePipelineConfig.newBuilder(context) .setBitmapsConfig(Bitmap.Config.RGB_565) .setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams) .setSmallImageDiskCacheConfig(diskSmallCacheConfig) .setMainDiskCacheConfig(diskCacheConfig) .setMemoryTrimmableRegistry(NoOpMemoryTrimmableRegistry.getInstance()) .setResizeAndRotateEnabledForNetwork(true); // 這段程式碼,用於清理快取 NoOpMemoryTrimmableRegistry.getInstance().registerMemoryTrimmable(new MemoryTrimmable() { @Override public void trim(MemoryTrimType trimType) { final double suggestedTrimRatio = trimType.getSuggestedTrimRatio(); String log = String.format("onCreate suggestedTrimRatio : %d", suggestedTrimRatio); Log.d("Fresco快取",log); if (MemoryTrimType.OnCloseToDalvikHeapLimit.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInBackground.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInForeground.getSuggestedTrimRatio() == suggestedTrimRatio ) { ImagePipelineFactory.getInstance().getImagePipeline().clearMemoryCaches(); } } }); return configBuilder.build(); } }

相關推薦

Fresco磁碟記憶體快取 工具

1. 新增依賴,在AndroidManifest.xml清單檔案中配置: compile 'com.facebook.fresco:fresco:1.5.0' <application android:name=".util.BaseApplication"  

快取工具

這是專案用用到快取工具類 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.C

清除APP快取工具

這是專案中用到的“ 清除快取”功能的工具類 import android.content.Context; import android.os.Environment; import android.text.TextUtils; import java.io.File; imp

Android清理快取工具

DataCleanUtil.java import android.content.Context; import android.os.Environment; import java.io.File; import java.math.BigDecimal; /

Redis儲存快取工具簡單封裝

一、公共實體類 (1)User.java package cn.xiyou.entity; import java.io.Serializable; /** * User實體 * * @author XIOAHU * */ publi

Android RxJava 實戰系列:從磁碟 / 記憶體快取中 獲取快取資料

前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。 RxJava如此受歡迎的原因,在於其提供了豐富 &

快取工具 使用IO流寫入本地檔案

/** * Copyright (c) 2012-2013, Michael Yang 楊福海 (www.yangfuhai.com). * * Licensed under the Apache License, Version 2.0 (the "License")

Android面試題(23)-圖片的三級快取工具

上一篇部落格已經把三級快取原理大致都講了,這篇部落格就僅僅貼一下封裝好的一個圖片三級快取工具類,程式碼內有註釋,僅僅小記一下:首先是MyBitmapUtils,它提供了一個display方法去供外界呼叫:/** * 圖片三級快取工具類 * Created by PDD o

基於STSdb和fastJson的磁碟/記憶體快取

更新 1. 增加了對批量處理的支援,寫操作速度提升5倍,讀操作提升100倍 2. 增加了對併發的支援 需求 業務系統用的是資料庫,資料量大,部分只讀或相對穩定業務查詢複雜,每次頁面載入都要花耗不少時間(不討論非同步),覺得可以做一下快取記憶體,譬如用nosql那種key/value快速存取結果 目的

C#開源磁碟/記憶體快取引擎

using System; using System.Collections.Generic; using System.Linq; using System.Text; using STSdb4.Database; using fastJSON; using System.IO; na

使用ConcurrentHashMap作為快取工具的總結

使用雜湊表作為快取工具,可以有時候有效避免對資料庫的頻繁訪問,有助於效率和效能的提高 package com.test.lz; import java.util.Date; import java.

Unity+NGUI打造網路圖片非同步載入與本地快取工具(一)

我們在移動端的開發中,非同步網路圖片載入用的非常的多,在unity當中雖然有AssetBundle的存在,一般是先載入好遊戲資源然後再進入場景,但是還有不少地方能夠用到非同步網路圖片的載入以及其快取機制。 我之前也寫過兩個版本的ios中的非同步網路圖片載入helper類,所

Android 清理資料/快取工具 CleanCacheUtil

/** * * 清除快取 * * * */ public class CleanCacheUtil {

JAVA使用JDK1.5提供的讀寫鎖實現高併發本地快取工具

package com.study; import java.util.LinkedHashMap; import jav

Glide 快取工具例子,快取大小獲取,磁碟快取清除(2 種方法),記憶體快取清除

Glide 快取 Simple快取路徑的指定快取大小的獲取磁碟快取清除(兩種方法)記憶體快取清除可 clone 之後檢視使用 SimpleGlide cache Simple.The cache path specifiedThe cache sizeThe disk cache (two ways)Memo

Android RxJava操作符的學習---組合合併操作符---從磁碟記憶體快取中獲取快取資料

1. 需求場景     2. 功能說明 對於從磁碟 / 記憶體快取中 獲取快取資料 的功能邏輯如下: 3. 具體實現 詳細請看程式碼註釋 // 該2變數用於模擬記憶體快取 & 磁碟快取中的資料 String me

Redis作為快取實現工具

使用Redis作為快取物件,常用的儲存格式為字串,所以在儲存快取時,將物件轉為字串儲存.由於存的時候為字串,所以取出的也為json字串. 此工具類在設值時只需要將key與物件傳入即可 取值時只需要將key與要取的物件型別傳入即可 public class CacheUtilImpl im

Fresco磁碟快取

package zjj.bwie.com.zk_demo03.app; import android.app.Application; import android.os.Environment; import com.facebook.cache.disk.DiskCa

java記憶體分頁工具

工作中由於有時候專案中特殊業務需求,需要使用到記憶體分頁,本人根據java.util.Arrays、java.util.Collections工具類結合泛型標記寫了一個簡單的記憶體分頁工具類,支援陣列和List,傳入全量資料和頁碼直接返回對應頁碼的資料,返回資料型別根據傳入

【JavaEE學習筆記】Hibernate_03_快取機制,自定義通用HibernateDAO工具

Hibernate_03 A.Hibernate快取 1.一級快取 一級快取是Session快取,屬於事務範圍的快取,由hibernate管理的 只要應用程式通過Session介面來執行CRUD操作 Hibernate就會啟用一級快取,把資料庫中的資料以物件的形式拷貝