Thanks so much for the response! If you'll indulge me with a few more questions...
So I instantiate the handler in the onCreate() method of my Application, which I assume means it's tied to the UI thread. The method that removes and re-sends messages is called primarily on the UI thread, but can also be called from an IntentService that I use to handle network communication. Since the service is executed by a thread other than the UI thread it appears that I do need to synchronize. To give some more detail on my goals for this: I'm attempting to use the handler to track both user inactivity and server session expiration. The Service calls a "session refreshed" method to remove session-related delayed messages and re-add them with a new delay. The UI thread calls an "user activity occurred" method to indicate the user "did something"; that method removes inactivity-related delayed messages and re-adds them with a new delay. One other kink: I also have code to respond to SCREEN_ON and SCREEN_OFF. At screen off I remove all messages from the handler; at screen on I re-send each message that was queued at the point at which screen off occurred, albeit with a revised delay to account for the time that elapsed while the screen was off. On Tue, Oct 30, 2012 at 9:43 AM, Streets Of Boston <flyingdutc...@gmail.com>wrote: > It depends which thread is callling the code-snippet you show above (the > one calling 'removeMessage'). > > If your code, calling 'removeMessage', is run on the same thread that is > tied to the *handler*, you're fine. The message you sent will not be > handled/run until your code finishes first. No extra work necessary. > > If your code, calling 'removeMessage' is run on another thread than the > one tied to the *handler*, you need to sync it up. This could be as > simple as send another message on that handler that will call > 'removeMessage': E.g.: > handler.post(new Runnable() { > public void run() { > // Right now, calling 'removeMessages', etc. is done > // on the handler's thread as well. > handler.removeMessages(MSG_**ONE); > handler.removeMessages(MSG_**TWO); > ... > > if (conditionOne) > handler.**sendEmptyMessageDelayed(MSG_**ONE, timeoutOne); > > if (conditionTwo) > handler.**sendEmptyMessageDelayed(MSG_**TWO, timeoutTwo); > } > }); > > Since both the 'removeMessages' and 'sendEmptyMessageDelayed' are called > on 'handler' the Runnable needs to finish first before any other message > sent to 'handler' can be executed. > > > On Tuesday, October 30, 2012 9:17:39 AM UTC-4, Jay Howard wrote: >> >> I'm using a timer to manage timeout events, and would like to ensure that >> a particular method runs atomically without the handler issuing messages >> while the method is executing. Its basic form is: >> >> handler.removeMessages(MSG_**ONE); >> handler.removeMessages(MSG_**TWO); >> ... >> >> if (conditionOne) >> handler.**sendEmptyMessageDelayed(MSG_**ONE, timeoutOne); >> >> if (conditionTwo) >> handler.**sendEmptyMessageDelayed(MSG_**TWO, timeoutTwo); >> >> ... >> >> What I want to avoid is a situation where, before the removeMessages() >> calls execute, one of the messages reaches its timeout and is delivered to >> the message queue, then I send a duplicate one immediately after. My goal >> is to guarantee that there is never more than one of each message type "in >> flight" on the handler at any given time. >> >> Does the Handler class synchronize on MessageQueue when delivering its >> messages? If so, then could I just synchronize on the MessageQueue? Or >> would that be a terrible idea, since it's used by entities other than just >> my Handler? >> > -- > 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 > -- 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