同步绑定服务的方法及装置制造方法及图纸

技术编号:12908866 阅读:58 留言:0更新日期:2016-02-24 15:09
本发明专利技术提供了一种同步绑定服务的方法及装置。该方法应用于绑定服务的客户端,包括:通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象;利用获取的服务管理组件的IBinder对象,从服务管理组件中获取待绑定服务的服务接口;在客户端与待绑定服务的服务接口间建立绑定关系,以为客户端提供绑定服务。由此,本发明专利技术实施例可以直接从服务管理组件处来获取待绑定服务的服务接口,无需通过传递回调、接收回调的方式来获取待绑定服务的IBinder对象,进而调用待绑定服务的IBinder对象来获得待绑定服务的服务接口,提高了客户端绑定服务的效率。

【技术实现步骤摘要】

本专利技术涉及移动终端
,特别是一种同步绑定服务的方法及装置
技术介绍
在Android(安卓)系统中,通常采用异步的方式绑定服务(BindService)。例如,在安卓应用程序进程内部绑定一个计数器服务(CounterService),这里绑定的意思其实就是在这个应用程序的MainActivity内部获得CounterService的接口,可以包括以下几个步骤:1)该应用程序的MainActivity (应用程序的默认Activity (活动))调用BindService函数通知ActivityManagerService (系统级服务管理所有Activity),它要启动 CounterService 这个服务,ActivityManagerService 于是在 MainActivity 所在的进程内部把CounterService启动起来,并且调用它的onCreate函数;2)ActivityManagerService 把 CounterService 启动起来后,继续调用CounterService 的 onBind 函数,要求 CounterService 返回一个 IBinder 对象给它,这个IBinder对象是在CounterService内部自定义的CounterBinder类的一个实例,它继承于Binder类,里面实现一个getService函数,用来返回外部的CounterService接口 ;3) ActivityManagerService 从 CounterService 处得到这个 IBinder 对象后,就把它传给MainActivity,即把这个IBinder对象作为参数传递给MainActivity内部定义的ServiceConnect1n 对象的 onServiceConnected 函数;4) MainActivity 内部定义的 ServiceConnect1n 对象的 onServiceConnected函数在得到这个IBinder对象后,就调用这个IBinder对象的getService函数来获得CounterService 的接口。从上面的步骤可以看到,组件(如Activity组件等)在绑定服务时,该组件与服务有可能运行在不同的进程中,若服务所在进程没有启动,则首先需要启动该服务所在进程。通常启动服务所在进程耗时较长(约为50-100毫秒),若BindService是在UI线程(或主线程)执行的话,异步可不占用UI线程资源,不会阻塞。然而,这种异步的方式,每次获取IBinder对象都必须通过传递回调、接收回调等来实现,调用频繁,开发流程较为复杂ο
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的同步绑定服务的方法及相应的装置。依据本专利技术的一方面,提供了一种同步绑定服务的方法,应用于绑定服务的客户端,包括:通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象,其中,所述服务管理组件中保存有当前系统中存活的服务的服务接口,所述客户端与所述服务管理组件运行在不同的进程中;利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口;在所述客户端与所述待绑定服务的服务接口间建立绑定关系,以为所述客户端提供绑定服务。可选地,所述服务管理组件实现ServiceProvider,所述ServiceProvider继承自内容提供组件,并覆写query函数;所述通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象,包括:调用所述ServiceProvider的query函数,获取运行在常驻进程中的服务管理组件的IBinder对象。可选地,调用所述ServiceProvider的query函数,获取运行在常驻进程中的服务管理组件的IBinder对象,包括:生成标识所述服务管理组件的IBinder对象的URI ;调用所述ServiceProvider 的 query 函数,由所述 ServiceProvider 的 query 函数根据生成的所述URI,查找所述服务管理组件的IBinder对象;接收所述ServiceProvider的query函数返回的、封装有所述服务管理组件的IBinder 对象的 Cursor ;从所述Cursor中提取所述服务管理组件的IBinder对象。可选地,在调用所述ServiceProvider的query函数,获取运行在常驻进程中的服务管理组件的IBinder对象之后,所述方法还包括:在所述客户端所在进程中缓存所述服务管理组件的IBinder对象。可选地,在调用所述ServiceProvider的query函数,获取运行在常驻进程中的服务管理组件的IBinder对象之前,所述方法还包括:在所述客户端所在进程的缓存中查找所述服务管理组件的IBinder对象;若未查找到,则触发调用操作。可选地,在利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口之前,所述方法还包括:判断所述待绑定服务的进程是否已启动;若是,则触发获取操作。可选地,利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口,包括:调用所述服务管理组件的IBinder对象的getService函数,在所述服务管理组件中查找待绑定服务的服务接口。可选地,在利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口之后,所述方法还包括:在所述客户端所在进程中缓存所述待绑定服务的服务接口。可选地,所述方法还包括:当存在新启动的服务时,调用所述服务管理组件的IBinder对象的addService函数,将所述新启动的服务的服务接口注册到所述服务管理组件中。可选地,所述方法还包括:当存在停止的服务时,调用所述服务管理组件的IBinder对象的removeService函数,从所述服务管理组件中删除所述停止的服务的服务接口。可选地,在通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象之前,所述方法还包括:在所述客户端所在进程的缓存中查找所述待绑定服务的服务接口 ;若查找到,则利用查找到的所述待绑定服务的服务接口,对所述待绑定服务进行绑定;若未查找到,则触发获取操作。依据本专利技术的另一方面,还提供了一种同步绑定服务的装置,应用于绑定服务的客户端,包括:IBinder对象获取模块,适于通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象,其中,所述服务管理组件中保存有当前系统中存活的服务的服务接口,所述客户端与所述服务管理组件运行在不同的进程中;服务接口获取模块,适于利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口;服务绑定模块,适于在所述客户端与所述待绑定服务的服务接口间建立绑定关系,以为所述客户端提供绑定服务。可选地,所述服务管理组件实现ServiceProvider,所述ServiceProvider继承自内容提供组件,并覆写query函数;所述IB本文档来自技高网
...
同步绑定服务的方法及装置

【技术保护点】
一种同步绑定服务的方法,应用于绑定服务的客户端,包括:通过特定的通信通道,获取运行在常驻进程中的服务管理组件的IBinder对象,其中,所述服务管理组件中保存有当前系统中存活的服务的服务接口,所述客户端与所述服务管理组件运行在不同的进程中;利用获取的所述服务管理组件的IBinder对象,从所述服务管理组件中获取待绑定服务的服务接口;在所述客户端与所述待绑定服务的服务接口间建立绑定关系,以为所述客户端提供绑定服务。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘昕宋照春张炅轩姚彤
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1