android - AnimationDrawable: Right way to free memory -
what right way free memory when using animationdrawable? right using:
for (int framecounter = 0; framecounter < animation.getnumberofframes(); ++framecounter) { drawable frame = animation.getframe(framecounter); if (frame instanceof bitmapdrawable) { bitmapdrawable castedframe = (bitmapdrawable) frame; bitmap bitmap = castedframe.getbitmap(); if (bitmap != null && !bitmap.isrecycled()) bitmap.recycle(); } frame.setcallback(null); } animation.setcallback(null); where animation animationdrawable. problem is, when go same activity (and animation displayed again), exception thrown:
java.lang.runtimeexception: canvas: trying use recycled bitmap android.graphics.bitmap@2ee1a817 @ android.graphics.canvas.throwifcannotdraw(canvas.java:1225) @ android.view.gles20canvas.drawbitmap(gles20canvas.java:600) @ android.graphics.drawable.bitmapdrawable.draw(bitmapdrawable.java:544) @ android.graphics.drawable.drawablecontainer.draw(drawablecontainer.java:76) @ android.widget.imageview.ondraw(imageview.java:1187) @ android.view.view.draw(view.java:16269) @ android.view.view.updatedisplaylistifdirty(view.java:15192) @ android.view.view.getdisplaylist(view.java:15215) @ android.view.view.draw(view.java:15990) @ android.view.viewgroup.drawchild(viewgroup.java:3708) @ android.view.viewgroup.dispatchdraw(viewgroup.java:3502) @ android.view.view.updatedisplaylistifdirty(view.java:15187) @ android.view.view.getdisplaylist(view.java:15215) @ android.view.view.draw(view.java:15990) @ android.view.viewgroup.drawchild(viewgroup.java:3708) @ android.view.viewgroup.dispatchdraw(viewgroup.java:3502) @ android.view.view.updatedisplaylistifdirty(view.java:15187) @ android.view.view.getdisplaylist(view.java:15215) @ android.view.view.draw(view.java:15990) @ android.view.viewgroup.drawchild(viewgroup.java:3708) @ android.view.viewgroup.dispatchdraw(viewgroup.java:3502) @ android.view.view.updatedisplaylistifdirty(view.java:15187) @ android.view.view.getdisplaylist(view.java:15215) @ android.view.view.draw(view.java:15990) @ android.view.viewgroup.drawchild(viewgroup.java:3708) @ android.view.viewgroup.dispatchdraw(viewgroup.java:3502) @ android.view.view.draw(view.java:16272) @ android.widget.framelayout.draw(framelayout.java:592) @ com.android.internal.policy.impl.phonewindow$decorview.draw(phonewindow.java:3047) @ android.view.view.updatedisplaylistifdirty(view.java:15192) @ android.view.view.getdisplaylist(view.java:15215) @ android.view.threadedrenderer.updateviewtreedisplaylist(threadedrenderer.java:307) @ android.view.threadedrenderer.updaterootdisplaylist(threadedrenderer.java:313) @ android.view.threadedrenderer.draw(threadedrenderer.java:352) @ android.view.viewrootimpl.draw(viewrootimpl.java:2811) @ android.view.viewrootimpl.performdraw(viewrootimpl.java:2634) @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:2222) @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1230) @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:6726) @ android.view.choreographer$callbackrecord.run(choreographer.java:777) @ android.view.choreographer.docallbacks(choreographer.java:590) @ android.view.choreographer.doframe(choreographer.java:560) @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:763) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:145) @ android.app.activitythread.main(activitythread.java:6141) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1399) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1194) the funny thing exception thrown not second time go activity, third. ideas? thanks
Comments
Post a Comment