以编程方式启动/停止片段

Start / Stop Fragment Programmatically

我想在 OSGI 中实现功能切换,这意味着我想以编程方式启动和停止捆绑包。

对于真正简单的插件:

Bundle plugin = //...
plugin.start();
plugin.stop();

对于片段来说就没那么容易了。停止根本不起作用,如果我使用 uninstall() 片段就永远消失了,我无法再次安装它,因为我不知道 BundleContext#installBundle(...) 的正确位置(并查看 Bundle#getLocation(),片段本身也没有)。

我面临的问题是我有一个片段贡献了一些 Eclipse 扩展点。只是停止主机插件不会删除这些服务(无论出于何种原因)。所以我需要手动停止该片段(或者可能清除那个不断搞砸应用程序的愚蠢的 Eclipse 缓存?)。

那么如何在运行时安装片段?

碎片没有自己的生命周期。它们是宿主包生命周期的一部分。这意味着无法 start/stop 它们独立于主机。

如果您需要更多关于包、片段和生命周期的背景知识,我建议您阅读 OSGi 规范,可以从 http://osgi.org/ 网站下载。