使用 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;

/**
 * Simplest use of a ServiceTracker to get a service
 */
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();
        //use foo
        //no need to return it... just don't use it for long.
    }

    public void shutdown() {
        serviceTracker.close();
    }
}

指示主題類型的圖示 作業主題

檔名:twlp_feat_service_tracker.html