The "LOCK" in the ImageButton draw code was unintentional. I had added
this for debugging (to see if the issue happened if I ensured that the
RenderTask and ImageButton.draw() waited on each other); this did prevent
the issue, but is definitely not a desirable solution.....
On Tuesday, 24 April 2012 13:21:01 UTC-4, Ab wrote:
>
> My app has a layout that contains some ImageButtons. In addition, my app
> renders some Bitmaps for later use. The Bitmaps are rendered by
> creating a Canvas with a Bitmap parameter, and then drawing into the
> canvas. This Bitmap rendering task occurs in a non-ui thread, so the gui
> can remain responsive while the bitmaps render.
>
> ANRs occurring. The caused appears to be that the ImageButton.draw()
> method does not complete. Additionally, it appears that the method fails
> to complete because the Bitmap rendering task begins rendering while the
> ImageButton is drawing.
>
> Below are some code snippets, by log output, and the traces.txt file from
> the ANR.
>
> Is my conclusion possible/likely, that drawing to a Canvas in a non-ui
> thread could cause ImageButton.draw() to hang? If so, any suggestions to
> fix this?
>
>
> private class BitmapRenderTask implements Runnable
> {
> ...
> public void run()
> {
> Log.e("start render task", rect.toString());
> ...
> Canvas canvas = new Canvas(bitmap);
> Log.e("created canvas", "created canvas");
> //do stuff to draw into canvas
> Log.e("drew to canvas", "drew to canvas");
> ...
> Log.e("done, exit", rect.toString());
>
> public class MyImageButton extends ImageButton
> {
> public void draw(Canvas canvas)
> {
> Log.e("start drawing", this.toString());
> synchronized (LOCK)
> {
> super.draw(canvas);
> }
> Log.e("end drawing", this.toString());
> }
> }
>
> My log:
>
> 04-24 14:10:12.115: E/start render task(9446): 1 Rect(512, 0 - 800,
> 512)
> 04-24 14:10:12.230: E/start drawing(9446): MyButton1
> 04-24 14:10:12.230: E/end drawing(9446): MyButton1
> 04-24 14:10:12.230: E/start drawing(9446): MyButton2
> 04-24 14:10:12.230: E/end drawing(9446): MyButton2
> 04-24 14:10:12.230: E/start drawing(9446): MyButton3
> 04-24 14:10:12.230: E/end drawing(9446): MyButton3
> 04-24 14:10:12.230: E/start drawing(9446): MyButton4
> 04-24 14:10:12.235: E/end drawing(9446): MyButton4
> 04-24 14:10:12.235: E/start drawing(9446): MyButton5
> 04-24 14:10:12.235: E/end drawing(9446): MyButton5
> 04-24 14:10:12.235: E/start drawing(9446): MyButton6
> 04-24 14:10:12.390: E/drew to canvas(9446): drew to canvas
> 04-24 14:10:12.395: E/done, exit(9446): Rect(512, 0 - 800, 512)
> 04-24 14:10:12.395: E/start render task(9446): Rect(0, 1024 - 512,
> 1084)
> 04-24 14:10:12.410: E/drew to canvas(9446): drew to canvas
> 04-24 14:10:12.395: E/done, exit(9446): Rect(0, 1024 - 512, 1084)
>
> traces.txt:
>
> http://pastebin.com/s98nEyYt
>
--
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