/** * @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; }}
详细解决方案
android自带的内存储器memory和第三方外部存储disk管理
热度:24 发布时间:2016-04-28 04:26:42.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- j地图命令(Java Memory Map)
- The Top Java Memory Problems – Part 一
- JAVA内存有关问题(Java Memory Problems)
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- out of Memory Error java/lang/OutOfMemortyError,该怎么解决
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决
- android ListView 中的onItemClick Intent 没法跳转
- android(java) 中文乱码的有关问题
- c#c++,android,ios(iphone),php,java视屏课程 散分
- 水晶报表升级到vs2005之后,出现Not enough memory for operation.该怎么处理