【資源釋放】使用recycled的bitmap導(dǎo)致的Runtime錯誤

調(diào)用已經(jīng)recycle的bitmap出錯

開發(fā)時,重新進(jìn)入界面時報錯如下:

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@5b2eab2
    at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1270)
    at android.graphics.Canvas.drawBitmap(Canvas.java:1404)
    at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:544)
    at android.widget.ImageView.onDraw(ImageView.java:1226)
    at android.view.View.draw(View.java:16182)
    at android.view.View.updateDisplayListIfDirty(View.java:15178)
    at android.view.View.draw(View.java:15952)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
    at android.view.View.draw(View.java:16185)
    at android.support.v4.view.ViewPager.draw(ViewPager.java:2447)
    at android.view.View.updateDisplayListIfDirty(View.java:15178)
    at android.view.View.draw(View.java:15952)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
    at android.view.View.draw(View.java:16185)
    at android.view.View.updateDisplayListIfDirty(View.java:15178)
    at android.view.View.draw(View.java:15952)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
    at android.view.View.updateDisplayListIfDirty(View.java:15173)
    at android.view.View.draw(View.java:15952)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
    at android.view.View.updateDisplayListIfDirty(View.java:15173)
    at android.view.View.draw(View.java:15952)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
    at android.view.View.draw(View.java:16185)
    at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2760)
    at android.view.View.updateDisplayListIfDirty(View.java:15178)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2630)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2449)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2082)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1122)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6083)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
    at android.view.Choreographer.doCallbacks(Choreographer.java:670)
    at android.view.Choreographer.doFrame(Choreographer.java:606)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5439)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:757)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647)

查了一下代碼,是由于調(diào)用了bitmap的recycle()方法,但是由于需要又不得不調(diào)用,經(jīng)過搜索,得出如下解決這個Bug的方法:
調(diào)用recycle()方法后,將imageView的資源引用設(shè)置為null即可

imageView.setImageDrawable(null);
imageView.setImageBitmap(null);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容