0

我正在使用 OSGi 框架 Knopflerfish,因为我现在可以通过注册服务来调用捆绑包来执行某些操作,我是否需要删除该服务?

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

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

4

1 回答 1

2

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

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

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

于 2016-01-28T09:46:40.503 回答