使用 OSGi 服務
服務隨時可以非同步地登錄和取消登錄。 因此,您呼叫服務的時間請儘可能縮短。 您可以利用 ServiceTracker 類別來同時追蹤服務的可用性。
關於這項作業
如果您想要追蹤服務,您可以利用您的軟體組環境定義、您想要的介面以及您想要符合的內容來建立 ServiceTracker 物件,然後開啟追蹤器。 您可以查詢追蹤器來尋找最佳相符項或所有相符項。 請確定您使用服務之後,不會佔用服務。 您不需要告訴追蹤器您已完成;追蹤器會在內部快取相符的服務,當它們取消登錄時,會將它們清除。 用完追蹤器之後,請利用 serviceTracker.close() 方法來關閉它。
範例
下列範例顯示如何利用 ServiceTracker 物件來追蹤服務:
package com.ibm.foo.tracker;
import com.ibm.foo.simple.Foo;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
/**
* 簡單使用 ServiceTracker 來取得服務
*/
public class TrackingFooUser
{
private ServiceTracker<Foo,Foo> serviceTracker;
public TrackingFooUser( BundleContext bundleContext )
{
serviceTracker = new ServiceTracker<Foo, Foo>( bundleContext, Foo.class, null );
serviceTracker.open();
}
public void doFoo() {
Foo foo = serviceTracker.getService();
//使用 foo
//不需要傳回它...只要不長時間使用它就好。
}
public void shutdown() {
serviceTracker.close();
}
}