Skip to content

Glide 3.4.0

Compare
Choose a tag to compare
@sjudd sjudd released this 07 Nov 17:20
· 2034 commits to master since this release

Glide 3.4 is an incremental release containing a number of new features and bugfixes. Animated GIFs were a significant focus of this release. We've substantially increased the number of GIFs that can be decoded successfully by our GifDecoder and fixed a variety of smaller issues with rendering and in our decoding pipeline in older versions of Android.

You can also see a complete list of issues in the corresponding milestone.

Features

  • Allow RequestBuilders to be re-used for multiple loads by introducing the .from() and .clone() APIs. These APIs allow users to set options on a request builder once, pass the builder to their adapters, and then start multiple loads with the single builder (#182).
// In your Activity/Fragment
@Override
public void onCreate(Bundle savedInstanceState) {
    DrawableRequestBuilder requestBuilder = 
        Glide.with(this)
           .from(String.class)
           .placeholder(R.drawable.spinner)
           .centerCrop()
           .crossFade();
    mAdapter = new MyAdapter(requestBuilder);
}

// In your Adapter
@Override
public View getView(int position, View convertView, ViewGroupParent parent) {
    ...
   mRequestBuilder.load(myUrls.get(position)).into(convertView);
}
Glide.setup(new GlideBuilder(context)
    .setDecodeFormat(DecodeFormat.ALWAYS_ARGB_8888));
  • Add a .preload() API to allow preloading media into memory (#169).
Glide.with(fragment)
    .load(url)
    .preload(width, height);
  • Add a .signature() API to allow users to easily mix in additional data to cache keys, giving users more control over cache invalidation (#178, #179), see the cache invalidation wiki.
Glide.with(fragment)
    .load(url)
    .signature(new StringSignature("Version1"))
    .into(view);
  • Add a Glide.preFillBitmapPool() API to allow pre-filling the BitmapPool to avoid jank from allocations after app startup (#93).
Glide.get(context)
    .preFillBitmapPool(new PreFillType.Builder(mySize));
  • Allow recursive calls to thumbnail() to load an arbitrary number of different sized thumbnails for a single Target (#149).
Glide.with(fragment)
    .load(myUrl)
    .thumbnail(Glide.with(fragment)
        .load(myUrl)
        .override(200, 200)
        .thumbnail(Glide.with(fragment)
           .load(myUrl)
           .override(50, 50)))
    .into(myView);
  • Allow thumbnail() to load model and data types that are different than those of the parent (#107).
  • Transformations are now only applied once and no longer have to be idempotent (#112).

Build/Infrastructure

  • PMD/Findbugs (#164)
  • Jacoco/Coveralls with 85% test coverage (34f797b).
  • Standard import order (f7a6d65).

Bugs

Performance

  • Avoid allocating large byte arrays in BufferedInputStream (#225).
  • Use downsampled image size when obtaining Bitmaps from the pool (#224).

GIFs

  • Avoid a crash causing race decoding multiple frames with the same GifDecoder (#212).
  • Always use ARGB_8888 to prevent null GIF frames on some versions of Android that don’t support ARGB_4444 (#216).
  • Fix partially decoded GIF frames (appears as grey or transparent noise in frames) (#207, #204).
  • Set a default frame delay for GIFs which do not specify a frame delay, or specify an overly short frame delay (#205).
  • More robust GIF decoding logic, including a fix for decoding only the first few rows of certain GIFs (#203).
  • Allow fade in/cross fade animations by ensuring that the first frame of GIFs is decoded before the GIF is returned (#159).
  • Fix GIFs always appearing transparent pre KitKat (#199).

Memory

  • Fix a memory leak when Glide is first called in an Activity (#210).

Transformations

  • Fix underdraw in FitCenter causing noise along the sides of certain images (#195).
  • Maintain transparency during bitmap transformations (#156).

Caching

  • Fixed Drawables being cached only be integer resource id which can change and/or overlap after subsequent compilations (#172).

Uris

  • Fix failure to detect certain types of file Uris (#161).

Other

  • Fix concurrency bugs resulting in incorrect assertions being thrown when loads were started on multiple threads (#191, #181).
  • Fix BitmapRequestBuilder not setting the decode format on the cache decoder when format() is called (#187).
  • Fix an assertion in ViewTarget related to restarting requests (#167).
  • Fix Glide.with() throwing pre Honeycomb when given non-support Activities (#158).
  • Avoid using Closeable interface when loading ParcelFileDescriptors on 4.1.1 or earlier (#157).
  • Fix an NPE in Bitmap#getAllocationByteCount() due to a framework bug in the initial release of KitKat (#148).