废话不多说,直接上代码

  1. package com.huge.emj.common.util;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.InputStream;
  7. import java.lang.ref.SoftReference;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11.  
  12. import com.huge.emj.EApplication;
  13.  
  14. import android.graphics.Bitmap;
  15. import android.graphics.BitmapFactory;
  16. import android.graphics.BitmapFactory.Options;
  17. import android.graphics.drawable.BitmapDrawable;
  18. import android.os.Handler;
  19. import android.os.Message;
  20. import android.util.Log;
  21.  
  22. public class AsyncImageLoader {
  23.  
  24. public static HashMap<String, Bitmap> imageCache = new HashMap<String, Bitmap>();
  25. public static List<String> path_list = new ArrayList<String>();
  26. public String durl = null;
  27. public InputStream dinStream = null;
  28.  
  29. public void loadDrawable(final String imageUrl,
  30. final ImageCallback imageCallback) {
  31. //回调
  32. final Handler handler = new Handler() {
  33. public void handleMessage(Message message) {
  34. imageCallback.imageLoaded((Bitmap) message.obj,
  35. imageUrl);
  36. }
  37. };
  38.  
  39. synchronized (AsyncImageLoader.this) {
  40. // 如果已经有了这个下载的线程则不启动
  41. if (!path_list.contains(imageUrl)) {
  42. new Thread() {
  43. @Override
  44. public void run() {
  45. Bitmap drawable = null;
  46.  
  47. // 先证明自己抢到了优先下载的权利
  48. path_list.add(imageUrl);
  49. try {
  50. drawable = loadImageFromUrl(imageUrl);
  51. } catch (Exception e) {
  52.  
  53. }
  54. // remove the top from stack
  55. if (path_list.size() > ) {
  56. removeImageCache();
  57. }
  58.  
  59. // store the image url
  60. if (drawable != null) {
  61. imageCache.put(imageUrl,drawable);
  62. }else{
  63. path_list.remove(imageUrl);
  64. }
  65.  
  66. Message message = handler.obtainMessage(, drawable);
  67. handler.sendMessage(message);
  68. }
  69. }.start();
  70. }else{
  71. if(imageCache.get(imageUrl)!=null){
  72. Message message = handler.obtainMessage(, imageCache.get(imageUrl));
  73. handler.sendMessage(message);
  74. }
  75. }
  76. }
  77. }
  78.  
  79. /**
  80. * 删除很久不用的数据
  81. */
  82. public void removeImageCache() {
  83. try{
  84. Bitmap bmap=imageCache.get(path_list.get());
  85. imageCache.remove(path_list.get());
  86. path_list.remove();
  87.  
  88. if(bmap!=null){
  89. bmap.recycle();
  90. }
  91. }catch(Exception e){
  92. e.printStackTrace();
  93. Log.i("poe", "AsyncImageLoader 清除缓存图片失败!!!!!!!!!!============》》");
  94. }
  95. }
  96.  
  97. /**
  98. * @param url 本地地址
  99. * @return
  100. */
  101. private Bitmap loadImageFromUrl(final String url) {
  102. // BitmapDrawable d = null;
  103. Bitmap d = null;
  104. try {
  105. File file=new File(url);
  106.  
  107. long pic_size=file.length();
  108.  
  109. Options mOptions=getSampleOption(pic_size);
  110.  
  111. d = BitmapFactory.decodeFile(url, mOptions);
  112.  
  113. // dinStream = new FileInputStream(file);
  114. // d = new BitmapDrawable(dinStream);
  115. //判断图片的大小
  116. } catch (Exception e) {
  117. e.printStackTrace();
  118. LogUtil.log(EApplication.mLog, e);
  119. }
  120.  
  121. return d;
  122. }
  123.  
  124. /**
  125. * 单个图片语序的最大值放大到800kB
  126. * @param Size
  127. * @return
  128. */
  129. private BitmapFactory.Options getSampleOption(long Size){
  130.  
  131. BitmapFactory.Options option =new Options();
  132.  
  133. long fileSize=Size/;//kB
  134.  
  135. int scaleParam = ;
  136.  
  137. //200kB以下
  138. if(fileSize<MAX_SINGLE_PICK_SIZE){
  139. scaleParam = ;
  140. }else{
  141. scaleParam=(int) (fileSize/MAX_SINGLE_PICK_SIZE);
  142. }
  143.  
  144. option.inSampleSize=scaleParam;
  145.  
  146. return option;
  147. }
  148.  
  149. public interface ImageCallback {
  150. public void imageLoaded(Bitmap imageDrawable, String imageUrl);
  151. }
  152.  
  153. public static final int MAX_SINGLE_PICK_SIZE=;
  154. }

单个图片我这里是设置了最大值800kB,看需求自行设置即可!

android对大图片的缓存处理的更多相关文章

  1. android读取大图片并缓存

    最近开发电视版的云存储应用,要求”我的相册“模块有全屏预览图片的功能,全屏分辨率是1920*1080超清.UI组件方面采用Gallery+ImageSwitcher组合,这里略过,详情参见google ...

  2. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

  3. Android 显示大图片

    主要的代码如下: BitmapFactory.Options options = new BitmapFactory.Options(); //图片解析配置 options.inJustDecodeB ...

  4. Android调用系统相机、自己定义相机、处理大图片

    Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...

  5. android 应用开发对大图片的处理

    一,下载 android下载大图片(例如微博长图片)会出现OOM down掉问题 解决这个问题的办法是下载图片时先得到图片的宽度和高度,如果超出规定限制则对图片进行缩放 关键参数 1. BitmapF ...

  6. Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片

    Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一 ...

  7. Android相机使用(系统相机、自定义相机、大图片处理)

    本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人Surf ...

  8. android异步加载图片并缓存到本地实现方法

    图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片     在android项目中访问网络图片是非常普遍性的事 ...

  9. Android 图片三级缓存之内存缓存(告别软引用(SoftRefrerence)和弱引用(WeakReference))

    因为之前项目同事使用了图片三级缓存,今天整理项目的时候发现同事还是使用了软引用(SoftRefrerence)和弱引用(WeakReference),来管理在内存中的缓存.看到这个我就感觉不对了.脑海 ...

随机推荐

  1. SQL语句打印四个方向的9 9 乘法表

    declare @i int ,@j int ,@s nvarchar(max) set @i = 1 while @i <=9 begin set @s = ' ' set @j = 1 wh ...

  2. dede-搜索

    <form name="formsearch" action="{dede:global.cfg_cmsurl/}/plus/search.php"> ...

  3. .Net程序跑在Linux上

    .Net越来越拥抱开源了,今天就试了如何让.Net程序跑在Linux上,果然再无人可以阻挡.Net的脚步了. Linux Disibutaion:Open Logic 7.2 1.Install .N ...

  4. 自定义控件ViewPagae<

    学习知识点 onTouch事件传递机制. Lisenter监听 ImageView的src background scaleType不同属性的显示情况. onTouch滑动抬起调用的MotionEve ...

  5. Android之Http网络编程(一)

    Android应用作为一个客户端程序绝大部分都是需要进行网络请求和访问的,而http通信是一种比较常见并常用的通信方式. 在Android中http网络编程中有两种实现方式,一种是使用HttpURLC ...

  6. C#之装箱和拆箱

    在实际编码过程中,有时候会出现装箱和拆箱操作.下面就类分别认识一下: 需要注意的是,类型转换和这个是不同的.Convert方法并没有发生装箱和拆箱操作,而是类型转换,包括int.parse等等. 装箱 ...

  7. string[] 和 arraylist互转及问题解决

    1,String 数组转成 list<String> String[] s={"1","2","3","5" ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 4)

    12天学好C语言--记录我的C语言学习之路 Day 4: 首先来看一段程序: //输出下面4*5的矩阵 /* 1  2  3   4   5 2  4  6   8   10 3  6  9   12 ...

  10. CentOS配置java运行环境

    CentOS_配置_docker CentOS_6.5 1.CentOS_6.5在安装docker-io之前需要首先卸载docker包(没下载过可以省略) $ sudo yum -y remove d ...