一 OSGI与android Service 异同点   

    OSGI服务与android Service概念差点儿相同也是Service ,Client 关系。

    android Service接口  --service.AIDL    

    OSGI接口                --java interface

    所以android 进程间通信Service仅仅能传递序列化过的数据 而OSGI服务能够传递不论什么java对象。

android插件技术-apkplug于OSGI服务基础-08_android

 

二 OSGI与android Service注冊/查询方式对照

    1.服务注冊

        android Service           




​1​

​Intent intent=​​​​new​​ ​​Intent(Context,Service.​​​​class​​​​);​


​2​

​Context.startService(intent);​


        OSGI Service       




​1​

​BundleContext context;      ​​​​//插件上下文​


​2​

​ServiceRegistration m_reg = context.registerService(​


​3​

​sayHelloImp.​​​​class​​​​.getName(),​​​​//服务名称  一般为接口类名​


​4​

​my,                         ​​​​//服务详细实现类​


​5​

​null​​​​);​


2.服务查询

        android Service     




​1​

​Intent intent=​​​​new​​ ​​Intent(Context,Service.​​​​class​​​​);​


​2​

​Context.bindService(intent, ​​​​new​​ ​​ServiceConnection())​


​3​

​...​


       OSGI Service    




​01​

​//利用插件上下文BundleContext查询服务​


​02​

​ServiceReference ref  =  context.getServiceReference(Service.​​​​class​​​​.getName());​


​03​

​if​​  ​​(ref  !=   ​​​​null​​ ​​) {​


​04​

​//查找到服务​


​05​

​Service service  =  (Service) context.getService(ref);​


​06​

​if​​  ​​(service  !=   ​​​​null​​ ​​) {​


​07​

​//调用服务接口​


​08​

​service.sayHello(imp);​


​09​

​}​


​10​

​//注销服务​


​11​

​context.ungetService(ref);​


​12​

​}​


三    OSGI服务特点

        OSGI服务是暂态的插件可能随时被关闭或卸载,所以我们每次在使用服务的时候都最好先查询服务是否还存在。

四    OSGI服务注意事项

       使用OSGI服务时应注意服务接口java类的一致性,服务者与消费者应使用同样的java接口(类载入器同样),否则可能出现在是时候服务查询类型转换异常。在一般情况下,我们必须提供的服务java介面