Android使用LruCache,DiskLruCache结合线程池打造类似(ImageLoader)图片加载器

    虽然进行移动开发已经好几年了(主要是android和ios)  也时常到csdn瞻仰牛人的技术文章 但由于比较懒所以很少写博客 这段时间比较充裕 所以来csdn时间就多了点 让我写这篇文章的机缘是 http://blog.csdn.net/lmj623565791/article/details/38476887 这篇文章(这是个牛人 大家有时间可以多去他的博客看看) 里面实现了图片加载器 但缺少磁盘缓存和网络加载 在加之最近也面试了一些android和ios开发者 感觉一些开发者虽然对一些第三方框架使用熟悉 但问及原理 大多一知半解  所以今天我就结合前面那篇文章的实现 实现一个类似于ImageLoader的图片加载器(android的实现 非ios ios其实大同小异 相通的) 写得不好 还请包涵

  实现ImageLoader 首先我们需要了解以下一些概念  

   1.移动设备对图片是非常敏感的 (android/ios都一样 一旦图片内存超出应用支持量的话 一样崩掉)

   2.无论android还是ios更新Ui的操作都只能在UI线程 但是我们又不能把加载图片这样繁重耗时的任务放到ui线程执行 所以就涉及多线程操作和线程间的通信问题

   3.图片加载缓存机制 目前主流的是 3级加载  它们的优先级分别如下  内存加载 > 磁盘加载 > 网络加载 

     也就是说如果实现了3级加载的话 那么首先加载器会从 内存中加载  如果内存没加载到 那么从磁盘缓存加载 如果磁盘缓存也加载不到 说明了该移动设备上的app第一次访问该图片地址  所以只能从网络加载 

  通过以上的几个概念我们知道  

   首先我门需要两个缓存器实现 分别是内存缓存和磁盘缓存 (本文使用LruCache作为内存缓存 DiskLruCache作为磁盘缓存) 

   其次我们需要把加载图片的操作放到多线程中 (无论是磁盘缓存的IO操作还是网络请求加载 本文连内存缓存加载也放到了多线程中)  

   再次线程间通信 (在移动设备中主要指UI线程和非UI线程的通信)  android主要是用handler机制实现线程通信 (其实是线程通过维护一个队列来实现通信)

    以上就是实现的关键 

    源码我就不贴了 我把它上传到了csdn上了 源码里面有非常详细的实现注释 (我这个人比较懒 还请保函啊)

    图片加载器只实现了核心功能  

    图片加载器在 com.imageloader 包下 图片加载器为MyImageLoader这个类 实现也借鉴了 http://blog.csdn.net/lmj623565791/article/details/38476887该文作者的一些实现 在此声明 下 

      点击打开链接


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值