启动插件服务的方法、装置和终端设备制造方法及图纸

技术编号:15791726 阅读:92 留言:0更新日期:2017-07-09 21:50
本发明专利技术实施例公开了一种启动插件服务的方法、装置和终端设备。其中方法包括:通过服务管理组件的Binder对象接收客户端的启动服务请求信息;根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务;其中,所述服务管理组件管理其所在的进程中的所有服务,所述服务管理组件与所述客户端运行在不同的进程中。本发明专利技术实施例通过为服务端每个进程设置服务管理组件,管理其所在进程中的所有服务,当目标服务与客户端运行在不同的进程中时,可以实现对目标服务的启动,因此在启动插件提供的服务时,既不需要在主程序的AndroidManifest.xml文件中预设服务坑位,也不需要在服务升级时对主程序进行升级的额外处理。

【技术实现步骤摘要】
启动插件服务的方法、装置和终端设备
本专利技术属于计算机
,特别是涉及一种启动插件服务的方法、装置和终端设备。
技术介绍
插件是一种遵循一定规范的应用程序接口编写出来的程序,目前Android系统使用插件提供的服务的方法包括:启动服务(StartService)、停止服务(StopService)、绑定服务(BindService)和解除绑定服务(UnbindService)。在Android系统中使用插件提供的服务主要采用两种方案来实现:一种是通过在主程序中编写一个服务中介,利用这个服务中介通过反射机制来调用插件,其具体实现方法为:首先在主程序的AndroidManifest.xml文件中声明此服务中介,然后在主程序中编写此服务中介,此服务中介的所有函数都是通过反射机制调用插件内部的函数来实现;另一种是通过在主程序中预设一些服务坑位,利用这些服务坑位来加载插件提供的服务,其具体实现方法为:首先预先在主程序的AndroidManifest.xml文件中声明多个虚拟的服务注册信息,即服务坑位,然后为插件提供的服务分配相适配的服务坑位,将此服务加载到服务坑位所对应的进程空间中运行。上述现有的两种方案虽然都能够实现对插件提供的服务的使用,然而,在具体实现过程中,我们发现上述现有的两种方案都存在着一定的局限性:第一种方案,要升级插件提供的服务必须先升级主程序,只有在升级了主程序后才能够使用升级后的服务,需要进行主程序升级的额外处理;第二种方案,由于预设的服务坑位数量有限,而服务常驻于后台,生命周期较长,这样很快预设的服务坑位就会被用完,而如果预设坑位过多又会导致启动速度受到影响,当第三方或者自己通过Binder获取主程序应用的信息时,有可能会因信息过多而出现TransactionTooLarge的异常。
技术实现思路
本专利技术实施例要解决的一个技术问题是:提供一种启动插件服务的方法、装置和终端设备,可以在不需要设置坑位且不需要进行额外处理的情况下,启动插件提供的服务。为解决上述技术问题,根据本专利技术实施例的一个方面,提供一种启动插件服务的方法,包括:通过服务管理组件的Binder对象接收客户端的启动服务请求信息;根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务;其中,所述服务管理组件管理其所在的进程中的所有服务,所述服务管理组件与所述客户端运行在不同的进程中。在基于本专利技术上述方法的另一个实施例中,所述通过服务管理组件的Binder对象接收客户端的启动服务请求信息,包括:根据所述启动服务请求信息调用所述服务管理组件的AIDL接口对象的startService函数。在基于本专利技术上述方法的另一个实施例中,所述根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务,包括:通过所述服务管理组件中继承所述AIDL接口的内部类对象访问所述服务管理组件核心类的startService函数;其中所述服务管理组件的核心类实现所述AIDL接口。在基于本专利技术上述方法的另一个实施例中,所述根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务,包括:根据所述启动服务请求信息,检测在所述服务管理组件中是否保存有目标服务安装信息;若在所述服务管理组件中保存有目标服务安装信息,获取所述目标服务安装信息;若在所述服务管理组件中未保存有目标服务安装信息,创建目标服务安装信息。在基于本专利技术上述方法的另一个实施例中,所述创建目标服务安装信息,包括:根据所述启动服务请求信息,检测在所述服务管理组件中是否保存有提供目标服务的插件;若在所述服务管理组件中保存有提供目标服务的插件,从所述插件中获取目标服务的ServiceInfo对象;若在所述服务管理组件中未保存有提供目标服务的插件,从提供目标服务的插件的安装包中获取目标服务的ServiceInfo对象;基于所述启动服务请求信息和所述目标服务的ServiceInfo对象,创建目标服务安装信息。在基于本专利技术上述方法的另一个实施例中,所述创建目标服务安装信息之后,还包括:在所述服务管理组件中保存所述目标服务安装信息。在基于本专利技术上述方法的另一个实施例中,所述创建目标服务安装信息之后,还包括:基于所述目标服务安装信息安装目标服务。在基于本专利技术上述方法的另一个实施例中,所述获取所述目标服务安装信息之后,还包括:根据所述目标服务安装信息,检测在所述服务管理组件中是否保存有目标服务;若在所述服务管理组件中保存有目标服务,调用所述目标服务的onStartCommand函数;若在所述服务管理组件中未保存有目标服务,基于所述目标服务安装信息安装目标服务。在基于本专利技术上述方法的另一个实施例中,所述基于所述目标服务安装信息安装目标服务,包括:获取提供目标服务的插件的Context对象;基于所述目标服务安装信息利用提供目标服务的插件的Context对象创建目标服务;初始化所述目标服务。在基于本专利技术上述方法的另一个实施例中,所述基于所述目标服务安装信息利用提供目标服务的插件的Context对象创建目标服务,包括:从提供目标服务的插件的Context对象获取所述插件的类加载器;从所述目标服务安装信息获取目标服务的全类名;基于所述目标服务的全类名,通过反射机制利用所述插件的类加载器获取所述目标服务的系统类对象;通过反射机制调用所述目标服务的系统类的newInstance来调用构造函数创建目标服务。在基于本专利技术上述方法的另一个实施例中,所述初始化所述目标服务,包括:通过反射机制调用所述目标服务的attachBaseContext的函数;调用所述目标服务的onCreate函数。在基于本专利技术上述方法的另一个实施例中,所述基于所述目标服务安装信息安装目标服务之后,还包括:在所述服务管理组件中保存所述目标服务。在基于本专利技术上述方法的另一个实施例中,所述基于所述目标服务安装信息安装目标服务之后,还包括:调用所述目标服务的onStartCommand函数。根据本专利技术实施例的另一个方面,提供一种启动插件服务的装置,包括:接收单元,用于通过服务管理组件的Binder对象接收客户端的启动服务请求信息;执行单元,用于根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务;其中,所述服务管理组件管理其所在的进程中的所有服务,所述服务管理组件与所述客户端运行在不同的进程中。在基于本专利技术上述装置的另一个实施例中,所述接收单元,具体用于根据所述启动服务请求信息调用所述服务管理组件的AIDL接口对象的startService函数。在基于本专利技术上述装置的另一个实施例中,所述执行单元,具体用于通过所述服务管理组件中继承所述AIDL接口的内部类对象访问所述服务管理组件核心类的startService函数;其中,所述服务管理组件的核心类实现所述AIDL接口。在基于本专利技术上述装置的另一个实施例中,所述执行单元,包括:第一检测模块,用于根据所述启动服务请求信息,检测在所述服务管理组件中是否保存有目标服务安装信息;获取模块,用于根据所述第一检测模块的检测结果,响应于在所述服务管理组件中保存有目标服务安装信息,获取所述目标服务安装信息;创建模块,用于根据所述第一检测模块的检测结果,响应于在所述服务管理组件中未保存有目标服务本文档来自技高网
...
启动插件服务的方法、装置和终端设备

【技术保护点】
一种启动插件服务的方法,其特征在于,包括:通过服务管理组件的Binder对象接收客户端的启动服务请求信息;根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务;其中,所述服务管理组件管理其所在的进程中的所有服务,所述服务管理组件与所述客户端运行在不同的进程中。

【技术特征摘要】
1.一种启动插件服务的方法,其特征在于,包括:通过服务管理组件的Binder对象接收客户端的启动服务请求信息;根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务;其中,所述服务管理组件管理其所在的进程中的所有服务,所述服务管理组件与所述客户端运行在不同的进程中。2.根据权利要求1所述的方法,其特征在于,所述通过服务管理组件的Binder对象接收客户端的启动服务请求信息,包括:根据所述启动服务请求信息调用所述服务管理组件的AIDL接口对象的startService函数;所述根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务,包括:通过所述服务管理组件中继承所述AIDL接口的内部类对象访问所述服务管理组件核心类的startService函数;其中所述服务管理组件的核心类实现所述AIDL接口。3.根据权利要求1或2所述的方法,其特征在于,所述根据所述启动服务请求信息启动所述服务管理组件所在的进程中的目标服务,包括:根据所述启动服务请求信息,检测在所述服务管理组件中是否保存有目标服务安装信息;若在所述服务管理组件中保存有目标服务安装信息,获取所述目标服务安装信息;若在所述服务管理组件中未保存有目标服务安装信息,创建目标服务安装信息。4.根据权利要求3所述的方法,其特征在于,所述创建目标服务安装信息,包括:根据所述启动服务请求信息,检测在所述服务管理组件中是否保存有提供目标服务的插件;若在所述服务管理组件中保存有提供目标服务的插件,从所述插件中获取目标服务的ServiceInfo对象;若在所述服务管理组件中未保存有提供目标服务的插件,从提供目标服务的插件的安装包中获取目标服务的S...

【专利技术属性】
技术研发人员:张炅轩
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

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

1