When a view, in a list, goes out of the screen, it is detached from the window and cannot therefore communicate with the default handler.
On Wed, Jul 8, 2009 at 2:41 PM, Mike Ying<[email protected]> wrote: > > I have noticed something interesting with how View.post(Runnable r) > works as opposed to using a Handler to post back to the UIThread, and > I'm wondering if all of you out there can perhaps pick up on something > that I am not seeing (a problem in my code I believe). Perhaps the > multiple threads are causing some issues with how the post is being > processed but I will describe the high level flow of the code below. > > I have a block of code called from a View subclass, on the main > thread, that establishes a background thread so as not to block the UI > thread, and then from within that thread calls the post() method with > another anonymous Runnable class to update the UI: > > { > > // do work in background thread so the UI thread isn't > blocked. > new Thread() > { > public void run() > { > // do work to retrieve info to initialize view > here > post( new Runnable() > { > public void run() > { > // perform animation to fade > initialized view into a view group > } > }); > } > }.start(); > } > > When the view that contains this code is added as a footer in a > ListView that goes off the bottom of the screen (so the view is not > visible), the Runnable object passed to post() does not seem to get > its run() called. If I put a break in the code before the post, > scroll the ListView so that the footer is visible onscreen and then > continue, the Runnable object's run() method does get called. > > If I use a Handler() to keep a reference to the UI thread's handler, > then the code executes without fail, whether or not the view is > showing on screen: > > { > // get Handler referring to UI Thread. > Handler uiThreadHandler = new Handler(); > > // do work in background thread so the UI thread isn't > blocked. > new Thread() > { > public void run() > { > // do work to retrieve info to initialize view > here > uiThreadHandler.post( new Runnable() > { > public void run() > { > // perform animation to fade > initialized view into a view group > } > }); > } > }.start(); > } > > Has anyone else seen weirdness like this or have ideas as to where the > first block of code has gone wrong? > > Thanks much in advance, > Mike > > > > -- 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 -~----------~----~----~----~------~----~------~--~---

