当前位置: 编程技术>移动开发
android异步加载图片并缓存到本地实现方法
来源: 互联网 发布时间:2014-10-12
本文导语: 在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢出。针对上面遇到的两个问题,首...
在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢出。针对上面遇到的两个问题,首先耗费流量我们可以将图片第一次加载上面缓存到本地,以后如果本地有就直接从本地加载。图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略。今天首先介绍一下本地缓存图片。
首先看一下异步加载缓存本地代码:
publicclassAsyncBitmapLoader
{
/**
*内存图片软引用缓冲
*/
privateHashMapimageCache=null;
publicAsyncBitmapLoader()
{
imageCache=newHashMap();
}
publicBitmaploadBitmap(finalImageViewimageView,finalStringimageURL,finalImageCallBackimageCallBack)
{
//在内存缓存中,则返回Bitmap对象
if(imageCache.containsKey(imageURL))
{
SoftReferencereference=imageCache.get(imageURL);
Bitmapbitmap=reference.get();
if(bitmap!=null)
{
returnbitmap;
}
}
else
{
/**
*加上一个对本地缓存的查找
*/
StringbitmapName=imageURL.substring(imageURL.lastIndexOf("/")+1);
FilecacheDir=newFile("/mnt/sdcard/test/");
File[]cacheFiles=cacheDir.listFiles();
inti=0;
if(null!=cacheFiles){
for(;i
首先看一下异步加载缓存本地代码:
代码如下:
publicclassAsyncBitmapLoader
{
/**
*内存图片软引用缓冲
*/
privateHashMapimageCache=null;
publicAsyncBitmapLoader()
{
imageCache=newHashMap();
}
publicBitmaploadBitmap(finalImageViewimageView,finalStringimageURL,finalImageCallBackimageCallBack)
{
//在内存缓存中,则返回Bitmap对象
if(imageCache.containsKey(imageURL))
{
SoftReferencereference=imageCache.get(imageURL);
Bitmapbitmap=reference.get();
if(bitmap!=null)
{
returnbitmap;
}
}
else
{
/**
*加上一个对本地缓存的查找
*/
StringbitmapName=imageURL.substring(imageURL.lastIndexOf("/")+1);
FilecacheDir=newFile("/mnt/sdcard/test/");
File[]cacheFiles=cacheDir.listFiles();
inti=0;
if(null!=cacheFiles){
for(;i