zoukankan      html  css  js  c++  java
  • ListView 中如何优化图片?

    图片的优化策略比较多。
    1、处理图片的方式:
    如果 ListView 中自定义的 Item 中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是
    ListView 项中最头疼的,处理图片的方法大致有以下几种:
    ①、不要直接拿路径就去循环 BitmapFactory.decodeFile;使用 Options 保存图片大小、不要加载图片到
    内存去。
    ②、对图片一定要经过边界压缩尤其是比较大的图片,如果你的图片是后台服务器处理好的那就不需要了
    ③、在 ListView 中取图片时也不要直接拿个路径去取图片,而是以 WeakReference(使用 WeakReference 代
    替强引用。比如可以使用 WeakReference mContextRef)、SoftReference、WeakHashMap 等的来存储图片信息。
    ④、在 getView 中做图片转换时,产生的中间变量一定及时释放
    2、异步加载图片基本思想:
    1)、 先从内存缓存中获取图片显示(内存缓冲)
    2)、获取不到的话从 SD 卡里获取(SD 卡缓冲)
    3)、都获取不到的话从网络下载图片并保存到 SD 卡同时加入内存并显示(视情况看是否要显示)
    原理:
    优化一:先从内存中加载,没有则开启线程从 SD 卡或网络中获取,这里注意从 SD 卡获取图片是放在子线程里执
    行的,否则快速滑屏的话会不够流畅。
    优化二:于此同时,在 adapter 里有个 busy 变量,表示 listview 是否处于滑动状态,如果是滑动状态则仅从内
    存中获取图片,没有的话无需再开启线程去外存或网络获取图片。
    优化三:ImageLoader 里的线程使用了线程池,从而避免了过多线程频繁创建和销毁,如果每次总是 new 一个
    线程去执行这是非常不可取的,好一点的用的 AsyncTask 类,其实内部也是用到了线程池。在从网络获取图片时,先
    是将其保存到 sd 卡,然后再加载到内存,这么做的好处是在加载到内存时可以做个压缩处理,以减少图片所占内存。

  • 相关阅读:
    心态--编程+成长
    【Oracle】容易犯的错误和技巧集合
    【WPF】DataGrid的Row样式设置
    【WPF】给TextBox添上Label
    【Oracle】异常信息的加工处理
    【.Net 】Json和Xml解析
    【Win32 API】利用SendMessage实现winform与wpf之间的消息传递
    【WCF】利用WCF实现上传下载文件服务
    【Oracle】实现Oracle数据库对象的一键升级
    感触
  • 原文地址:https://www.cnblogs.com/loaderman/p/6525357.html
Copyright © 2011-2022 走看看