分析com.nostra13.universalimageloader

ImageLoaderConfiguration类

这个类主要说一下build()方法里面的initEmptyFiledsWithDefaultValues()方法

这里面主要确定了两件事

1.线程池中的队列用的是QueueProcessingType中的先进先出FIFO还是后进先出LIFO见DefaultConfigurationFactory

/**
  * 创建线程池
  *
  * @param @param threadPoolSize 线程池大小
  * @param @param threadPriority 线程优先级
  * @param @param tasksProcessingType 图片下载和显示的工作队列排序
  * @param @return
  * @return Executor
  */
 public static Executor createExecutor(int threadPoolSize,
   int threadPriority, QueueProcessingType tasksProcessingType) {
  boolean lifo = tasksProcessingType == QueueProcessingType.LIFO;// 后进先出法
  BlockingQueue<Runnable> taskQueue = lifo ? new LIFOLinkedBlockingDeque<Runnable>()
    : new LinkedBlockingQueue<Runnable>();
  // 线程池维护线程的最少数量
  // 线程池维护线程的最大数量
  // 线程池维护线程所允许的空闲时间
  // 线程池维护线程所允许的空闲时间的单位
  // 线程池所使用的缓冲队列
  // 线程池对拒绝任务的处理策略,默认值ThreadPoolExecutor.AbortPolicy()
  return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0L,
    TimeUnit.MILLISECONDS, taskQueue,
    createThreadFactory(threadPriority));
 }

一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个 Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。

当一个任务通过execute(Runnable)方法欲添加到线程池时:

如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

另外就是暂停线程用到了AtomicBoolean 它的好处就是boolean值在变化的时候不允许这间插入保持操作的原子性

2.缓存用的是LRU(最少使用的页面置换算法)见LruMemoryCache

ImageLoader类

displayImage方法 相对简单没什么好说的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值