Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ServiceTracker何时取消设置ServiceReference?_Java_Osgi - Fatal编程技术网

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甚至服务跟踪器。也就是说,服务跟踪器会侦听它正在跟踪的服务的服务事件。因此,当服务未注册或跟踪器关闭时,它将取消设置服务