使用 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();
}
}