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
Universal Image Loader
Story, Architecture, FAQ
Sergey Tarasevich@nostra13
Who’s this man?
Sergey Tarasevich (@nostra13)
• Android developer at CactusSoft
• Author of Universal Image Loader
• Certified Java SE 7 Programmer
Story
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
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
Architecture
Modules
ImageLoader
ImageDownloader
ImageDecoder
MemoryCache
DiskCache
API
ImageLoaderConfiguration
DisplayImageOptions
ImageLoader
• displayImage(…)
• loadImage(…)
• loadImageSync(…)
API
• ImageAware
• MemoryCache
• DiskCache
• FileNameGenerator
• ImageDownloader
• ImageDecoder
• BitmapProcessor
• BitmapDisplayer
ImageAware
• getId() : int
• getWidth() : int
• getHeight() : int
• getScaleType() : ViewScaleType
• getWrappedView() : View
• isCollected() : boolean
• setImageDrawable(Drawable drawable) : boolean
• setImageBitmap(Bitmap bitmap) : boolean
Task flow
Disk cache
Memory cache
Weak Strong
Weak&Strong
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+
So…
Why soslow?
No tests?
Singleton?
OutOfMemoryError
OutOfMemoryError
• .bitmapConfig(Bitmap.Config.RGB_565)
• .imageScaleType(ImageScaleType.EXACTLY)
• .threadPoolSize(...) // 1 – 5
• .diskCacheExtraOptions(480, 320, null)
• .cacheInMemory(false)
MemoryAnalyzer
Still OOM
«ImageAware is reused for another image. Task is cancelled[http://…]»
«…[http://v.ad/image.png_666x13]»
_666x13
_666x13
_666x13
“How to display images from JSON!?
Not Constants!”
Alternatives?
UIL vs Picasso
Questions?
Thanks!