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

Reply via email to