缓存管理这里

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. [Unity3D]Unity4全新的动画系统Mecanim

    Unity4.X添加一个新的动画系统,以取代原有的3.X旧的动画系统,全新的动画系统Mecanim是官方推荐,它使我们能够写更少的代码实现连续动画. 效果图 Unity3.X中动画系统播放动画 使用播 ...

  2. POJ 1274 The Perfect Stall 水二分匹配

    主题链接:id=1274">点击打开链接 呵呵 #include<cstdio> #include<cstring> #include<cstdlib&g ...

  3. MySQL Windows ZIP 免费安装和启动设置

    MySQL Windows ZIP免安装版,设置和启动的过程事实上挺麻烦的.以下一步一步介绍使用的过程: 1.下载Windows (x86, 64-bit), ZIP Archive: 2.解压zip ...

  4. Foursquare 8.0 :聪明人给互联网公司上的流量转化课

    今年 5 月上线的 Swarm 虽然应用制作精良,但不免让人怀疑是 Foursquare一次失败的互联网公司服务越界和用户忠诚度试水.但非常快这群聪明人让我们发现事情并没有这么简单:他们给互联网公司们 ...

  5. HDOJ 5147 Sequence II 树阵

    树阵: 每个号码的前面维修比其数数少,和大量的这后一种数比他的数字 再枚举每一个位置组合一下 Sequence II Time Limit: 5000/2500 MS (Java/Others)    ...

  6. [Windows Phone] 地图控制项的经纬度

    原文:[Windows Phone] 地图控制项的经纬度 前言 本文主要示范如何使用地图经纬度以及显示地标和行人街道,并透过卷轴控制地图缩放比例的功能. ? 实作 step1 建立专案. ? step ...

  7. 双向链表实现简单的list

    双向链表结构: 定义一个如下结构体 struct Node { Object data; Node *next; Node *prev; }; 下面为list的具体实现: #include <i ...

  8. java中间==、equals和hashCode差额

    java于==.equals().hashCode()和比较两个对象. 关于== ==是easy理解的.java设计java就是要比較两个对象是不是同一个对象. 对于引用变量而言.比較的时候两个引用变 ...

  9. 关于js中window.location.href,location.href,parent.location.href,top.location.href的使用方法

    关于js中"window.location.href"."location.href"."parent.location.href".&qu ...

  10. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...