> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to