this is synchronized to avoid thread overlap and race conditions, as well as because that's how it's done here: http://eyes-free.googlecode.com/svn-history/r363/trunk/TalkBack/src/com/google/android/marvin/talkback/TalkBackService.java