> but s/he didn't even implement it defensively enough and the method > crashes if passed a null pointer.
It would crash without the test to see if it's recycled. Passing a null will Bitmap will crash, period. The reason why there's a check for recycled and not for null is that a crash due to a recycled Bitmap would be much more difficult to debug/understand without the "recycled exception." > > 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 <[email protected]> wrote: >> >> On Fri, Mar 6, 2009 at 5:59 AM, William <[email protected]> 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? >> >> > >> > > > > -- Romain Guy Android framework engineer [email protected] Note: please don't send private questions to me, as I don't have time to provide private support. All such questions should be posted on public forums, where I and others can see and answer them --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---

