“Cannot draw recycled bitmaps” exception
See original GitHub issueI’ve music player app which interacts with RemoteControlClient. I need to load album cover image to display it in lock screen remote contol. I’m trying to use Piccasso to achieve this. I’ve written the following code:
private final Target artworkTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
remoteControlClient.editMetadata(false).putBitmap(RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK,
bitmap).apply();
}
@Override
public void onBitmapFailed(Drawable drawable) {
Log.e(Constants.LOG_TAG, "Artwork loading failed");
}
@Override
public void onPrepareLoad(Drawable drawable) {
}
};
...
private void playNextSong(int songPosition) {
...
String artworkUrl = Constants.Urls.BASE_ARTWORK_URL + currentSong.getArtworkId();
Picasso.with(this).load(artworkUrl).skipMemoryCache().into(artworkTarget);
// Update the remote controls
remoteControlClient.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, currentSong.getArtist().getName())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, currentSong.getAlbum().getName())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, currentSong.getName())
.apply();
...
}
But sometimes I get ‘Cannot draw recycled bitmaps’ exception. Here is stacktrace:
10-14 10:40:53.999: ERROR/AndroidRuntime(28716): FATAL EXCEPTION: main
java.lang.IllegalArgumentException: Cannot draw recycled bitmaps
at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:772)
at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:105)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:440)
at com.squareup.picasso.PicassoDrawable.draw(PicassoDrawable.java:96)
at android.widget.ImageView.onDraw(ImageView.java:1025)
at android.view.View.draw(View.java:13944)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12880)
at android.view.View.draw(View.java:13657)
at android.view.ViewGroup.drawChild(ViewGroup.java:3083)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2920)
at android.view.View.draw(View.java:13947)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12880)
at android.view.View.draw(View.java:13657)
at android.view.ViewGroup.drawChild(ViewGroup.java:3083)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2920)
at android.view.View.getDisplayList(View.java:12833)
at android.view.View.getDisplayList(View.java:12880)
at android.view.View.draw(View.java:13657)
at android.view.ViewGroup.drawChild(ViewGroup.java:3083)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2920)
at android.view.View.getDisplayList(View.java:12833)
at android.view.View.getDisplayList(View.java:12880)
at android.view.View.draw(View.java:13657)
at android.view.ViewGroup.drawChild(ViewGroup.java:3083)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2920)
at android.view.View.getDisplayList(View.java:12833)
at android.view.View.getDisplayList(View.java:12880)
at android.view.View.draw(View.java:13657)
at android.view.ViewGroup.drawChild(ViewGroup.java:3083)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2920)
at android.view.View.draw(View.java:13947)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2224)
at android.view.View.getDisplayList(View.java:12838)
at android.view.View.getDisplayList(View.java:12880)
at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1411)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1359)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2367)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2239)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1872)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
I didn’t manage to find some steps to reproduce it, but if I remove skipMemoryCache application will crash every time I loading image.
Is something wrong with my code? Maybe I should use Picasso in some other way?
P.S. Picasso version 2.1.1
Issue Analytics
- State:
- Created 10 years ago
- Comments:18 (6 by maintainers)
Top Results From Across the Web
IllegalArgumentException: Cannot draw recycled bitmaps
IllegalArgumentException : Cannot draw recycled bitmaps. So, I still seem to be in the "no longer" context. When do I get a new...
Read more >java.lang.IllegalArgumentException: Cannot draw recycled ...
java.lang.IllegalArgumentException : Cannot draw recycled bitmaps at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:791) at ...
Read more >java.lang.IllegalArgumentException: Cannot draw recycled ...
java.lang.IllegalArgumentException : Cannot draw recycled bitmaps at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java). Summary: java.lang.
Read more >Android – getting “Cannot draw recycled bitmaps” - iTecNote
Android – getting “Cannot draw recycled bitmaps” ... meaning it will throw an exception if getPixels() or setPixels() is called, and will draw...
Read more >Buffer not large enough for pixels Bitmap.java android ...
Bitmap copyPixelsToBuffer 414 & Cannot draw recycled bitmaps GLES20Canvas.java android.view. ... I got the following exception, I using Android 4.3.
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found

I also faced this issue. Why isn’t Picasso checking for recycling?
@PaulWoitaschek This solution is perfect !!!