android插件技术-apkplug于OSGI服务基础-08
我们提供 apkplug 下OSGI使用demo 源代码托管地址为 http://git.oschina.net/plug/OSGIService
一 OSGI与android Service 异同点
OSGI服务与android Service概念差点儿相同也是Service ,Client 关系。
android Service接口 --service.AIDL
OSGI接口 --java interface
所以android 进程间通信Service仅仅能传递序列化过的数据 而OSGI服务能够传递不论什么java对象。
 
二 OSGI与android Service注冊/查询方式对照
1.服务注冊
android Service
| 1 | Intent
 intent=newIntent(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=newIntent(Context,Service.class); | 
| 2 | Context.bindService(intent, newServiceConnection()) | 
| 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介面
版权声明:本文博主原创文章,博客,未经同意不得转载。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号