BTW, the Android engineer who wrote the throwIfRecycled method should be lynched. I understand that it saves an "if", as in:
if (bitmap.isRecycled()) throw ... but s/he didn't even implement it defensively enough and the method crashes if passed a null pointer. Now, you either make the method super safe so it checks for both a null pointer and whether the bitmap is recycled, or you let the user's code crash miserably (preferred). I will *very* much appreciate a Canvas::drawBitmapFast() or drawBitmapUnsafe() method which doesn't check anything, because the current implementation of drawBitmap(Bitmap, Paint) spends as much as 9%!!!!! in throwIfRecycled, which IMVHO is unacceptable. Cheers On Sat, Mar 7, 2009 at 6:37 PM, Marco Nelissen <marc...@android.com> wrote: > > On Fri, Mar 6, 2009 at 5:59 AM, William <william.caine...@gmail.com> wrote: >> >> I am drawing bitmaps left and right and I hit this issue where I >> create a bitmap in one section of my code and when I later try to draw >> on it using canvas, i get bitmap recycled. but I did not null if out, >> or call its recycle method. >> >> Description: >> >> I have a main Class that extends View that when first loads, initiates >> the main screen which loads/draws on bitmaps and no problem. I then >> added a key event that causes this screen to go away and load the next >> screen. The screen logic is encapsulated in a class that I already >> instantiated in the Main Class constructor and in my second screen its >> constructor is this code: >> >> staticBg = new BitmapDrawable(Bitmap.createBitmap(320, 240, >> Bitmap.Config.RGB_565)); >> staticGr = new Canvas( staticBg.getBitmap() ); >> >> at a later time, from my first screen when I push a button, i call my >> init() function that trys load screen two which does a draw to this >> bitmap and I get the following error: >> >> 03-06 08:52:56.301: ERROR/AndroidRuntime(846): >> java.lang.NullPointerException >> 03-06 08:52:56.301: ERROR/AndroidRuntime(846): at >> android.graphics.Canvas.throwIfRecycled(Canvas.java:890) >> 03-06 08:52:56.301: ERROR/AndroidRuntime(846): at >> android.graphics.Canvas.drawBitmap(Canvas.java:911) >> >> It is saying my bitmap is recycled BUT from what I understand that >> does not happened unless you explicitly call it or the garbage >> collector does when there are no more references to it BUT i obviously >> still have a reference to it. What am I doing wrong? > > > Are you sure it's your bitmaps it's complaining about, and not some > other bitmap? > Are you using the drawing cache in any way? > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---