android內建的記憶體memory和第三方外部儲存disk管理

來源:互聯網
上載者:User

標籤:android記憶體管理   android緩衝管理   android檔案快取和記憶體緩衝   

/**  * @author [email protected]  * @time 20140606  */ package com.intbird.utils;import java.io.File;import com.yilake.store.FileHelper;import android.graphics.Bitmap;import android.os.Environment;import android.util.LruCache;public class CacheManager {//單例private static CacheManager cacheInstance;//記憶體緩衝大小private final int MEMO_CACHE_SIZE=((int)(Runtime.getRuntime().maxMemory()/1024));//檔案快取大小private final int DISK_CACHE_SIZE=1024*1024*100;//記憶體緩衝private LruCache<String,Bitmap> mMemoryCache;//檔案快取private DiskLruCache mDiskLruCache;private String cacheUrl="";public CacheManager() {//記憶體緩衝mMemoryCache=new LruCache<String, Bitmap>(MEMO_CACHE_SIZE){protected int sizeOf(String key, Bitmap bitmap) {return bitmap.getByteCount()/1024;};};//檔案快取setBitmapFileCacheDir(FileHelper.DISK_CACHE_FILEDIR);}/** * 擷取單例 * @return */public static CacheManager getInstance() {if(cacheInstance==null){cacheInstance=new CacheManager();}return cacheInstance;}/** * 設定緩衝目錄; * @param cacheDir */public void setBitmapFileCacheDir(String cacheDir){File cacheFile=getDiskFileCache(cacheDir);cacheUrl=cacheFile.getAbsolutePath();mDiskLruCache=DiskLruCache.openCache(cacheFile, DISK_CACHE_SIZE);}/** * 返回緩衝目錄路徑 * @return */public String getBitmapFileCacheDir(){return cacheUrl;}//通用外部調用public void addBitmapToCache(String fileUrl, Bitmap bitmap) {addBitmapToMemory(fileUrl,bitmap);addBitmapToDisk(fileUrl,bitmap);}public Bitmap getBitmapFromCache(String key){Bitmap bmp=null;bmp=getBitmapFromMemory(key);if(bmp==null){bmp=getBitmapFromDisk(key);}return bmp;}/** * 圖片加入記憶體緩衝 * @param key * @param bitmap */private void addBitmapToMemory(String key,Bitmap bitmap){if(getBitmapFromMemory(key)==null){mMemoryCache.put(key, bitmap);}}/** * 擷取記憶體緩衝圖片 * @param key * @return */private Bitmap getBitmapFromMemory(String key){return mMemoryCache.get(key);}/** * 將圖片加入檔案快取 * @param key * @param bitmap */private void addBitmapToDisk(String key,Bitmap bitmap){        if (mDiskLruCache != null && mDiskLruCache.get(key) == null) {            mDiskLruCache.put(key, bitmap);        }}/** * 從檔案快取中擷取圖片 * @param key * @return */private Bitmap getBitmapFromDisk(String key){        if (mDiskLruCache != null) {            return mDiskLruCache.get(key);        }    return null;}/** * 擷取緩衝目錄 * @return */public static File getDiskFileCache(String cacheDir){String cachePath =Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||                    !Environment.isExternalStorageRemovable() ?                     Environment.getExternalStorageDirectory().getPath():                    Environment.getDataDirectory().getPath();    File file =new File(cachePath + File.separator + cacheDir);    if(!file.exists()) file.mkdir();    return file;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.