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