我正在跟踪这样的 OSGi 包:
BundleTracker<Foo> bundleTracker = new BundleTracker<>(context, Bundle.ACTIVE,
new BundleTrackerCustomizer<Foo>(){
@Override
public Foo addingBundle(Bundle bundle, BundleEvent event) {
...
}
@Override
public void modifiedBundle(Bundle bundle, BundleEvent event, Foo foo) {
...
}
@Override
public void removedBundle(Bundle bundle, BundleEvent event, Foo foo) {
...
}
});
现在,如果 bundle B 具有依赖项 A 并且启动了 B,那么据我了解,第一个 bundle A 将被激活。这是正确的吗?
问题是,有时我会在收到有关某些 bundle 的相关 bundle 的通知之前收到有关某些 bundle 的通知。那么,我如何才能按依赖顺序收到通知(如果 B 依赖于 A,则首先收到有关 A 的通知,然后收到有关 B 的通知)?
最佳答案
bundle 之间的代码依赖关系(导入包或要求 bundle )(通常)不会对 bundle 的启动顺序产生任何影响。这是使用延迟激活的 bundle 之间的一些交互。
因此,一旦 A 和 B 解决,启动 B 与启动 A 无关。
这里需要注意的重要一点是,模块层依赖项不会影响包的启动顺序。
关于java - OSGi 捆绑跟踪器 : order of tracked bundles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977857/