ServiceTracker是基于osgi开发中用于查找已经发布的服务的。 服务追踪器是由org.osgi.util.tracker.ServiceTracker类实现,它的作用是监视服务何时被添加、何时被移除(在添加和移除服务时框架会自动调用addingService()和removedService()方法,用户可继承ServiceTracker类覆盖这两个方法以实现服务变动时的处理逻辑)以及在服务可用时获取服务实例(getService()、getServices()、和waitForService()方法用于返回服务实例)。
[codesyntax lang="java" lines="normal"]
ServiceTracker serviceTracker = new ServiceTracker(context, name, null);
System.out.println("serviceTracker : " + serviceTracker);
serviceTracker.open();
try
{
return serviceTracker.waitForService(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
[/codesyntax] 上面的代码中指定要跟踪的服务名称,另外也可以通过Filter来过滤服务。 [codesyntax lang="java"]
Filter dataFilter = context.createFilter("(objectClass=org.suren.IDataPrivilegeCheckService)");
ServiceTracker<IDataPrivilegeCheckService, IDataPrivilegeCheckService> dataPriviTracker = new ServiceTracker<IDataPrivilegeCheckService, IDataPrivilegeCheckService>(
Activator.LOCAL_BUNDLE.getBundleContext(), dataFilter, null) {
@Override
public IDataPrivilegeCheckService addingService(ServiceReference<IDataPrivilegeCheckService> refer) {
IDataPrivilegeCheckService dataPrivilege = context.getService(refer);
registDataValidateService(dataPrivilege);
return dataPrivilege;
}
@Override
public void remove(ServiceReference<IDataPrivilegeCheckService> refer) {
IDataPrivilegeCheckService dataPrivilege = context.getService(refer);
unRegistDataValidateService(dataPrivilege);
}
};
dataPriviTracker.open();
[/codesyntax]