Android开源框架:Universal-Image-Loader解析(四)TaskProcess

Universal-Image-Loader中,对Task的处理有两种方法:FIFO,LIFO

在core/assist下的deque包中,其主要是定义了LIFOLinkedBlockingDeque,其他的几个均在java.util和java.util.concurr中

下面我们对queue和deque及其相关的类撸一撸,看看它们的区别

1. Queue:队列, 继承于Collection,定义了几个与队列相关的方法

2. Deque:双向队列,继承于Queue,定义了和双向操作相关的方法

3. BlockingQueue:阻塞队列

4. BlockingDeque:双向阻塞队列

5. AbstractQueue: 实现了队列的几个基本方法,

6. LinkedBlockingQueue:线程安全,阻塞队列,默认长度是Integer.MAX_VALUE

按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。 链接队列的吞吐量通常要高于基于数组的队列。

 1 /**
 2      * Linked list node class,单向的列表
 3      */
 4     static class Node<E> {
 5         E item;
 6         /**
 7          * One of:
 8          * - the real successor Node
 9          * - this Node, meaning the successor is head.next
10          * - null, meaning there is no successor (this is the last node)
11          */
12
13         Node<E> next;
14         Node(E x) { item = x; }
15     }

7. LinkedBlockingDeque:线程安全,双向阻塞队列,其实现主要是基于两个Node,默认长度是Integer.MAX_VALUE

 1 /** Doubly-linked list node class 双向链表*/
 2     static final class Node<E> {
 3         /**
 4          * The item, or null if this node has been removed.
 5          */
 6         E item;
 7
 8         /**
 9          * One of:
10          * - the real predecessor Node
11          * - this Node, meaning the predecessor is tail
12          * - null, meaning there is no predecessor
13          */
14         Node<E> prev;
15
16         /**
17          * One of:
18          * - the real successor Node
19          * - this Node, meaning the successor is head
20          * - null, meaning there is no successor
21          */
22         Node<E> next;
23
24         Node(E x) {
25             item = x;
26         }
27     }
28
29     /**
30      * Pointer to first node.头节点
31      * Invariant: (first == null && last == null) ||
32      *            (first.prev == null && first.item != null)
33      */
34     transient Node<E> first;
35
36     /**
37      * Pointer to last node.尾节点
38      * Invariant: (first == null && last == null) ||
39      *            (last.next == null && last.item != null)
40      */
41     transient Node<E> last;

8. LIFOLinkedBlockingDeque:后进先出,双向阻塞队列,仅仅override两个方法

 1 @Override
 2     public boolean offer(T e) {
 3         return super.offerFirst(e);
 4     }
 5
 6     /**
 7      * Retrieves and removes the first element of this deque. This method differs from {@link #pollFirst pollFirst} only
 8      * in that it throws an exception if this deque is empty.
 9      *
10      * @return the head of this deque
11      * @throws NoSuchElementException
12      *             if this deque is empty
13      */
14     @Override
15     public T remove() {
16         return super.removeFirst();
17     }

阻塞队列的工作原理:一个线程(生产者)放入任务,另外一个线程(消费者)取出任务

上图参考链接:http://www.cnblogs.com/qiengo/archive/2012/12/19/2824971.html

时间: 2024-10-10 10:44:26

Android开源框架:Universal-Image-Loader解析(四)TaskProcess的相关文章

开源项目Universal Image Loader for Android 说明文档 (1) 简介

 When developing applications for Android, one often facesthe problem of displaying some graphical content from the Internet. So, youshould provide image loading from the Web in an Android app, their processingand displaying with limited memory aga

Android开源框架Universal-Image-Loader解析(一)

来自xiaanming的一篇博客:Android开源框架Universal-Image-Loader解析之基本介绍及使用. 相信大家平时做Android应用的时候,多少会接触到异步加载图片,或者加载大量图片的问题,而加载图片我们常常会遇到许多的问题,比如说图片的错乱,OOM等问题,对于新手来说,这些问题解决起来会比较吃力,所以就有很多的开源图片加载框架应运而生,比较著名的就是Universal-Image-Loader,相信很多朋友都听过或者使用过这个强大的图片加载框架,今天这篇文章就是对这个框

Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

本篇文章继续为大家介绍Universal-Image-Loader这个开源的图片加载框架,介绍的是图片缓存策略方面的,如果大家对这个开源框架的使用还不了解,大家可以看看我之前写的一篇文章Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用,我们一般去加载大量的图片的时候,都会做缓存策略,缓存又分为内存缓存和硬盘缓存,我之前也写了几篇异步加载大量图片的文章,使用的内存缓存是LruCache这个类,LRU是Least Recently Used 近

Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读

本篇文章主要是带大家从源码的角度上面去解读这个强大的图片加载框架,自己很久没有写文章了,感觉生疏了许多,距离上一篇文章三个月多了,确实是自己平常忙,换了工作很多东西都要去看去理解,然后加上自己也懒了,没有以前那么有激情了,我感觉这节奏不对,我要继续保持以前的激情,正所谓好记性不如烂笔头,有时候自己也会去翻看下之前写的东西,我觉得知识写下来比在脑海中留存的更久,今天就给大家来读一读这个框架的源码,我感觉这个图片加载框架确实写的很不错,读完代码自己也学到了很多.我希望大家可以先去看下Android

Android开源框架 Android-Universal-Image-Loader

Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性: (1)多线程加载图像(异步或同步): (2)高度可定制化imageloader配置(线程池.图片下载器.解码器.内存和磁盘缓存.显示图像选项等): (3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等): (4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡): (5)监听加载过程(包括下载进度): 下来我们详解如何配置使用Universal-I

android开源框架

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http  项目地址:https://github.com/loopj/android-asy

Android开源框架ViewPageIndicator和ViewPager实现Tab导航

前言: 关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,假设我还在这里写怎样去实现.那简直就是老生常谈,毫无新奇感,并且.我也不觉得自己对ViewPageIndicator的理解会比别人好,毕竟我也是看着大神的帖子.在学习实践着. 那我还写这个有啥意义呢?事实上么,就是想在这里记录下.在使用ViewPageIndicator和ViewPager实现Tab导航时,大家有可能会遇到的坑.这个坑.须要我们开发时尽量去避免的. 啥

常用Android开源框架

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

6个值得推荐的Android开源框架简介(转)

虽然我们在做app的时候并不一定用到框架,但是一些好框架的思想是非常有学习价值的 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项

Android开源框架Afinal第一篇——揭开圣女的面纱

Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在github的地址:https://github.com/yangfuhai/afinal Afinal这个框架主要分4块: 1.FinalDB模块:android中的orm框架,一行代码就可以进行增删改查.支持一对多,多对一等查询. 2.FinalActivity模块:android中的ioc框架