我正在跟踪这样的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) {
...
}
});
现在,如果捆绑包B具有依赖关系A和B已启动,那么据我所知,第一个捆绑包A将被激活。这是对的吗?
问题是,在我收到有关其依赖捆绑包的通知之前,我有时会收到有关某些捆绑包的通知。那么,我怎样才能以依赖顺序得到通知(如果B依赖于A,那么首先得到A关于B的通知)?
答案 0 :(得分:3)
bundle之间的代码依赖性(import package或require bundle)不会(通常)对bundle的开始排序有任何影响。这是使用延迟激活的bundle之间的一些交互。
因此,一旦A和B得到解决,开始B与启动A无关。
这里需要注意的重要一点是模块层依赖关系不会影响bundle的开始顺序。
答案 1 :(得分:2)
代码依赖性对激活没有影响,因为所有bundle都是原子解析的。因此,当捆绑包被激活时,您确定它仅取决于已解析的捆绑包。 OSGi具有模块层(具有包依赖性)和服务层。模块层是静态的,服务层允许您表达动态依赖关系(使用DS)。
如果您在开始订单时遇到困难,那么您可能做得不对......