gpt4 book ai didi

java - ServiceTracker何时取消获取ServiceReference?

转载 作者:行者123 更新时间:2023-11-30 02:34:03 24 4
gpt4 key购买 nike

我在许多文章中读到,有必要一旦使用服务就取消服务。我的意思是

//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

The OSGi framework maintains a use count of each service for your bundle.

这是从一方面来看的。另一方面,osgi 服务来来去去,因此在动态世界中,保留对 osgi 服务的引用是不好的做法,但在需要时获取服务是好的做法。

如果这个说法正确,那么 ServiceTracker 又如何呢?据我了解,它会在服务到来时保留对服务的引用和 ServiceReference ,并保留它们直到服务消失。但是,当使用服务时,ServiceReference 必须被删除怎么办?或者在 ServiceTracker 的情况下,我们的意思是使用时间=跟踪器打开的时间的服务?

所以主要问题是 - ServiceTracker 何时取消获取 ServiceReference 以及为什么?

最佳答案

您确实应该使用 OSGi 的声明式服务,而不是使用原始服务 API 甚至服务跟踪器。也就是说,服务跟踪器会监听它正在跟踪的服务的服务事件。因此,当服务取消注册或跟踪器关闭时,它将取消获取服务。

关于java - ServiceTracker何时取消获取ServiceReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com