android对大图片的缓存处理
废话不多说,直接上代码
package com.huge.emj.common.util; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import com.huge.emj.EApplication; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.drawable.BitmapDrawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log; public class AsyncImageLoader { public static HashMap<String, Bitmap> imageCache = new HashMap<String, Bitmap>();
public static List<String> path_list = new ArrayList<String>();
public String durl = null;
public InputStream dinStream = null; public void loadDrawable(final String imageUrl,
final ImageCallback imageCallback) {
//回调
final Handler handler = new Handler() {
public void handleMessage(Message message) {
imageCallback.imageLoaded((Bitmap) message.obj,
imageUrl);
}
}; synchronized (AsyncImageLoader.this) {
// 如果已经有了这个下载的线程则不启动
if (!path_list.contains(imageUrl)) {
new Thread() {
@Override
public void run() {
Bitmap drawable = null; // 先证明自己抢到了优先下载的权利
path_list.add(imageUrl);
try {
drawable = loadImageFromUrl(imageUrl);
} catch (Exception e) { }
// remove the top from stack
if (path_list.size() > ) {
removeImageCache();
} // store the image url
if (drawable != null) {
imageCache.put(imageUrl,drawable);
}else{
path_list.remove(imageUrl);
} Message message = handler.obtainMessage(, drawable);
handler.sendMessage(message);
}
}.start();
}else{
if(imageCache.get(imageUrl)!=null){
Message message = handler.obtainMessage(, imageCache.get(imageUrl));
handler.sendMessage(message);
}
}
}
} /**
* 删除很久不用的数据
*/
public void removeImageCache() {
try{
Bitmap bmap=imageCache.get(path_list.get());
imageCache.remove(path_list.get());
path_list.remove(); if(bmap!=null){
bmap.recycle();
}
}catch(Exception e){
e.printStackTrace();
Log.i("poe", "AsyncImageLoader 清除缓存图片失败!!!!!!!!!!============》》");
}
} /**
* @param url 本地地址
* @return
*/
private Bitmap loadImageFromUrl(final String url) {
// BitmapDrawable d = null;
Bitmap d = null;
try {
File file=new File(url); long pic_size=file.length(); Options mOptions=getSampleOption(pic_size); d = BitmapFactory.decodeFile(url, mOptions); // dinStream = new FileInputStream(file);
// d = new BitmapDrawable(dinStream);
//判断图片的大小
} catch (Exception e) {
e.printStackTrace();
LogUtil.log(EApplication.mLog, e);
} return d;
} /**
* 单个图片语序的最大值放大到800kB
* @param Size
* @return
*/
private BitmapFactory.Options getSampleOption(long Size){ BitmapFactory.Options option =new Options(); long fileSize=Size/;//kB int scaleParam = ; //200kB以下
if(fileSize<MAX_SINGLE_PICK_SIZE){
scaleParam = ;
}else{
scaleParam=(int) (fileSize/MAX_SINGLE_PICK_SIZE);
} option.inSampleSize=scaleParam; return option;
} public interface ImageCallback {
public void imageLoaded(Bitmap imageDrawable, String imageUrl);
} public static final int MAX_SINGLE_PICK_SIZE=;
}
单个图片我这里是设置了最大值800kB,看需求自行设置即可!
android对大图片的缓存处理的更多相关文章
- android读取大图片并缓存
最近开发电视版的云存储应用,要求”我的相册“模块有全屏预览图片的功能,全屏分辨率是1920*1080超清.UI组件方面采用Gallery+ImageSwitcher组合,这里略过,详情参见google ...
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- Android 显示大图片
主要的代码如下: BitmapFactory.Options options = new BitmapFactory.Options(); //图片解析配置 options.inJustDecodeB ...
- Android调用系统相机、自己定义相机、处理大图片
Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...
- android 应用开发对大图片的处理
一,下载 android下载大图片(例如微博长图片)会出现OOM down掉问题 解决这个问题的办法是下载图片时先得到图片的宽度和高度,如果超出规定限制则对图片进行缩放 关键参数 1. BitmapF ...
- Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片
Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一 ...
- Android相机使用(系统相机、自定义相机、大图片处理)
本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人Surf ...
- android异步加载图片并缓存到本地实现方法
图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片 在android项目中访问网络图片是非常普遍性的事 ...
- Android 图片三级缓存之内存缓存(告别软引用(SoftRefrerence)和弱引用(WeakReference))
因为之前项目同事使用了图片三级缓存,今天整理项目的时候发现同事还是使用了软引用(SoftRefrerence)和弱引用(WeakReference),来管理在内存中的缓存.看到这个我就感觉不对了.脑海 ...
随机推荐
- 关于HTML5标签不兼容(IE6~8)
HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 比较常用的HTML5的新标签元素有: <hea ...
- JDK Tools - jps: JVM 进程状态工具
jps(Java Virtual Machine Process Status Tool) 是 JDK 提供的一个显示当前所有 Java 进程实例的命令. 命令格式 jps [ options ] [ ...
- iis7下.Net框架版本设置
转载:http://blog.163.com/fan_yishan/blog/static/47692213201391651229542/ Win7下IIS网站的.Net框架版本设置 步骤/方法 1 ...
- 通过GitHub部署网站到Azure WebSite
一.将代码上传到GitHub存储库中 第一步:创建Github新账户 第二步:新建仓库 第三步:安装Github shell程序,地址:http://windows.github.com/ 第四步:打 ...
- 崩溃信息:Message from debugger: Terminated due to signal 9
是因为你在调试的时候主动了结束了程度,如上滑结束了程序
- this 关键字
导读 本文将列举C#中this关键字的用途 1.this 含义 2.用this 关键字避免参数与字段的混淆 3.用this关键字串联构造器 4.索引器 6.Visitor 模式 this 含义 C# ...
- NodeJs随心学习(一)之UEditor开源项目部署
作为NodeJs的初学者+6年的码农,我觉得从基础看起太慢了,还是直接上Demo好玩一些. 嗯,直接开玩..今天在GitHub上看到了UEditor之NodeJs版的开源项目激起了我浓厚的兴趣,随后决 ...
- 07_例子讲解:rlCoachKin + rlCoachMdl
RL提供了2个相当简单的基于socket的虚拟化机器人,是socket服务端. rlCoachKin是用于D-H运动链(在rlkin\*xml中定义的). rlCoachMdl相当于任意几何的工具链. ...
- 【JSP&Servlet学习笔记】4.会话管理
Http本身是无状态通信协议,要进行会话管理的基本原理,就是将需要维护的状态回应给浏览器,由浏览器在下次请求时主动发送状态信息,让Web应用程序“得知”请求之间的关联. 隐藏字段是将状态信息以窗体中看 ...
- Linux---文件类型及权限操作
文件类型: 用ls命令查看目录下所属文件时,每行的第一个字母标识着文件对应的文件类型 '-':代表普通文件 'd':代表目录 'c':字符设备文件 'b':块设备文件 's':套接字文件 'l':符号 ...