是否有必要删除OSGi中的服务引用?

时间:2016-01-28 07:37:57

标签: osgi knopflerfish

我正在使用OSGi框架Knopflerfish,因为我现在可以通过注册服务来调用bundle做某事,我是否需要删除该服务?

因为我找不到任何方法来删除该服务。 通过检查BundleContext中服务的长度为“getAllService()”和ServiceTracker.getServices(),我可以看到服务总数在增加,甚至我称之为“ungetService(ServiceReference)”。

那么有必要删除服务或“ungetService”就足够了吗? 如果有必要,我该如何删除服务?

1 个答案:

答案 0 :(得分:2)

ungetServiceregisterService不同,它与getService相反,即消费者的呼叫。

如果您使用registerService方法注册服务,则会返回ServiceRegistration个对象。当您不再希望消费者可以使用您的服务时,您应该在该对象上调用unregister方法。请注意,如果您的捆绑包停止,则其注册的任何服务都将自动取消注册。

但是,我想知道你是否应该真正深入挖掘最低级别的OSGi API。对于99%的用例,您应该使用像Declarative Services这样的更高级别的框架。这将为您节省大量的痛苦,并使您的代码更可靠和可读。