目前很多商业应用都会涉及到从网络上读取图片数据的问题,为了节约用户流量,应用一般会将图片缓存起来。图片缓存一般分为内存缓存和外存缓存。内存缓存运用java的 缓存机制,在程序完全退出后,缓存所在的内存空间可能被其它应用程序占用从而丢失。外存缓存一般放在程序特有的访问空间或者sd卡中,在sd卡中存放的资 源为公有资源,其它程序也可以访问,且对用户来讲没有一个强制清除缓存的规范机制。综合以上,本文采用将缓存图片放置在程序的特有空间中, 其它应用程序无法访问,且用户可以在应用程序管理中的"清除数据"选项中清除缓存。
本文提供三种缓存策略:(1)LRU算法,固定缓存图片数量(max_num),当图片数量超出max_num时,将缓存中最近用的最少的图片删除。 (2)FTU算法,固定每张图片的缓存时限,以最后一次使用算起,超过时限后删除。(3)FMU算法,在存储器中固定一定大小的存储空间,超过固定空间后 将缓存中占用最大尺寸的图片删除。使用时只需要向方法体中传递图片的URL即可。
使用方法:
1.导入jar;
2. 获取服务;
3.提交url,交给程序去判断是否下载。
public class ImagecachetacticsdemoActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item);
/*FMU*/
imageCacheManager = ImageCacheManager.getImageCacheService(this,
ImageCacheManager.MODE_FIXED_MEMORY_USED, "memory");
imageCacheManager.setMax_Memory(1024 * 1024);
/*FTU*/
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_FIXED_TIMED_USED, "time");
// imageCacheManager.setDelay_millisecond(3 * 60 * 1000);
/*LRU*/
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_LEAST_RECENTLY_USED, "num");
// imageCacheManager.setMax_num(5);
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_NO_CACHE_USED, "nocache");
mImageView = (ImageView) findViewById(R.id.imageView);
new DownloadTask()
.execute("http://www.touxiang99.com/uploads/allimg/110417/1_110417112640_2.jpg");
}
private class DownloadTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
try {
return imageCacheManager.downlaodImage(new URL(params[0]));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
mImageView.setImageResource(R.drawable.ic_launcher);
super.onPreExecute();
}
}
private ImageView mImageView;
private ImageCacheManager imageCacheManager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item);
/*FMU*/
imageCacheManager = ImageCacheManager.getImageCacheService(this,
ImageCacheManager.MODE_FIXED_MEMORY_USED, "memory");
imageCacheManager.setMax_Memory(1024 * 1024);
/*FTU*/
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_FIXED_TIMED_USED, "time");
// imageCacheManager.setDelay_millisecond(3 * 60 * 1000);
/*LRU*/
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_LEAST_RECENTLY_USED, "num");
// imageCacheManager.setMax_num(5);
// imageCacheManager = ImageCacheManager.getImageCacheService(this,
// ImageCacheManager.MODE_NO_CACHE_USED, "nocache");
mImageView = (ImageView) findViewById(R.id.imageView);
new DownloadTask()
.execute("http://www.touxiang99.com/uploads/allimg/110417/1_110417112640_2.jpg");
}
private class DownloadTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
try {
return imageCacheManager.downlaodImage(new URL(params[0]));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
mImageView.setImageResource(R.drawable.ic_launcher);
super.onPreExecute();
}
}
private ImageView mImageView;
private ImageCacheManager imageCacheManager;
}
相关推荐
五步搞定Android开发环境部 第一步:安装JDK。 第二步:配置Windows上JDK的变量环境 。 第三步:下载安装Eclipse 。 第四步:下载安装Android SDK 。 第五步:为Eclipse安装ADT插件。
Android应用开发基础!轻松搞定android,做自己喜欢的app
五步搞定Android开发环境部署 第一步:安装JDK。 第二步:配置Windows上JDK的变量环境 。 第三步:下载安装Eclipse 。 第四步:下载安装Android SDK 。 第五步:为Eclipse安装ADT插件。
【Android实例】《3 分钟搞定 Android Push》 一步一步教材
Android应用源码之一个Demo搞定30个控件.zip
仅5步搞定Android开发环境部署,这篇文章主要为大家详细介绍了Android开发环境搭建教程,感兴趣的小伙伴们可以参考一下
搞定Android开发圆形头像,roundediamgeview的使用
Android应用源码之一个Demo搞定30个控件.zip项目安卓应用源码下载Android应用源码之一个Demo搞定30个控件.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
简单1步搞定 NET Framework 3.5 ,离线下载简单1步搞定 NET Framework 3.5 ,离线下载简单1步搞定 NET Framework 3.5 ,离线下载简单1步搞定 NET Framework 3.5 ,离线下载简单1步搞定 NET Framework 3.5 ,离线下载...
布局+TranslateAnimation搞定.zip项目安卓应用源码下Android应用源码之原来PATH的菜单效果如此简单。布局+TranslateAnimation搞定.zip项目安卓应用源码下 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合...
5分钟搞定android环境搭建-最新版本 快速搭建 入门迅速
Android 7.0单图片选择,只需传入请求码,是否裁剪,以及图片的imageView即可显示,并获取到图片的本地路径
【Android自定义ViewGroup】不一样的轮子,巧用类变量解决冲突,像IOS那样简单的使用侧滑删除,一个控件搞定Android item侧滑删除菜单。
批量水印软件,轻松三步搞定批量图片. 1、设置水印的文字或图片。 2、打开需要添加水印图片的文件夹 3、批量添加水印。
Android 应用缓存很常见,大多数应用都在使用DiskLruCache缓存技术,也有很多人介绍过DiskLruCache,一次我在这里就不介绍了。 DiskLruCache用起来不难,但是如果不加以封装的话,你会遇到各种open呀各种方法的组合...
两行代码搞定Android视图扩散切换效果~.zip,查看Android的Spread TranslationController。
中英双语菜单的设置三步搞定中英双语菜单的设置三步搞定