One of the interesting problems that presents itself when doing code with lots of user interaction, is how to write tests for the underlying stuff, that don't require all kinds of user interaction. Announcements and Exceptions both provide a mechanism for separating out the logic of a user driven process so that it can be tested independent of the user interactions otherwise. They actually overlap a bit, but each has their strengths. Since I try to write lots of tests, I use the technique of using an Exception or Announcment to loosely couple a process with it's UI quite often.
How amused to see this had gone maybe a little far today. I wrote this code. Or took part in most of it. I discovered a process that started out as an Exception raised from with the VisualWorks core library (an IO exception to be more precise). This exception was then trapped by our own stuff and recast as a domain specific exception. Another layer out trapped that exception, and on doing so, would broadcast an announcement. Another process wanting to be aware of the changes implicated by the announcment, decided to listen for that announcement. When it got it, it chose to raise an exception. Which was in turn handled and broadcast as a UI specific announcement. To sum up:
exception -> exception -> announcement -> exception -> announcement
I guess I can't complain about all the layers of exception handling in the Parcel loading process anymore.