osgi bundle生命周期问题

Jul*_*uly 5 java eclipse osgi bundle equinox

我试着了解osgi的工作原理.我编写了我的第一个hello-world bundle,它在执行bundle activator类的start方法时提供了一些控制台输出.现在,我已经阅读了关于延迟启动机制的内容,并将此标志放入我的捆绑清单中.然后,我启动了equinox控制台,安装了我的软件包并启动了它.但现在我希望我的包被标记为'开始'.但它已经调用它的start方法并被标记为活动.我对懒惰的启动机制有什么不妥吗?

Ton*_*sen 8

如果您有其他捆绑包依赖于捆绑包中的捆绑包和类,则会使用lazy-start标志.

假设您有两个捆绑A和B,其中

  • A导出C类
  • B取决于A.
  • B包含引用C的D类

B束被激活后会发生什么?

如果没有延迟加载标志,则首先加载并激活A包.

使用延迟加载标志,在D类需要引用类C之前,不会加载或激活A包.

这可以在激活配置文件中产生很大的差异,因为捆绑包的加载和激活被延迟发生,使用延迟加载标志尽可能晚,因此捆绑包的初始响应非常快......

相反,这个标志也使得很难推断B中方法的执行时间,因为这可以随时加载和激活bundle来拦截....