![]() |
1
2
问题是您想要的服务可能尚未创建(特别是在bundle activator中,因为有些bundle可能尚未启动)。如果您仍然想使用服务跟踪器,您将需要提供一个ServiceTrackerCustomizer,并在服务来来去去时跟踪(抱歉,没有双关语)。 或者,您可以直接切换到为您处理此问题的声明性服务。 |
![]() |
2
1
使用ServiceTrackers没有什么错,只是它是一种相当低级的服务跟踪方式。虽然我同意声明式服务是一种很好的机制,但仅仅因为“各种各样的问题”而拒绝ServiceTracker听起来像是一个糟糕的建议。 回到问题上来。
进一步解释OSGi中的更新/刷新机制: 无论何时更新OSGi中的内容,都需要两个步骤。 假设您更新了一个包含导出包的新版本的包。让我们也假设有一些消费者进口它。只要您只更新bundle,而不显式地刷新连接(导入链接到导出),消费者仍然会连接到包的旧版本。一旦你做了一个包刷新(你可以通过PackageAdmin服务在OSGi中做的事情),你的消费者将再次被解析,并连接到新版本。 这是解耦的原因是,您可能希望对多个bundle进行更新,而不是在每个bundle之后“刷新”,而是将这样的刷新推迟到所有bundle都更新之后。
|
![]() |
3
0
不要轻率,不要使用服务跟踪器。他们似乎使你的生活简单,但也有各种各样的问题。我建议您考虑改用声明式服务。从3.5版开始,Eclipse对DS的支持就非常好。
|
![]() |
Michel · 在Android上后台播放音频超过一分钟 3 年前 |
![]() |
category · 在服务中处理较长的Pod响应时间 7 年前 |
![]() |
theDoron1 · C#服务未将文件移动到正确的文件夹 7 年前 |
![]() |
XpressGeek · 应用程序被终止时广播接收器未调用服务 7 年前 |
![]() |
anakin59490 · 角度5-组件和服务之间的通信 7 年前 |