为什么我们在addsService(ServiceReference引用)方法中返回服务实例?

时间:2014-06-05 13:05:41

标签: osgi

在几本书中,他们说取消所有获取服务是一种很好的做法,但在我看到的servicetracker实现的每个例子中,这个方法定义如下:

@Override
  public Object addingService(ServiceReference reference) {
    IQuoteService service = (IQuoteService) context.getService(reference);
    /* some stuff */
    return service;
  }

他们返回服务实例...我如何知道/保证此方法返回的实例永远不会被遗忘?

1 个答案:

答案 0 :(得分:3)

查看ServiceTracker和ServiceTrackerCustomizer的source和javadoc。默认实现在 removedService(...)函数中调用 unget

http://grepcode.com/file/repo1.maven.org/maven2/org.osgi/org.osgi.compendium/4.3.1/org/osgi/util/tracker/ServiceTracker.java#493

您应该在ServiceTrackerCustomizer(或继承的ServiceTracker)中以相同的方式实现该功能。

但是,ServiceTracker是低级API。只有当您的用例无法使用Felix SCR或其任何替代方案解决时,您才需要它。