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 again and again. And despite the problemhomogeneity, each new project imposes its own specific requirements on thetask.

You may need to organize caching of downloaded images; ifimages are rather large, it is necessary to ensure effective working with thememory to prevent the disastrous mistake OutOfMemoryError . It is also possiblethat
an image-stub has to be showed during the image loading; and maybe thesame image should be displayed in different size variations, etc.

As a result, time and resources are wasted for codeadaptation to specific needs. It is this problem what urged me on creating alibrary with open source code - Universal Image Loader for image loading in anAndroid app.
Its aim is solution universalization of the above describedproblem in a flexible and configurable tool.

Currently, the library can be used everywhere, where youhave to download and display (and possibly even to cache) an image from theInternet or from the file system of your smartphone. Classic examples forpossibility of
ImageLoader using are various lists, tables, galleries, whereyou need to display images from the Web.

上面一大堆话,是说作者为什么做这个项目

现在这个类库可以用在任意地方,例如,你需要从网络上下载和显示图片,或者从手机本地读取。ImageLoader可以用的地方包括各种lists,tables,galleries

The main features of the ImageLoader for Android are:

主要特性包括:

•asynchronous loading and displaying images from the Internet or the SD-card;

从网络或SD卡异步加载和显示图片

• ability ofcaching loaded images in memory and / or the device's file system;

在本地或内存中缓存图片

• ability tomonitor the loading process by means of "listeners"

通过“listener”监视加载的过程

• effectiveworking with the memory while caching images in the memory;

缓存图片至内存时,更加高效的工作

• wideopportunities to customize the tool to fit it to your needs.

高度可定制化

ImageLoader的可选设置项

What can be configured in the ImageLoader?

全局设置:

• themaximum size of images cached in the memory;

在内存中缓存的图片最大尺寸

• timeoutfor connection establishing and image loading;

连接超时时间和图片加载超时时间

• themaximum number of simultaneously working threads for images loading;

加载图片时使用的同时工作线程数量

• threadspriority during downloading and displaying images;

下载和显示图片时的线程优先级

•implementation of disk cache (you can choose from ready-made implementations orcreate your own);

使用已定义本地缓存或自定义

•implementation of cache in the memory (you can choose from ready-madeimplementations or create your own);

使用已定义内存缓存或自定义

• default options of image downloading

图片下载的默认选项

Image loading options (applied to each individual callImageLoader.displayImage(...)) provide the ability to specify:

图片加载选项可以进行以下设置:

• whether todisplay the image-stub in the ImageView, while the real image is being loaded(if yes, then you need to specify this "stub");

当真实图片加载成功以后,是否显示image-stub。(如果是,需要制定stub)

• Whether tocache the downloaded image in the memory.

在内存中是否缓存已下载图片

• Whether tocache the downloaded image in the file system.

在本地是否缓存已下载图片

• Type ofimage decoding (the fastest or the most economical for the memory).

图片解码方式(快速/经济)

As already mentioned, you can implement your own version ofthe disk cache and the cache in memory. But most likely, you will be quitesatisfied with ready solutions, most of which are caches, limited by someparameter (size,
number of files) and having their own logic of self-cleaningby limit excess (FIFO, the oldest object, the largest object, the most seldomused).

如上所述,你可以实现你自己的本地缓存和内存缓存方法,但是通常Jar包中已实现的方法已经可以满足你的需求。例如。。。。。。

There are enough configuration options, but this is not thecase as "the main principle of UNIX": "u can configureEVERYTHING. And you WILL configure everything." :) In theImageLoader
case, you can customize everything, but it is not necessary at all:​​the default configuration is always available and suitable in the most cases.

尽管UIL已经提供了很多设置,但是距离“UNIX的核心精神:你可以配置任何选项,你能够配置任何选项”仍有差距。在UIL中,你可以自定义任何选项,但这并不是必须的,因为通常已经有了默认设置,而且这些设置在大多数情况下都是适用的。

Implementationpeculiarities

特定需求的实现

Few words about the project structure. Each task for image loadingand displaying (and that is, looking ahead, the call ImageLoader.displayImage(imageView, imageUrl)) is performed in a separate thread, except if the pictureis
in cache in the memory - then it is just immediately displayed.here is a separate threads queue where tasks get if theneeded image is cached on the file system. If you do not have the rightimage in the cache, then the
task-thread gets in the thread pool. Therefore,there are no obstacles for a fast displaying of cached images.

简单描述一下这个项目的结构。每一个图片的加载和显示任务都运行在独立的线程中,除非这个图片缓存在内存中,这种情况下图片会立即显示。如果需要的图片缓存在本地,他们会开启一个独立的线程队列。如果在缓存中没有正确的图片,任务线程会从线程池中获取,因此,快速显示缓存图片时不会有明显的障碍。

he algorithm of the taskprocessing isepresented on the scheme:

处理的规则用下图进行简单的描述:

The main actors of the project can relatively be divided:

UIL的主要功能可以分为以下及部分

• the above mentionedqueue and pool of threads;

上面提到的线程队列和线程池

• cache in thememory;

缓存至内存

• disk cache;

缓存至本地

• Image decoder,which decodes image files into Bitmap objects.

图片解析,将图片解析为Bitmap对象

The main class ImageLoadermanages it all; the maininteraction with the user is performed through it.

最重要的类ImageLoader管理了所有的操作,和用户的交互也主要通过该类。

开源项目Universal Image Loader for Android 说明文档 (1) 简介的更多相关文章

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

     When developing applications for Android, one often facesthe problem of displaying some graphical ...

  2. Android开源库--Universal Image Loader通用图片加载器

    如果说我比别人看得更远些,那是因为我站在了巨人的肩上.   github地址:https://github.com/nostra13/Android-Universal-Image-Loader 介绍 ...

  3. Android开源项目 Universal imageloader 源码研究之项目框架

    Universal imageloader 的代码并不复杂 重点是缓存,线程池任务 下面都用UML图进行了绘制 基本使用流程就是 初始化配置,设置Options参数,最后Dispaly提交下载 pub ...

  4. Android开源项目 Universal imageloader 源码研究之Lru算法

    https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...

  5. 【开源项目12】Retrofit – Java(Android) 的REST 接口封装类库

    Retrofit官网:http://square.github.io/retrofit/ Retrofit 和Java领域的ORM概念类似, ORM把结构化数据转换为Java对象,而Retrofit ...

  6. 又一开源项目爆火于GitHub,Android高级插件化强化实战

    一.插件化起源 插件化技术最初源于免安装运行 Apk的想法,这个免安装的 Apk 就可以理解为插件,而支持插件的 app 我们一般叫 宿主. 想必大家都知道,在 Android 系统中,应用是以 Ap ...

  7. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  8. 直接拿来用!最火的Android开源项目(一) (转)

    对于开发者而言,了解当下比较流行的开源项目很是必要.利用这些项目,有时能够让你达到事半功倍的效果.为此,CSDN特整理了GitHub上最受欢迎的Android及iOS开源项目,本文详细介绍了20个An ...

  9. GitHub 优秀的 Android 开源项目(转)

    今天查找资源时看到的一篇文章,总结了很多实用资源,十分感谢原作者分享. 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介 ...

随机推荐

  1. Python:笔记(5)——错误、调试和测试

    Python:笔记(5)——错误.调试和测试 错误处理 1.TRY语句 这个和Java中的语法是及其相似的,catach换成except. 说明:同样,不管有没有错误,fianlly都会执行的! 补充 ...

  2. PHP HTML DOM 解析器 中文手册

    简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册 目录 快速入门 如何创建HTML DOM 对象? 如何查找HTML元素? 如何访问H ...

  3. Spring框架学习之IOC(一)

    Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...

  4. python的垃圾回收机制 继承的顺序C3算法

    Python垃圾回收    -- 引用计数        -- Python为每个对象维护一个引用计数        -- 当引用计数为0的 代表这个对象为垃圾    -- 标记清除        - ...

  5. c#中的控件01

    1.常用控件: 只读文本:TextBlock.文本框:TextBox.按钮:Button 事件:鼠标移到按钮上的时候显示“大爷您来了”,离开 显示“大爷常来”,Click(点击).Loaded(控件加 ...

  6. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...

  7. Parameter Binding in ASP.NET Web API

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding ...

  8. Java中List集合的常用方法

    List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. 这篇文章就不讲继承Collection接口的那些方法了 https://www.cnblo ...

  9. NUnit单元测试笔记

    vs2010 和 NUnit 问题处理. . 在 <configuration> 下 加 ... <startup> <requiredRuntime version=& ...

  10. Java通过JDBC操作Hive

    http://www.cnblogs.com/netbloomy/p/6688670.html 0.概述 使用的都是CLI或者hive –e的方式仅允许使用HiveQL执行查询.更新等操作.然而Hiv ...