bundle通信----Event方式
针对事件的实现,OSGi中的 Event Admin 服务规范提供了基于发布 / 订阅模型(publish-subscribe model)这种方法,Event Admin 服务将事件从发布者(Publishers)转发到订阅者(Subscribers),从而实现bundle间的通信。具体流程如下图所示:
事件由
org.osgi.service.event.Event对象来表示,事件有两个要素:主题(Topic)和属性(Properties)。通过主题匹配,事件处理函数只需响应自己感兴趣的事件。
事件的发布有同步(postEvent())和异步(sendEvent())两种方式:前者要等到所有的事件订阅者都响应了该事件才返回, 而后者则是信息发布后直接返回。
下面直接以代码来说明
事件发布:
[stdout] send event![stdout] test event received--[stdout] handle event start--org.osgi.service.event.Event [topic=my_osgi_test_event][stdout] send event![stdout] test event received--[stdout] handle event start--org.osgi.service.event.Event [topic=my_osgi_test_event][stdout] send event![stdout] test event received--[stdout] handle event start--org.osgi.service.event.Event [topic=my_osgi_test_event