0

OSGi フレームワーク Knopflerfish を使用しています。サービスを登録することでバンドルを呼び出して何かを実行できるようになったので、サービスを削除する必要がありますか?

サービスを削除する方法が見つからないためです。「getAllService()」と ServiceTracker.getServices() の長さで BundleContext 内のサービスを確認すると、「ungetService(ServiceReference)」を呼び出してもサービスの総数が増加していることがわかります。

それで、サービスを削除する必要がありますか、それとも「ungetService」で十分ですか? 必要な場合、サービスを削除するにはどうすればよいですか?

4

1 に答える 1

2

ungetServiceは の反対ではなく、 の反対ですregisterServicegetServiceつまり、消費者が行う呼び出しです。

registerServiceメソッドにサービスを登録すると、ServiceRegistrationオブジェクトが返されます。unregisterコンシューマーがサービスを利用できなくなった場合は、そのオブジェクトのメソッドを呼び出す必要があります。バンドルが停止すると、バンドルが登録したサービスはすべて自動的に登録解除されることに注意してください。

しかし、本当に最下位レベルの OSGi API を深く掘り下げる必要があるのでしょうか。ユース ケースの 99% では、Declarative Services のような高レベルのフレームワークを使用する必要があります。これにより、多くの手間が省け、コードの信頼性と可読性が向上します。

于 2016-01-28T09:46:40.503 に答える