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