技术库 > Java

android插件化-apkplug中OSGI服务基本原理

技术库:tec.5lulu.com

1 OSGI与android Service 异同点   

from:tec.5lulu.com

    OSGI服务与android Service概念差不多也是Service ,Client 关系。

    android Service接口  --service.AIDL    

    OSGI接口                --java interface

    所以android 进程间通信Service只能传递序列化过的数据 而OSGI服务可以传递任何java对象。

2 OSGI与android Service注册/查询方式对比

    1.服务注册

        android Service           

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

        OSGI Service       

BundleContext context;      //插件上下文
ServiceRegistration m_reg = context.registerService(
    sayHelloImp.class.getName(),//服务名称  一般为接口类名
     my,                         //服务具体实现类
     null);

2.服务查询

        android Service     

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

       OSGI Service    

//利用插件上下文BundleContext查询服务
 ServiceReference ref  =  context.getServiceReference(Service.class.getName());
        if  (ref  !=   null ) {
            //查找到服务
            Service service  =  (Service) context.getService(ref);
             if  (service  !=   null ) {
                      //调用服务接口
                 service.sayHello(imp);
             }
             //注销服务
             context.ungetService(ref);
}

3 OSGI服务特点

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

4 OSGI服务注意事项

       使用OSGI服务时应注意服务接口java类的一致性,服务者与消费者应使用相同的java接口(类加载器相同),否则可能出现服务查询时类型强制转换异常。一般情况下我们以服务者提供java接口

android插件化-apkplug中OSGI服务基本原理


标签: android java 接口 intent osgi本文链接 http://tec.5lulu.com/detail/110d8n2ehcg9j85b6.html

我来评分 :6.5
1

转载注明:转自5lulu技术库

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议

www.5lulu.com