【发布时间】:2017-09-19 07:43:10
【问题描述】:
我在许多文章中读到,有必要在使用服务后立即取消服务。我是说
//1. get service
ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
Foo foo=(Foo) bundleContext.getService(reference);
//2. use service
foo.foo();
//3. unget service
bunldeContext.ungetService(reference)
除了来自here
OSGi 框架为您维护每个服务的使用计数 捆绑。
这是一方面。另一方面,osgi 服务来来去去,因此在动态世界中,保留对 osgi 服务的引用是不好的做法,但在需要时获取服务是好的做法。
如果这个说法正确,那么 ServiceTracker 呢?据我了解,它会在服务到来时同时保留对服务和 ServiceReference 的引用,并保持它们直到服务结束。但是,ServiceReference 必须像使用服务一样被取消呢?或者在 ServiceTracker 的情况下,我们的意思是使用时间 = 跟踪器打开的时间的服务?
所以主要问题是 - ServiceTracker 何时取消 ServiceReference 以及为什么?
【问题讨论】: