缓存管理这里

http://blog.csdn.net/intbird/article/details/38338713

图片处理在这里

http://blog.csdn.net/intbird/article/details/38338811

界面回收图片在这里

http://blog.csdn.net/intbird/article/details/19905549

工具Jar包在这里说明:

http://pan.baidu.com/s/1c0q2SzY

/**
* @author intbird@163.com
* @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管理的更多相关文章

  1. Android外部存储

    WeTest 导读 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更.我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdc ...

  2. 彻底了解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  3. 彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  4. Android外部存储 - 官方文档解读

    预备知识:External Storage Technical Information 摘要: "The WRITE_EXTERNAL_STORAGE permission must onl ...

  5. 【转】彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  6. android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  7. Android 外部存储权限分析

    不知道你有么有发现.来自菜鸟的成长史:http://blog.csdn.net/zjbpku/article/details/25161131. KitKat之后的版本号不再支持用户对外置SDcard ...

  8. Android——课堂整理:assets目录和手机外部存储

    layout文件: <Button android:layout_width="match_parent" android:layout_height="wrap_ ...

  9. Android 在外部存储读写文件

    本文主要介绍android中如何在外部存储读写数据 sd卡的路径 sdcard:2.3之前的sd卡路径 mnt/sdcard:4.3之前的sd卡路径 storage/sdcard:4.3之后的sd卡路 ...

随机推荐

  1. HTML5学习笔记简明版(11):新API

    HTMLDocument上的扩展 HTML5在DOM Level 2 HTML上扩展了一些HTMLDocument的接口. 这些接口在全部实现了Document接口的元素对象上进行了实现.HTML5在 ...

  2. 解决wordpress发表文章,照片不能居中的问题

    最近,随着一个年轻漂亮的女人的帮助(简直美极了.图相当火爆,性格非常好.大家闺秀型,照片给大家看看下一个突发.哈哈)获取她的个人博客,地址似乎是www.okaaok.com遇到发表文章.照片不能反正水 ...

  3. sql dateDiff函数

    当月的数据select * from MOPICK where dateDiff(m,getdate(),START_DATE)=0

  4. MVC json

    1. .net MVC中Controller 在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须是一个pu ...

  5. Eclipse+Maven创建webapp项目<二> (转)

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  6. Nubia Z5S 官方4.4 201内測版 内核版本号信息

    从egl推断内核的的版本号: OpenGL ES Shader Compiler Version: E031.24.00.14 Build Date: 04/29/14 Tue Local Branc ...

  7. HDU 1698 Just a Hook (段树更新间隔)

    Problem Description In the game of DotA, Pudge's meat hook is actually the most horrible thing for m ...

  8. android性能测试内存泄漏

    1.什么是内存泄漏?     适用于该系统的内存使用内存泄漏,未回复(释放),该内存可以没有事业,也不能被其他人使用使用自己. 2.出有什么差别?    内存泄漏是分配出去的内存无法回收.    内存 ...

  9. 每位iOS开发人员不容错过的10大实用工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  10. 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" ...