- Introduced
ImageScaleType.NONE_SAFE
- Video thumbnails support (
content://...
) - Animated drawables support (for
.showImageOnLoading()
,.showImageOnFail()
,.showImageForEmptyUri()
) - Fixed bugs:
loadImageSync(...)
bug (#636)- NPE if no free space while init disk cache
- "Bitmap too large ..." for all ImageScaleTypes
- contacts photo considering
- New Disk cache API (preparing renaming
disc
->disk
) - ImageLoader can be called out of the Main thread. Callback will be delivered on separate thread.
- Prevented broken image files (#511)
- Interrupt non-actual tasks
LruDiscCache
is default limited cache- Renaming:
ImageNonViewAware
->NonViewAware
. ExtractedViewAware
fromImageViewAware
. - Introduced
DiskCache
andMemoryCache
interfaces instead of deprecatedDiscCacheAware
andMemoryCacheAware
. - Removed
LimitedDiscCache
,TotalSizeLimitedDiscCache
,FileCountLimitedDiscCache
. UseLruDisckCache
instead.
- Changed API:
BitmapDisplayer.display(...) : Bitmap
->BitmapDisplayer.display(...) : void
- New API:
- Added possibility to listen image loading progress by listener -
ImageLoadingProgressListener
- Added possibility to listen image loading progress by listener -
- Non-actual downloads are interrupted (if loaded less than 75%)
- Re-designed
RoundedBitmapDisplayer
. AddedRoundedVignetteBitmapDisplayer
. NOTE: NewRoundedBitmapDisplayer
's behaviour can vary from old one. Also consider "RoundedImageView" project for usage if newRoundedBitmapDisplayer
doesn't work for you. - Maximum GL texture size is considered while decode images (#281)
loadImage(...)
call cancels previous task for the same image URI (#475)- Fixed StrictMode warning
Explicit termination method 'close' not called
(#482) LruMemoryCache
is default memory cache for Android < 2.3 too.
- Changed API:
BitmapDisplayer.display(..., ImageView, ...)
->BitmapDisplayer.display(..., ImageAware, ...)
- New API:
ImageAware
ImageLoader.displayImage(..., ImageAware, ...)
ImageLoader.loadImageSync(...) : Bitmap
for synchronous loading of imageDisplayImageOptions.considerExifParams(boolean)
DisplayImageOptions.showImageOnLoading(...)
(instead of.showStubImage(...)
)
ImageLoader
can process any view (or any other object) which implementsImageAware
interface. E.g.ImageViewAware
is adapter ofImageView
forImageAware
- EXIF parameters of image are not considered by default anymore. Use new API to enable it.
- Optimized image loading (prevented double-request on image loading, reuse existing stream)
- Fixed bugs:
- Changed API:
ImageLoaderConfiguration.enableLogging()
->ImageLoaderConfiguration.writeDebugLogs()
- Fixed memory leak (#263)
- Added the bug of
loadImage(...)
method (onLoadingCancelled()
is fired always) :)
- Changed API:
ImageLoaderConfiguration.discCacheExtraOptions(...)
->ImageLoaderConfiguration.discCacheExtraOptions(..., BitmapProcessor)
(#314) - New API:
- Added
LoadedFrom
flag toBitmapDisplayer.display(..., LoadedFrom)
about image source (#149, #239) - Added
L.disableLogging()
andL.enableLogging()
to off/on logs completely (#270) - Prevent image decoding if image is reused (#247)
- Not set cache dir on SD card if no appropriate permission (#311)
- Increased buffer size for image downloads (8 KB -> 32 KB) (#249)
- Fixed bugs:
- Prevent recycling of cached in memory images (#259)
- ConcurrentModificationException in
LruMemoryCache
(#265) - File counting if cached files disappeared
LimitedDiscCache
(#316) - NPE for ImageView without LayoutParams (#272)
- NPE in
LoadAndDisplayImageTask
(#271) - NPE in ImageLoaderEngine (#301)
- RoundedBitmapDisplayer doesn't display round corner correctly for CENTER_CROP (#315)
- Travis CI, added Unit tests (#189)
- New API:
DisplayImageOptions.handler(Handler)
(#231) - Fixed bugs:
- Improved work with Strings on UI thread (#244)
- Android 2.0+ support
- Added EXIF orientation support (#172)
- New API:
ImageLoaderConfiguration.imageDecoder(ImageDecoder)
DisplayImageOptions.decodingOptions(BitmapFactory.Options)
- Handled disc cache non-availability
- Use
LruMemoryCache
as default memory cache for API >= 9,LRULimitedMemoryCache
- for API < 9. Default memory cache size - 1/8 of available app memory. - Improved
LimitedDiscCache
andFuzzyKeyMemoryCache
performance - Fixed bugs:
.denyCacheImageMultipleSizesInMemory
doesn't work if own memory cache is setjava.lang.NoSuchMethodError
in sample app (#206)
- Changed API:
ImageDownloader.getStream***(URI, ...)
->ImageDownloader.getStream***(String, ...)
- Made
FailReason
as a class instead of enum. Can be used in switches:FailReason.getType()
- Removed
ImageLoader.offOutOfMemoryHandling()
. ImageLoader doesn't handle OutOfMemoryError by default anymore (but still catches it for callbacks).
- New API:
ImageLoader.taskExecutor(Executor)
andImageLoader.taskExecutorForCachedImages(Executor)
(#187)ImageLoader.destroy()
- Handled SD card unmount (#170)
- Added
Scheme
class - Fixed bugs:
- Changed API:
ImageLoader.denyNetworkDownloads()
->ImageLoader.denyNetworkDownloads(true)
ImageLoader.allowNetworkDownloads()
->ImageLoader.denyNetworkDownloads(false)
- New API:
ImageLoader.denyNetworkDownloads(boolean)
ImageLoader.handleSlowNetwork(boolean)
.FlushedInsputStream
isn't used for downloads by default.
- Handled HTTP(S) redirects
- Added
LruMemoryCache
(based on Android's LruCache), uses only strong references. - Fixed
DisplayImageOptions.cloneFrom(...)
(#173) - Fixed ConcurrentModification issue in
MemoryCacheUtil. findCacheKeysForImageUri(...)
(#174) - Fixed issue "Disc Cache can't find image by URI with special/local UTF-8 characters"
- Improved calculation of target image size to scale (consider measured View width and height)
- Changed API:
- Signatures:
ImageLoader.loadImage(Context, ...)
->ImageLoader.loadImage(...)
ImageDownloader.getStream(URI)
->ImageDownloader.getStream(URI, Object)
(#150)ImageLoadingListener.onLoading***(...)
->ImageLoadingListener.onLoading***(String, View, ...)
(#130)- Constructor
PauseOnScrollListener(...)
->PauseOnScrollListener(ImageLoader, ...)
ImageDownloader
became interface,URLConnectionImageDownloader
+ExtendedImageDownloader
->BaseImageDownloader
- Renaming:
FileUtil
->IoUtil
- Removed deprecated
ImageScaleType.POWER_OF_2
andImageScaleType.EXACT
- Signatures:
- Support of "content://", "assets://", "drawable://" URI schemes out of the box (#162)
- New API:
DisplayImageOptions.showImageOnFail(int)
DisplayImageOptions.preProcessor(BitmapProcessor)
andDisplayImageOptions.postProcessor(BitmapProcessor)
(#151)DisplayImageOptions.extraForDownloader(Object)
, allows to pass auxiliary object which will be passed toImageDownloader.getStream(URI, Object)
(#150)ImageLoader.denyNetworkDownloads()
andImageLoader.allowNetworkDownloads()
(#148)FailReason.UNSUPPORTED_URI_SCHEME
andFailReason.NETWORK_DENIED
ImageScaleType.NONE
- Added
DiscCacheUtil
- Prepared ImageLoader to be extandable for creation of multiple instances (#158)
- Fixed bug "Images aren't loaded after "Clear Cache" in app info" (#168)
- Switched to Apache 2.0 license
- Avoid I/O operations on the main thread, prevented ANR (#129, #154)
- Correctly handled every ImageView's scale type in
RoundedBitmapDisplayer
(#70) - Prevented slow precaching modified date in LimitedAgeDiscCache constructor (for large number of images in cache) (#141)
- New API:
ImageLoader.isInited()
method. Throw IllegalStateException ondisplayImage(...)
,loadImage(...)
,getMemoryCache()
,clearMemoryCache()
,getDiscCache()
,clearDiscCache()
calls if ImageLoader isn't inited with config. - Closed OutputStream after Bitmap compressing (#115)
- Sample: Refactored resources
- Maven support
- New API:
- Prevented consuming of lot of memory by cacheKeysForImageViews (#108)
- New API:
- Added
FadeInBitmapDisplayer
- Prevented recycling of using Bitmap (#101)
- New API:
ImageLoaderConfiguration.tasksProcessingOrder(QueueProcessingType)
(#89) - Added
MemoryCacheUtil
for work with memory cache - Fixed calculation of size the original image is needed scale to (#93)
- Allowed to create multiple
ImageLoader
instances (#92)
- Prevented showing wrong bitmap in reused view (#85)
- Fixed bug "double displaying" if image is cached in memory
- Prevented "MissingFormatWidthException" (#88)
- Changed API: Renaming:
ImageScaleType.POWER_OF_2
->IN_SAMPLE_POWER_OF_2
ImageScaleType.EXACT
->IN_SAMPLE_INT
- New API:
ImageScaleType.EXACTLY
andImageScaleType.EXACTLY_STRETCHED
- Prevented
ImageLoadingListener
callbacks firing and displaying image in view after ImageLoader was stopped - Fixed bug of calculation of original image scale for decoding
- New API:
ImageLoader.loadImage(...)
which loads image, decodes it to Bitmap and returns Bitmap in callback (#51) - Avoided unnecessary image downloads (#44)
- Changed API: Changed
FileNameGenerator
to interface (instead of abstract class) - New API:
BitmapDisplayer
andDisplayImageOptions.displayer(...)
- Multithread displaying of cached images (instead of single-thread)
- Correctly handle UTF-8 symbols and spaces in image URL (#31)
- Changed API:
- Removed
DisplayImageOptions.transform()
- Changed
FileNameGenerator
to abstract class (instead of interface)
- Removed
- Fire
ImageLoadingListener
callbacks if image URI is null