Java ServiceTracker何时取消设置ServiceReference?
我在许多文章中读到,一旦使用了服务,就有必要取消设置服务。我是说Java ServiceTracker何时取消设置ServiceReference?,java,osgi,Java,Osgi,我在许多文章中读到,一旦使用了服务,就有必要取消设置服务。我是说 //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.u
//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)
除此之外
OSGi框架为您的应用程序维护每个服务的使用计数
捆
这是从一边来的。从另一个角度看,osgi服务来来往往,所以在动态世界中,保留对osgi服务的引用是一种不好的做法,但在需要时获取服务是一种好的做法
如果这句话正确,那么ServiceTracker呢?据我所知,它在服务到来时保留对服务的引用和服务引用,并将它们保留到服务结束。但当服务被使用时,ServiceReference必须立即取消设置,这又如何呢?或者对于ServiceTracker,我们的意思是服务使用时间=tracker打开的时间
所以主要的问题是-ServiceTracker什么时候取消设置ServiceReference?为什么?您应该真正使用OSGi的声明性服务,而不是使用原始的服务API甚至服务跟踪器。也就是说,服务跟踪器会侦听它正在跟踪的服务的服务事件。因此,当服务未注册或跟踪器关闭时,它将取消设置服务