目前很多商业应用都会涉及到从网络上读取图片数据的问题,为了节约用户流量,应用一般会将图片缓存起来。图片缓存一般分为内存缓存和外存缓存。内存缓存运用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;
}
相关推荐
- AVD(Android Virtual Device):Android模拟器,用于在电脑上模拟Android设备进行应用测试。 - Gradle:自动化构建工具,用于管理项目依赖、构建过程等,是Android Studio默认的构建系统。 - ADB(Android Debug ...
在Android应用开发中,用户界面经常需要涉及到图片的选取功能,比如上传头像、选择背景等。本教程将深入探讨如何在Android 7.0系统上实现一个简单的单图片选择功能,通过一个对话框(Dialog)轻松完成。我们将讨论...
Android应用开发环境的搭建是初学者必须经历的第一步,下面将详细解析这五步过程。 第一步:安装JDK JDK(Java Development Kit)是Java编程语言的软件开发工具包,它包含Java运行环境、开发工具和Java基础类库。在...
### 三步搞定:Vue.js调用Android原生操作 #### 概述 在混合开发模式下,将Vue.js与Android结合使用时,有时需要在前端应用中直接调用Android平台提供的原生功能,比如访问设备硬件、系统服务等。本文档详细介绍了...
在Android平台上实现Push推送功能,通常并非易事,尤其是由于GCM(Google Cloud Messaging)在国内的不可用性,开发者们需要寻找其他解决方案。...不过,有了这个快速入门,你已经迈出了Android Push推送的第一步。
第三步,下载并安装Eclipse。Eclipse是一款流行的集成开发环境(IDE),支持多种语言的开发,包括Java和Android。下载最新版本的Eclipse IDE for Java Developers,并按照向导完成安装。 第四步,安装Android SDK。...
"Android应用源码之一个Demo搞定30个控件.zip"这个资源提供了一个实用的示例,通过一个单一的Demo来展示如何有效地使用Android平台中的30种不同控件。下面我们将深入探讨这些知识点。 首先,`JavaApk源码说明.txt`...
简单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 ,离线下载...
Android应用源码之一个Demo搞定30个控件.zip项目安卓应用源码下载Android应用源码之一个Demo搞定30个控件.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
布局+TranslateAnimation搞定.zip项目安卓应用源码下Android应用源码之原来PATH的菜单效果如此简单。布局+TranslateAnimation搞定.zip项目安卓应用源码下 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合...
在Android应用开发中,为用户提供美观的界面是至关重要的,其中用户头像的展示方式就是一个不容忽视的细节。"圆形头像"是一个常见的设计选择,它不仅简洁大方,还能增加应用的视觉吸引力。本篇文章将深入讲解如何在...
3. **使用百分比布局(PercentRelativeLayout/PercentFrameLayout)**:这种布局允许子视图的大小和位置以父视图的百分比来定义,非常适合处理横跨多种屏幕尺寸的应用。 4. **响应式设计(Responsive Design)**:...
5分钟搞定android环境搭建-最新版本 快速搭建 入门迅速
标题"一个控件搞定Android item侧滑删除菜单"和描述中提到的是一种巧妙的方法,通过自定义一个ViewGroup来实现这种效果,而且避免了复杂的冲突处理。 首先,我们来看一下如何创建自定义的ViewGroup。在Android中,...
在Android应用开发中,创建吸引用户的交互界面是至关重要的,其中菜单效果的实现往往能提升应用的用户体验。标题“Android应用源码原来PATH的菜单效果如此简单。布局+TranslateAnimation搞定.zip”揭示了一个使用...