OSGi企业规范定义了两种跟踪方式:按服务或捆绑。
这两种方式有什么区别?在哪些情况下,应该使用另一种方式?
由于
答案 0 :(得分:4)
取决于您愿意跟踪的内容。
BundleTracker跟踪包,请参阅:
ServiceTracker跟踪服务实例,请参阅:
很明显,如果您对bundle的内容感兴趣,可以使用BundleTracker。如果您对服务实例感兴趣,请使用ServiceTracker。
答案 1 :(得分:0)
简单地说: 捆绑是罐子。您可以跟踪它是否已安装,已成功启动,尚未启动等。
捆绑包可以发布零个或多个服务。 OSGi术语中的服务是实时java对象,它为您提供了执行某些操作的方法。即使捆绑包在那里,其服务也可能已经消失(例如,因为捆绑包已停止;或者已安装但尚未启动)。即使捆绑包处于ACTIVE状态,它仍然可以等待某些条件以提供其服务 - 它在注册和注销其服务时完全依赖于捆绑决策。
在最典型的情况下,您的代码可以使用服务 - 例如你得到LogService并调用它的log()方法。因此,在99%的情况下,您应该对ServiceListener感兴趣(或者更好的是,使用ServiceTracker,它会做同样的事情,但会处理一些典型的同步陷阱)。
希望这会有所帮助:)