android内置存储器memory和第三方外部存储disk管理
缓存管理这里
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管理的更多相关文章
- Android外部存储
WeTest 导读 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更.我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdc ...
- 彻底了解android中的内部存储与外部存储
我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...
- 彻底理解android中的内部存储与外部存储
我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...
- Android外部存储 - 官方文档解读
预备知识:External Storage Technical Information 摘要: "The WRITE_EXTERNAL_STORAGE permission must onl ...
- 【转】彻底理解android中的内部存储与外部存储
我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...
- android中的内部存储与外部存储
我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...
- Android 外部存储权限分析
不知道你有么有发现.来自菜鸟的成长史:http://blog.csdn.net/zjbpku/article/details/25161131. KitKat之后的版本号不再支持用户对外置SDcard ...
- Android——课堂整理:assets目录和手机外部存储
layout文件: <Button android:layout_width="match_parent" android:layout_height="wrap_ ...
- Android 在外部存储读写文件
本文主要介绍android中如何在外部存储读写数据 sd卡的路径 sdcard:2.3之前的sd卡路径 mnt/sdcard:4.3之前的sd卡路径 storage/sdcard:4.3之后的sd卡路 ...
随机推荐
- UNIX网络编程卷1 server程序设计范式7 预先创建线程,以相互排斥锁上锁方式保护accept
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.预先创建一个线程池.并让每一个线程各自调用 accept 2.用相互排斥锁代替让每一个线 ...
- eclipse 重构(转)
Eclipse中的重构类型 如果你看一下Eclipse的重构菜单,可以看到四部分.第一部分是撤销和重做.其他的三部分包含Eclipse提供的三种类型的重构. 第一种类型的重构改变代码的物 ...
- ACE 主动对象模式的按部就班的实现方法
ACE的主动对象模式的实现 对分布式系统设计来说,ACE提供的主动对象模式是让我们在系统框架构建的时候,回归到传统的单线程编程思维.你可能要问,既然有主动对象,那必然有被动对象,没有错,确实有被动对象 ...
- IntelliJ IDEA常见问题解决办法汇总
(1)SVN相关的操作: 启用:方法1:VCS菜单下Enable Version Control Integration,点击之后选择相应的版本控制工具方法2:Setting中Version Cont ...
- sharepoint 2013 使用powershell更改站点集配额和锁定
打开sharepoint powershell 2013,使用管理员方式打开 逐行输入下面命令: $Admin = new-object Microsoft.SharePoint.Administr ...
- Test SRM Level One: TemperatureScales
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=6038 因为TopCoder SRM比赛使用的编译器进行了升级, ...
- Nubia Z5S 官方4.4 201内測版 内核版本号信息
从egl推断内核的的版本号: OpenGL ES Shader Compiler Version: E031.24.00.14 Build Date: 04/29/14 Tue Local Branc ...
- Reveal:分析iOS UI该武器
Reveal是分析iOS应用UI的利器: Reveal可以在执行时调试和改动iOS应用程序.它能连接到应用程序,并同意开发人员编辑各种用户界面參数.这反过来会马上反应在程序的UI上.就像用FireBu ...
- Qt5该插件机制(2)--QxxxFactory类和QFactoryLoader类别
<<<<<<<<<<<<<<<<<<<<<<<<< ...
- 我收集的sonar参考资料
sonarQube代码质量管理工具环境筹建笔记 http://www.myexception.cn/open-source/1307345.html 配置sonar.jenkins进行持续审查 htt ...