OSGi:如果不取消服务会发生什么
OSGi: What happens if not to unget service
这是我获取 OSGi 服务的方式:
ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
Foo foo=(Foo) bundleContext.getService(reference);
如果我在完成服务后不执行 bunldeContext.ungetSerivice(reference)
会怎样:
- 如果我手动注册服务,例如在激活器中
- 如果我使用声明式服务并且它是单例
OSGi 框架为您的包维护每个服务的使用计数。如果您的捆绑包没有取消获取服务,则当您的捆绑包停止或服务未注册时,框架将自动释放它。
如果您使用的是声明式服务,SCR 将在引用该服务的组件的生命周期中的适当时间处理对 unget 的调用。
这是我获取 OSGi 服务的方式:
ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
Foo foo=(Foo) bundleContext.getService(reference);
如果我在完成服务后不执行 bunldeContext.ungetSerivice(reference)
会怎样:
- 如果我手动注册服务,例如在激活器中
- 如果我使用声明式服务并且它是单例
OSGi 框架为您的包维护每个服务的使用计数。如果您的捆绑包没有取消获取服务,则当您的捆绑包停止或服务未注册时,框架将自动释放它。
如果您使用的是声明式服务,SCR 将在引用该服务的组件的生命周期中的适当时间处理对 unget 的调用。