我正在使用OSGi框架Knopflerfish,因为我现在可以通过注册服务来调用bundle做某事,我是否需要删除该服务?
因为我找不到任何方法来删除该服务。 通过检查BundleContext中服务的长度为“getAllService()”和ServiceTracker.getServices(),我可以看到服务总数在增加,甚至我称之为“ungetService(ServiceReference)”。
那么有必要删除服务或“ungetService”就足够了吗? 如果有必要,我该如何删除服务?
答案 0 :(得分:2)
ungetService
与registerService
不同,它与getService
相反,即消费者的呼叫。
如果您使用registerService
方法注册服务,则会返回ServiceRegistration
个对象。当您不再希望消费者可以使用您的服务时,您应该在该对象上调用unregister
方法。请注意,如果您的捆绑包停止,则其注册的任何服务都将自动取消注册。
但是,我想知道你是否应该真正深入挖掘最低级别的OSGi API。对于99%的用例,您应该使用像Declarative Services这样的更高级别的框架。这将为您节省大量的痛苦,并使您的代码更可靠和可读。