1. 程式人生 > >Fresco的磁碟快取

Fresco的磁碟快取

public class ImagePipelineConfigUtils {

    //分配的可用記憶體
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"; 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(); if (MemoryTrimType.OnCloseToDalvikHeapLimit.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInBackground.getSuggestedTrimRatio() == suggestedTrimRatio || MemoryTrimType.OnSystemLowMemoryWhileAppInForeground.getSuggestedTrimRatio() == suggestedTrimRatio ) { ImagePipelineFactory.getInstance().getImagePipeline().clearMemoryCaches(); } } }); return configBuilder.build(); } }

相關推薦

Fresco磁碟快取

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

Fresco磁碟記憶體快取 工具類

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

Fresco磁碟快取

public class ImagePipelineConfigUtils { //分配的可用記憶體 private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory();

python網路爬蟲磁碟快取資料

import os import re import urllib.parse import pickle class DiskCache: def __init__(self,cache_dir='cache'): self.cache_dir=cache_dir

Android讀寫鎖的應用,以及最佳的磁碟快取設計

前言 相信磁碟快取在絕大部分的app上都有應用,相對於資料庫快取來說,可以不要注重於快取的管理,比較開放和隨意。 再加上jakewharton早年間釋出的disklrucache框架,讓我們使用磁碟快取更加簡單,效率上和資料庫快取也拉進了一步,以後有時間我在加上disklrucache的快取解讀。

linux開啟swap(磁碟快取)操作

由於工作需要,要幫助同事檢視linux伺服器的快取開啟情況,經過查詢資料,可確定通過以下方法確定Linux磁碟快取是否已開啟。1.命令列下執行free命令,當顯示如下紅框內的資訊(swap)時,說明swap處於啟用狀態此時注意,開啟時total和free處均有值。 2.

磁碟快取和記憶體快取的區別

記憶體快取 快取記憶體(英語:cache,英語發音:/kæʃ/ kash [1][2][3],簡稱快取),其原始意義是指訪問速度比一般隨機存取儲存器(RAM)快的一種RAM,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。 原理

Glide 快取策略 記憶體快取磁碟快取

本文主要介紹瞭如何配置和管理Glide中的快取,其中大部分內容都可以直接在官方Wiki中找到,這裡只是進行了整理和彙總。言歸正傳,Glide支援圖片的二級快取(並不是三級快取,因為從網路載入並不屬於快取),即記憶體快取和磁碟快取。 磁碟快取 一般的圖片快取指的就是磁碟快取

關於Fresco快取清理的那些事

前言 我相信很多人對Fresco這個優秀的第三方網路圖片處理框架不陌生,無論從使用還是配置而言都是很人性化的簡單,今天要講述的是我遇到的關於快取清理的事情。(原文) 正文 Fresco自身的快取清理時機 當我們手動退出整個app的時候,發現之前

Glide原始碼閱讀(四)記憶體快取磁碟快取、跳過快取

一、記憶體快取實現com.bumptech.glide.util.LruCache<T, Y>中,通過LinkedHashMap做記憶體快取Engine中,MemoryCache.put(EngineKey, EngineResource);新增到LinkedHa

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

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

磁碟快取

#-*- coding:UTF-8 -*- #原來建立物件時或者是呼叫類以外的方法時提示沒有定義是因為這些類或方法的位置不應該放在主函式後面,而應該放在主函式前面 import urlparse import urllib2 import random import tim

android Glide 獲取磁碟快取

Glide是Google推薦的圖片載入庫, 載入圖片一般以下面的形式: Glide.with(context).load(ImgUrl) .asBitmap() .error(R.drawable.error) .pla

Android快取機制Lrucache記憶體快取和DiskLruCache磁碟快取

1.1 記憶體快取——LruCache原始碼分析     1.1.1 LRU     LRU,全稱Least Rencetly Used,即最近最少使用,是一種非常常用的置換演算法,也即淘汰最長時間未使用的物件。LRU在作業系統中的頁面置換演算法中廣泛使用,我們的記憶體或快取空間是有限的,當新加入一個物

iOS開發之記憶體快取 磁碟快取 沙盒

        最近一直看到“快取”兩字,索性自己總結一下,希望大神看到多多指點。         說到快取,快取分為記憶體快取和磁碟快取兩種,記憶體是指當前程式的執行空間,磁碟是程式的儲存空間; 記憶體快取速度快容量小,磁碟快取容量大速度慢可持久化;記憶體是臨時儲存檔案用

Android記憶體快取磁碟快取的實現

記憶體快取 Android自帶的LruCache實現了記憶體快取,LruCache內部主要使用LinkedHashMap的特性來實現,因為LinkedHashMap可支援FIFO和LRU訪問。 LinkedHashMap的特點 LinkedHashMap繼

Fresco清理快取

清除快取中的一條url ImagePipeline現有函式可以刪除快取中的一條url。 ImagePipeline imagePipeline = Fresco.getImagePipeline(); Uri uri; imagePipeline.evictFromM

Linux下的磁碟快取

為了得到需要重新整理的髒頁,就要徹底的搜尋與在磁碟上有映像的索引節點相應的所有address_space物件(是一棵搜尋樹)。由於頁快取記憶體可能有大量的頁,如果用一個單獨的執行流來掃描整個快取記憶體,會令CPU和磁碟長時間繁忙,因此,Linux使用一種複雜的機制把對頁快取記憶體的掃描劃分為幾個執行流。當記憶

Glide原始碼分析(一)——DiskLruCache磁碟快取的實現

Glide磁碟的實現主要是通過DiskLruCache來實現的。DiskLruCache並非針對Glide編寫的,而是一個通用的磁碟快取實現,雖然並非Google官方的程式碼,但是已經在很多應用中得到了引入使用。 journal日誌 DiskLruCache

Fresco正傳(7):如何手動清理Fresco快取

前言 這篇是隨手寫的,有博友在樓下提問相關問題。 這裡先把我知道的方案放這裡,以後有空詳細寫。 另外,請注意:雖然我找到了如何清理快取的方法,但是目前還未實際測試過。請自行測試哦。 正文 public class ImagePipelineCo