universal image loader: story, architecture, faq
DESCRIPTION
Presentation of Android library - Universal Image Loader. Presented on: - MobileOptimized 2014 conference in Minsk, Belarus (29.06.2014) - Mobilization 4 conference in Lodz, Poland (18.10.2014)TRANSCRIPT
![Page 1: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/1.jpg)
Universal Image Loader
Story, Architecture, FAQ
Sergey Tarasevich@nostra13
![Page 2: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/2.jpg)
Who’s this man?
Sergey Tarasevich (@nostra13)
• Android developer at CactusSoft
• Author of Universal Image Loader
• Certified Java SE 7 Programmer
![Page 3: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/3.jpg)
Story
![Page 4: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/4.jpg)
Chronology
27.11.2011 – First commit on GitHub
08.12.2011 – Article on Habrahabr.ru
09.02.2012 – Versioning
19.01.2013 – Mavenizing
03.2013 – 1000
07.2013 – 2000
10.2013 – 3000
03.2014 – 4000
06.2014 – 5000
10.2014 – 6000
![Page 5: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/5.jpg)
Statistics
#1 Android image loading lib on GitHub
#3 Android lib on GitHub
#5 Java repo on GitHub
#27 Android lib (appbrain.com)– 3.09% of installs
![Page 6: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/6.jpg)
Architecture
![Page 7: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/7.jpg)
Modules
ImageLoader
ImageDownloader
ImageDecoder
MemoryCache
DiskCache
![Page 8: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/8.jpg)
API
ImageLoaderConfiguration
DisplayImageOptions
ImageLoader
• displayImage(…)
• loadImage(…)
• loadImageSync(…)
![Page 9: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/9.jpg)
API
• ImageAware
• MemoryCache
• DiskCache
• FileNameGenerator
• ImageDownloader
• ImageDecoder
• BitmapProcessor
• BitmapDisplayer
![Page 10: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/10.jpg)
ImageAware
• getId() : int
• getWidth() : int
• getHeight() : int
• getScaleType() : ViewScaleType
• getWrappedView() : View
• isCollected() : boolean
• setImageDrawable(Drawable drawable) : boolean
• setImageBitmap(Bitmap bitmap) : boolean
![Page 11: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/11.jpg)
Task flow
![Page 12: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/12.jpg)
Disk cache
![Page 13: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/13.jpg)
Memory cache
Weak Strong
Weak&Strong
![Page 14: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/14.jpg)
ImageScaleType
Source image size: 4000x3000
Target view size: 280x280
ImageScaleType Result bmp size
NONE 4000x3000
NONE_SAFE 2000x1500 /2
IN_SAMPLE_POWER_OF_2 500x375 /8 (2³)
IN_SAMPLE_INT 400x300 /10
EXACTLY 374x280 /10+
EXACTLY_STRETCHED 374x280 /10+
![Page 15: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/15.jpg)
So…
![Page 16: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/16.jpg)
Why soslow?
![Page 17: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/17.jpg)
No tests?
![Page 18: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/18.jpg)
Singleton?
![Page 19: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/19.jpg)
OutOfMemoryError
![Page 20: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/20.jpg)
OutOfMemoryError
• .bitmapConfig(Bitmap.Config.RGB_565)
• .imageScaleType(ImageScaleType.EXACTLY)
• .threadPoolSize(...) // 1 – 5
• .diskCacheExtraOptions(480, 320, null)
• .cacheInMemory(false)
MemoryAnalyzer
Still OOM
![Page 21: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/21.jpg)
«ImageAware is reused for another image. Task is cancelled[http://…]»
![Page 22: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/22.jpg)
«…[http://v.ad/image.png_666x13]»
_666x13
_666x13
_666x13
![Page 23: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/23.jpg)
“How to display images from JSON!?
Not Constants!”
![Page 24: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/24.jpg)
Alternatives?
![Page 25: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/25.jpg)
UIL vs Picasso
![Page 26: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/26.jpg)
Questions?
![Page 27: Universal Image Loader: Story, Architecture, FAQ](https://reader034.vdocument.in/reader034/viewer/2022052601/559880cf1a28abca408b459b/html5/thumbnails/27.jpg)
Thanks!