我尝试了解 osgi 的工作原理。我已经编写了我的第一个 hello-world 包,它在执行包激活器类的启动方法时提供一些控制台输出。现在,我已经了解了惰性启动机制,并将此标志放入我的 bundle list 中。然后,我启动了 equinox 控制台,安装了我的包并启动了它。但现在我希望我的包被标记为“开始”。但是它已经调用了它的启动方法并被标记为 Activity 的。 我理解延迟启动机制有什么问题吗???
最佳答案
当您有依赖于您的 bundle 和 bundle 中的类的其他 bundle 时,将使用 lazy-start 标志。
假设您有两个包 A 和 B,其中
- A 导出类 C
- B 依赖于 A
- B 包含引用 C 的类 D
当 bundle B 被激活时会发生什么?
没有延迟加载标志,首先加载并激活 A 包。
使用延迟加载标志,直到类 D 需要引用类 C 时才会加载或激活 A 包。
这可以在激活配置文件中产生非常大的差异,因为使用延迟加载标志将 bundle 的加载和激活推迟到尽可能晚的时间,因此来自 bundle 的初始响应非常快...
相反,这个标志也使得推断 B 中方法的执行时间变得更加困难,因为这可以随时通过加载和激活 bundle 来拦截....
关于java - osgi bundle生命周期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715909/