/** * @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)
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- out of Memory Error java/lang/OutOfMemortyError,该怎么解决
- android RadioButton如何设置默认选中
- android 怎么重新设置锚点
- android 图片对象获取的有关问题
- android 关于服务连接的疑义
- android 怎么实现对view的放大和缩小
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java) 中文乱码的有关问题
- Web应用“无法操作保护内存”错误,Attempted to read or write protected memory
- ASP程序出现如下异常怎么解决?[Microsoft][ODBC Visual FoxPro Driver]SQL: Out of memory
- oracle范例无法启动 out of memory
- oracle实例无法启动 out of memory,该如何处理
- android 动态设立控件高度
- Android test project 编译方法
- android 4.03启动出错,显示"Encryption Unsuccessful"该如何解决
- Android 下面的listView的动态效果怎么实现的?求源代码,多谢
- Android?Palm?Symbian?Windows Mobile?学哪个有“钱图”?解决方案
- Android 开发语言,该怎么解决
- 单个人去做手机开发选什么平台好?android,iphone?解决办法
- Android 虚拟机崩溃的有关问题
- 想学学移动平台的开发 android 还是windows phone7好啊该怎么处理