Back to project page music-tag.
The source code is released under:
Apache License
If you think the Android project music-tag listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package binauld.pierre.musictag.io; /* www . j a v a 2 s.c om*/ import android.graphics.Bitmap; import android.os.AsyncTask; import android.widget.ImageView; import java.lang.ref.WeakReference; import binauld.pierre.musictag.decoder.BitmapDecoder; import binauld.pierre.musictag.item.LibraryItem; import binauld.pierre.musictag.service.CacheService; public class ArtworkLoader extends AsyncTask<LibraryItem, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private final BitmapDecoder defaultArtworkDecoder; private LibraryItem item; private CacheService<Bitmap> cacheService; private int artworkSize; public ArtworkLoader(ImageView imageView, CacheService<Bitmap> cacheService, BitmapDecoder defaultArtworkDecoder, int artworkSize) { // Use a WeakReference to ensure the ImageView can be garbage collected this.imageViewReference = new WeakReference<>(imageView); this.cacheService = cacheService; this.defaultArtworkDecoder = defaultArtworkDecoder; this.artworkSize = artworkSize; } // Decode image in background. @Override protected Bitmap doInBackground(LibraryItem... items) { item = items[0]; BitmapDecoder decoder = item.getDecoder(); String key = decoder.getKey(artworkSize, artworkSize); Bitmap bitmap = decoder.decode(artworkSize, artworkSize); if (null != bitmap) { cacheService.put(key, bitmap); } else if (decoder != defaultArtworkDecoder) { item.switchDecoder(defaultArtworkDecoder); bitmap = this.doInBackground(item); } return bitmap; } // Once complete, see if ImageView is still around and set bitmap. @Override protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { bitmap = null; } final ImageView imageView = imageViewReference.get(); if (imageView != null && bitmap != null) { final ArtworkLoader artworkLoader = AsyncDrawable.retrieveBitmapLoader(imageView); if (this == artworkLoader) { imageView.setImageBitmap(bitmap); } } } /** * Get the item which loader working on. * @return The item. */ public LibraryItem getWorkingItem() { return item; } }