插件加载方法及装置制造方法及图纸

技术编号:13965891 阅读:59 留言:0更新日期:2016-11-09 12:03
本发明专利技术提供了一种插件加载方法及装置。该方法包括:将插件加载事件拆分为独立的至少一个加载阶段,其中,各个加载阶段对应不同的插件内容;当接收到插件加载的请求时,确定所述请求对应的目标加载阶段;加载所述目标加载阶段对应的插件内容。本发明专利技术实施例通过对插件的加载做分阶段处理,能够实现按需加载,即只需加载目标加载阶段的那部分插件内容,其余的均无需加载,可以节省大量无用内容的加载时间,减小内存占用。

【技术实现步骤摘要】

本专利技术涉及计算机处理
,特别是一种插件加载方法及装置
技术介绍
在软件开发中,为了方便对软件进行功能扩展,可以采用插件方式进行开发,将软件所要实现的一个一个功能封装在插件中,最后将各个插件集成在软件主程序包中一同发布。相关技术中,在加载插件时,需要加载插件的所有内容,即使获取插件部分信息,也需要将所有内容加载进来,对性能、内存占用等影响较大,亟待解决这一技术问题。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的插件加载方法及相应的装置。依据本专利技术的一方面,提供了一种插件加载方法,包括:将插件加载事件拆分为独立的至少一个加载阶段,其中,各个加载阶段对应不同的插件内容;当接收到插件加载的请求时,确定所述请求对应的目标加载阶段;加载所述目标加载阶段对应的插件内容。可选地,所述至少一个加载阶段包括下列至少之一:插件信息的获取、插件资源的加载、插件代码的加载。可选地,当所述目标加载阶段为插件信息的获取时,加载所述目标加载阶段对应的插件内容,包括:在第一缓存中查找所述目标加载阶段对应的插件信息;若查找到,则从所述第一缓存中获取所述插件信息。可选地,在第一缓存中查找所述目标加载阶段对应的插件信息,包括:在第一缓存中获取PackageInfo对象,查找是否存在所述目标加载阶段对应的插件信息。可选地,所述方法还包括:在第一缓存中查找所述目标加载阶段对应的插件信息时,若未查找到,则从插件安装包处获取所述插件信息。可选地,从插件安装包处获取所述插件信息,包括:调用PackageManager.getPackageArchiveInfo方法,等待操作系统生成并返回给PackageInfo对象,其中,所述方法中包括用于获取所述插件信息的参数;从返回的所述PackageInfo对象中获取所述插件信息。可选地,所述方法还包括:修改所述PackageInfo对象中安装包和/或资源的路径。可选地,所述方法还包括:将修改后的所述PackageInfo对象缓存至所述第一缓存。可选地,将修改后的所述PackageInfo对象缓存至所述第一缓存,包括:新建ComponentList对象;利用所述ComponentList对象缓存修改后的所述PackageInfo对象。可选地,修改后的所述PackageInfo对象包括下列至少之一:Activity组件、Service组件、Provider组件、Receiver组件;ApplicationInfo对象;metaData字段。可选地,当所述目标加载阶段为插件资源的加载时,加载所述目标加载阶段对应的插件内容,包括:在第二缓存中查找所述目标加载阶段对应的插件资源;若查找到,则从所述第二缓存中加载所述插件资源。可选地,在第二缓存中查找所述目标加载阶段对应的插件资源,包括:在第二缓存中获取Resources对象,查找是否存在所述目标加载阶段对应的插件资源。可选地,所述方法还包括:若在第二缓存中查找所述目标加载阶段对应的插件资源时,若未查找到,则从PackageManager.getResourcesForApplication方法中获取Resources对象,其中,所述方法中包括mPackageInfo.applicationInfo参数;从所述Resources对象中加载所述插件资源。可选地,当所述目标加载阶段为插件代码的加载时,加载所述目标加载阶段对应的插件内容,包括:在第三缓存中查找所述目标加载阶段对应的插件代码;若查找到,则从所述第三缓存中获取所述插件代码。可选地,在第三缓存中查找所述目标加载阶段对应的插件代码,包括:在第三缓存中获取DexClassLoader对象,查找是否存在所述目标加载阶段对应的插件代码。可选地,所述方法还包括:若在第三缓存中查找所述目标加载阶段对应的插件代码时,若未查找到,则创建并缓存DexClassLoader对象;利用所述DexClassLoader对象,加载所述目标加载阶段对应的插件代码。可选地,所述DexClassLoader对象的第一个参数是安装包的路径,第二个参数是Dex优化后文件的存放位置,第三个参数是指向ClassLoader的父类加载器。可选地,所述方法还包括:若在第三缓存中查找所述目标加载阶段对应的插件代码时,若未查找到,则创建并缓存PluginContext对象;利用所述PluginContext对象,加载所述目标加载阶段对应的插件代码。可选地,所述PluginContext对象的第一个参数为主程序的Context对象,第二个参数是插件默认主题,第三个参数是插件的ClassLoader,第四个参数是插件的资源对象,第五个参数是插件名。依据本专利技术的另一方面,还提供了一种插件加载装置,包括:拆分模块,适于将插件加载事件拆分为独立的至少一个加载阶段,其中,各个加载阶段对应不同的插件内容;确定模块,适于当接收到插件加载的请求时,确定所述请求对应的目标加载阶段;加载模块,适于加载所述目标加载阶段对应的插件内容。可选地,所述至少一个加载阶段包括下列至少之一:插件信息的获取、插件资源的加载、插件代码的加载。可选地,所述加载模块还适于:当所述目标加载阶段为插件信息的获取时,在第一缓存中查找所述目标加载阶段对应的插件信息;若查找到,则从所述第一缓存中获取所述插件信息。可选地,所述加载模块还适于:在第一缓存中获取PackageInfo对象,查找是否存在所述目标加载阶段对应的插件信息。可选地,所述加载模块还适于:在第一缓存中查找所述目标加载阶段对应的插件信息时,若未查找到,则从插件安装包处获取所述插件信息。可选地,所述加载模块还适于:调用PackageManager.getPackageArchiveInfo方法,等待操作系统生成并返回给PackageInfo对象,其中,所述方法中包括用于获取所述插件信息的参数;从返回的所述PackageInfo对象中获取所述插件信息。可选地,所述装置还包括:修改模块,适于修改所述PackageInfo对象中安装包和/或资源的路径。可选地,所述装置还包括:缓存模块,适于将修改后的所述PackageInfo对象缓存至所述第一缓存。可选地,所述缓存模块还适于:新建ComponentList对象;利用所述ComponentList对象缓存修改后的所述PackageInfo对象。可选地,修改后的所述PackageInfo对象包括下列至少之一:Activity组件、Service组件、Provider组件、Receiver组件;ApplicationInfo对象;metaData字段。可选地,所述加载模块还适于:当所述目标加载阶段为插件资源的加载时,在第二缓存中查找所述目标加载阶段对应的插件资源;若查找到,则从所述第二缓存中加载所述插件资源。可选地,所述加载模块还适于:在第二缓存中获取Resources对象,查找是否存在所述目标加载阶段对应的插件资源。可选地,所述加载模块还适于:若在第二缓存中查找所述目标加载阶段对应的插件资源时,若未查找到,则从PackageManager.getResourcesForApplication方法中获取Resources对象,其中,所述方法中包括m本文档来自技高网...

【技术保护点】
一种插件加载方法,包括:将插件加载事件拆分为独立的至少一个加载阶段,其中,各个加载阶段对应不同的插件内容;当接收到插件加载的请求时,确定所述请求对应的目标加载阶段;加载所述目标加载阶段对应的插件内容。

【技术特征摘要】
1.一种插件加载方法,包括:将插件加载事件拆分为独立的至少一个加载阶段,其中,各个加载阶段对应不同的插件内容;当接收到插件加载的请求时,确定所述请求对应的目标加载阶段;加载所述目标加载阶段对应的插件内容。2.根据权利要求1所述的方法,其中,所述至少一个加载阶段包括下列至少之一:插件信息的获取、插件资源的加载、插件代码的加载。3.根据权利要求2所述的方法,其中,当所述目标加载阶段为插件信息的获取时,加载所述目标加载阶段对应的插件内容,包括:在第一缓存中查找所述目标加载阶段对应的插件信息;若查找到,则从所述第一缓存中获取所述插件信息。4.根据权利要求3所述的方法,其中,在第一缓存中查找所述目标加载阶段对应的插件信息,包括:在第一缓存中获取PackageInfo对象,查找是否存在所述目标加载阶段对应的插件信息。5.根据权利要求3或4所述的方法,其中,还包括:在第一缓存中查找所述目标加载阶段对应的插件信息时,若未查找到,则从插件安装包处获取所述插件信息。6.根据权利要求5所述的方法,其中,从插件安装包处获取所述插件信息,包括:调用PackageManager.getPackageArchiveInf...

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

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

1