我有一个已安装的软件包。现在我想添加一个监听器(以后再开始)来查找活动状态。 我发现的唯一方法是
bundle.getBundleContext().addBundleListener(new ...);
但是,只有当bundle处于启动,停止和活动状态时,getBundleContext()才有效。那么,我能做到吗?
答案 0 :(得分:2)
注册BundleListener来捕获同一个bundle发生的事件是没有意义的。实现BundleListener / BundleTracker时,通常希望捕获具有特殊属性的bundle事件。
使用BundleListener,您可以捕获框架中发生的事件。使用BundleTracker,您首先捕获框架中每个包发生的最后事件,而不是捕获新事件。通常最好使用BundleTracker,因为你想要获取那些已经激活的特殊属性的包。
应该在实现侦听器/跟踪器的bundle的BundleContext的帮助下使用BundleListener / BundleTracker。由于代码在“启动”之前不应在您的包中运行,因此当您想要注册监听器/跟踪器时,BundleContext应始终可用。
了解有关您要实现的用例的更多信息会很有用。也许你根本不需要实现BundleListener / BundleTracker,只需重新设计一下你的bundle中的代码。
答案 1 :(得分:1)
我建议使用BundleTracker来跟踪和响应捆绑状态更改。此外,您必须使用BundleContext来安装捆绑包。因此,您可以使用BundleContext创建BundleTracker。
答案 2 :(得分:0)
你想让Bundle A知道Bundle B什么时候被激活,或者你想在bundle B被激活时执行一些代码吗?在第二种情况下,Bundle Activator可以满足您的需求......