2017-04-22 2 views
1

私は多くの記事でサービスが利用された直後にサービスを取り除く必要があることを読みました。 OSGiフレームワークは、あなたの バンドルの各サービスの利用回数を維持hereServiceTrackerはいつServiceReferenceを取り消しますか?

からだけでなく、私は

//1. get service 
ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName()); 
Foo foo=(Foo) bundleContext.getService(reference); 
//2. use service 
foo.foo(); 
//3. unget service 
bunldeContext.ungetService(reference) 

を意味します。

これは片側からのものです。別の側面から、osgiサービスが出て行くので、動的な世界では、osgiサービスへの参照を保持することは悪い習慣ですが、必要なときにサービスを取得することをお勧めします。

このステートメントが正しい場合、ServiceTrackerはどうなりますか?私が理解しているように、サービスとServiceReferenceの両方の参照はサービスが来るのを保ち、サービスが実行されるまで保ちます。しかし、ServiceReferenceは、サービスが使用されたときのように、そんなに忘れる必要はありませんか?またはServiceTrackerの場合は、時間を使用しているサービス=トラッカーが開いている時間を意味しますか?

ですから、主な質問は、いつServiceTrackerがServiceReferenceをいつ取り除き、なぜですか?

答えて

2

OSGiの宣言型サービスは、RAWサービスAPIまたはService Trackerを使用するのではなく、実際に使用する必要があります。つまり、サービストラッカーは、トラッキングしているサービスのサービスイベントをリッスンします。したがって、サービスが登録されていないか、トラッカーが閉じられているときにサービスをアンインストールします。

関連する問題