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

有必要删除OSGi中的服务引用吗?,osgi,knopflerfish,Osgi,Knopflerfish,我正在使用OSGi框架Knopflerfish,因为我现在可以通过注册服务来调用bundle来做一些事情,我需要删除服务吗 因为我找不到任何方法删除该服务。 通过检查BundleContext中长度为“getAllService()”和ServiceTracker.getServices()的服务,我可以看到服务总数正在增加,甚至我调用了“ungetService(ServiceReference)” 那么是否有必要删除该服务,或者“ungetService”就足够了? 如果有必要,我如何删除服

我正在使用OSGi框架Knopflerfish,因为我现在可以通过注册服务来调用bundle来做一些事情,我需要删除服务吗

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

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

ungetService
不是
registerService
的对立面,而是
getService
的对立面,即消费者拨打的电话

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


然而,我想知道您是否真的应该深入研究最低级别的OSGiAPI。对于99%的用例,您应该使用更高级别的框架,比如声明性服务。这将为您节省大量的痛苦,并使您的代码更加可靠和可读。

ungetService
不是
registerService
的对立面,而是
getService
的对立面,即消费者发出的呼叫

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


然而,我想知道您是否真的应该深入研究最低级别的OSGiAPI。对于99%的用例,您应该使用更高级别的框架,比如声明性服务。这将为您节省大量的痛苦,也使您的代码更加可靠和可读。

我正在删除对Android的引用,因为这是一个纯粹的OSGi问题,Android似乎不相关。@NeilBartlett我正在使用Knopflerfish开发Android应用程序,但您是对的,这似乎与Android无关,谢谢。我正在删除对Android的引用,因为这是一个纯粹的OSGi问题,Android似乎不相关。@NeilBartlett我正在使用Knopflerfish开发一个Android应用程序,但你是对的,这似乎与Android无关,谢谢。所以我只能在注册该服务的捆绑包中注销该服务?有没有办法得到register对象?无论如何,谢谢你,因为我还是OSGi新手,稍后我将转到声明性服务。是的。其目的是只有注册服务的参与者才能取消注册服务。要获取已注册的对象,请调用getService-任何捆绑包都可以这样做。因此,我只能在注册该服务的捆绑包中注销该服务?有没有办法得到register对象?无论如何,谢谢你,因为我还是OSGi新手,稍后我将转到声明性服务。是的。其目的是只有注册服务的参与者才能取消注册服务。要获取注册的对象,请调用getService-任何捆绑包都可以这样做。