位置: 编程技术 - 正文

Android 图片缓存整理(安卓图片缓存太占空间)

编辑:rootadmin
图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略。今天首先介绍一下本地缓存图片,可参考 首先看一下异步加载缓存本地代码 工具类: publi cclass AsyncBitmapLoader { /** *内存图片软引用缓冲 */ private HashMap<String,SoftReference<Bitmap> >imageCache=null; public AsyncBitmapLoader() { imageCache=new HashMap<String,SoftReference<Bitmap>>(); } public Bitmap loadBitmap(finalImageViewimageView,finalStringimageURL,finalImageCallBackimageCallBack) { //在内存缓存中,则返回Bitmap对象 if(imageCache.containsKey(imageURL)) { SoftReference<Bitmap> reference=imageCache.get(imageURL); Bitmap bitmap=reference.get(); if(bitmap!=null) { returnbitmap; } } else { /** *加上一个对本地缓存的查找 */ String bitmapName=imageURL.substring(imageURL.lastIndexOf("/")&#;1); File cacheDir=newFile("/mnt/sdcard/test/"); File[] cacheFiles=cacheDir.listFiles(); inti=0; if(null!=cacheFiles){ for(;i<cacheFiles.length;i&#;&#;) { if(bitmapName.equals(cacheFiles[i].getName())) { break; } } if(i<cacheFiles.length) { return BitmapFactory.decodeFile("/mnt/sdcard/test/"&#;bitmapName); } } } final Handler handler=new Handler() { /*(non-Javadoc) *@seeandroid.os.Handler#handleMessage(android.os.Message) */ @Override publi cvoid handleMessage(Messagemsg) { //TODOAuto-generatedmethodstub imageCallBack.imageLoad(imageView,(Bitmap)msg.obj); } }; //如果不在内存缓存中,也不在本地(被jvm回收掉),则开启线程下载图片 newThread() { /*(non-Javadoc) *@seejava.lang.Thread#run() */ @Override public void run() { //TODOAuto-generatedmethodstub InputStream bitmapIs=HttpUtils.getStreamFromURL(imageURL); Bitmap bitmap=BitmapFactory.decodeStream(bitmapIs); imageCache.put(imageURL,newSoftReference<Bitmap>(bitmap)); Message msg=handler.obtainMessage(0,bitmap); handler.sendMessage(msg); File dir=newFile("/mnt/sdcard/test/"); if(!dir.exists()) { dir.mkdirs(); } FilebitmapFile=newFile("/mnt/sdcard/test/"&#; imageURL.substring(imageURL.lastIndexOf("/")&#;1)); if(!bitmapFile.exists()) { try { bitmapFile.createNewFile(); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } } FileOutputStreamfos; try { fos=new FileOutputStream(bitmapFile); bitmap.compress(Bitmap.CompressFormat.PNG, ,fos); fos.close(); } catch(FileNotFoundExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } } }.start(); return null; } public interface ImageCallBack { public void imageLoad(ImageViewimageView,Bitmapbitmap); } } 这是一个封装好的异步加载图片类,缓存了两份,一份是使用软引用缓存到内存中,一份是缓存到本地sd卡,如果内存中没有,则从本地查找,如果本地没有则从网络获取图片。 public class HttpUtils{ public static InputStreamgetStreamFromURL(StringimageURL){ InputStream in=null; try{ URLurl=newURL(imageURL); HttpURLConnection connection=(HttpURLConnection)url.openConnection(); in=connection.getInputStream(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnin; }

推荐整理分享Android 图片缓存整理(安卓图片缓存太占空间),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android 图片缓存框架,安卓手机的缓存图片在哪个文件夹,安卓手机相册缓存图片,android 图片缓存框架,android图片缓存机制,android 图片缓存框架,安卓图片缓存太占空间,android 图片缓存框架,内容如对您有帮助,希望把文章链接给更多的朋友!

}

这是一个访问网络获取类。不细说了。

Android 图片缓存整理(安卓图片缓存太占空间)

下面看一下如何使用封装好的异步加载图片的类:

public class ImageCacheActivityextendsActivity{ /**Called when thea ctivity isfirst created.*/ private ListView listview; @Override public void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); listview=(ListView)findViewById(R.id.listView_list); MyAdapter adapter=newMyAdapter(); listview.setAdapter(adapter); } private class MyAdapter extends BaseAdapter{ private AsyncBitmapLoader asyncBitmapLoader; public MyAdapter(){ asyncBitmapLoader=new AsyncBitmapLoader(); } @Override public int getCount(){ //TODOAuto-generatedmethodstub return ; } @Override public Object getItem(intposition){ //TODOAuto-generatedmethodstub return null; } @Override public long getItemId(intposition){ //TODOAuto-generatedmethodstub return 0; } @Override public View getView(intposition,ViewconvertView,ViewGroupparent){ //TODOAuto-generatedmethodstub if(convertView==null){ convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item,null); } ImageView image=(ImageView)convertView.findViewById(R.id.addexam_list_icon); String imageURL=" Bitmap bitmap=asyncBitmapLoader.loadBitmap(image,imageURL,newImageCallBack(){ @Override public void imageLoad(ImageViewimageView,Bitmapbitmap){ //TODOAuto-generatedmethodstub imageView.setImageBitmap(bitmap); } }); if(bitmap==null) { image.setImageResource(R.drawable.ic_launcher); } else { image.setImageBitmap(bitmap); } return convertView; } } } 这样就完成了,网络获取不到bitmap则显示默认图片

androidのEclipse中设置NDK编译设置 androidのEclipse中设置NDK编译build设置1、启动eclipse,我们找到上一篇介绍下载后的ndk安装路径,使用选择hello-jni已经存在的案例;import进去即可,,会出

androidの搭建NDK开发环境 1.下载NDK官网下载页:

(翻译)Bytecode for the Dalvik VM -General Design BytecodefortheDalvikVM-GeneralDesign以下所述的machinemodel和调用约定采用了一般架构和C语言调用约定来表述:Dalvi虚拟机是基于寄存器的,函数帧在创建时有固

标签: 安卓图片缓存太占空间

本文链接地址:https://www.jiuchutong.com/biancheng/374521.html 转载请保留说明!

上一篇:CalledFromWrongThreadException: Only the original thread that created a view

下一篇:androidのEclipse中设置NDK编译设置(嗌中怎么读)

  • 老项目增值税简易计税
  • 计提的增值税
  • 城镇土地使用税的计算公式
  • 什么是进项税额转出
  • 专票现金支付规定
  • 关联交易纳税调整期限
  • 高新企业要求研发投入
  • 未确认融资收益怎么算
  • 机票发票打印有效期多久
  • 提供教育服务免征增值税文件
  • 记账凭证工资表
  • 发出材料汇总表金额怎么算
  • 实收资本借方增加还是减少
  • 商品进销差价是资产类账户,其抵减的账户是
  • 培训费的进项需要转出吗
  • 增值税小规模纳税人申报表填表说明
  • 研发部门的办公费属于研发费的哪个类别
  • 结息的会计分录怎么写
  • 取得走逃失联企业的异常增值税发票如何处理
  • 免征房产税是多少
  • 最终控制方合并报表账面价值
  • 月末库存商品怎么记账
  • 短期借款应付利息列报
  • 生育津贴申请表打印
  • 处理废料会计分录大全
  • 取得经营所得及其他所得交纳的所得税
  • b250主板最好的cpu是哪一款
  • 不确认收入要结转成本吗
  • 如何加强企业应收应付款管理论文
  • 最贵的安卓应用软件
  • 外购商誉是资产吗
  • 暂估纳税调增了账务怎么处理
  • 税控盘维护费全额抵扣分录怎么做
  • 新手会计怎么做帐
  • 参展费会计分录
  • 建筑业预缴的个人所得税怎么在申报表体现
  • vue全家桶学多久能上手项目
  • 购进的样品怎样做账
  • 企业所得税不得核定征收行业
  • 土地作为无形资产入账依据
  • 帝国cms可以做商标吗
  • 回溯法实现全排序的方法
  • 政府补助免征企业所得税条件会计分录
  • 库存商品怎么结转收入
  • 小微企业 附加税
  • 运输费和货款一样吗
  • 补提当年折旧会计分录
  • 财务报销单据粘贴视频
  • 所得税暂缓缴纳本来是不缴纳
  • 收到知识产权服务费入什么科目
  • 预收账款结转收入分录
  • 买车给了上牌费去车管所还用给钱吗
  • 其他应收款包括哪些会计科目
  • 往来款做其他应收还是其他应付
  • 原始凭证的会计分录
  • 正确使用气体钢瓶的原则
  • mysql不能运行
  • win7任务栏功能
  • Mac系统中使用QuickTime Player实现屏幕录像图文教程
  • win8设备管理器在哪里打开
  • windows8.1正版
  • window八
  • win8计算器在哪里找
  • Linux分区详解
  • javascript 浏览器
  • 浅析Javascript ES6中的原生Promise
  • javascript零基础学要学多久
  • python教程100例
  • vue中父子组件如何通信的
  • node.js实战
  • python设计教程
  • javascript教程chm
  • js获取上传文件的大小
  • 1、BluetoothChat之BluetoothChat.java
  • js面向对象是什么意思
  • 全电子发票开具怎么扫脸认证?
  • 山东税务社保费用缴纳
  • 普通发票每个月有限制吗
  • 国家税务总局176号公告
  • 环保标识码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设