今天看了看osgi中Event Admin Service Specification,趕快將重點記下,害怕自己忘了
   osgi中的事件通知機制,采用了Publish-Subscribe 的模式,首先所有的event Handler都需要在osgi框架中將自己進行注冊成服務接口為org.osgi.service.event.EventHandler的服務,在注冊的同時,需要將自己希望處理的處理的事件的topic和對事件進行過濾的filter作為所注冊服務的屬性,完成這個操作后,event admin Service就能在進行事件通知時,查找到合適EventHandler來處理所發生的事件。
    在進行事件的發布時,Event Publisher從osgi框架中獲取到event admin Service,需要借助于event admin Service的兩個方法來通知event Handler來處理所發生的事件,一個是同步的sendEvent,另一個是異步的postEvent。
    event admin Service是如何來選擇event Handler?這就要通過event對象了,從event對象的構造器中就可以看出,event對象中包含了event topic和event 的屬性,這樣event Handler就能對所發生的事件進行過濾選擇了,而且能從event的屬性中獲得event發生的相關信息。
    從上面可以看出Event Publisher和event Handler是通過event admin Service聯系起來的,event admin Service起了一個通道的作用。由于osgi框架動態的特性,event admin Service就需要確保event Handler選擇的合理性,如:不能讓bundle接收到自己被STARTED事件,同時也需要確保event Handler在處理同一個線程所發布的event的先后順序,如:不能先接收到bundle被UNINSTALLED,然后在接收到這個bundle被INSTALLED。