在几本书中,他们说取消所有获取服务是一种很好的做法,但在我看到的servicetracker实现的每个例子中,这个方法定义如下:
@Override
public Object addingService(ServiceReference reference) {
IQuoteService service = (IQuoteService) context.getService(reference);
/* some stuff */
return service;
}
他们返回服务实例...我如何知道/保证此方法返回的实例永远不会被遗忘?
答案 0 :(得分:3)
查看ServiceTracker和ServiceTrackerCustomizer的source和javadoc。默认实现在 removedService(...)函数中调用 unget :
您应该在ServiceTrackerCustomizer(或继承的ServiceTracker)中以相同的方式实现该功能。
但是,ServiceTracker是低级API。只有当您的用例无法使用Felix SCR或其任何替代方案解决时,您才需要它。