一种Android插件框架下不同插件间启动Fragment组件的方法和装置制造方法及图纸

技术编号:18349938 阅读:15 留言:0更新日期:2018-07-01 22:49
本申请公开了一种Android插件框架下不同插件间启动Fragment组件的方法,包括:系统接收到向Activity组件上添加Fragment组件的命令;根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名;根据所述插件包名安装运行所述插件包;使用所述插件包的类加载器加载运行所述Fragment组件。通过本申请中的方案,解决了现有技术不支持Activity组件启动不同插件中Fragment组件的问题,使应用程序开发者能够在插件化环境下,通过直接使用Fragment组件实现多终端屏幕分辨率适配,从而充分发挥Fragment组件在屏幕适配方面的显著优势,同时,简化了Android客户端应用程序的代码架构,显著减少不必要的工作量,提高了工作效率。

【技术实现步骤摘要】
一种Android插件框架下不同插件间启动Fragment组件的方法和装置
本申请涉及智能終端屏幕显示领域,具体涉及一种用于不同Android插件间启动Fragment组件的方法。
技术介绍
当前国内Android手机应用软件发展迅速,其中很多大型的应用软件在业务快速发展过程中,遇到2个通用典型问题需要解决:1.从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到单个应用程序方法数限制上限65536;2.在业务层面上,应用程序更新迭代加快,新的应用程序往往有其时效性,然而功能模块的解耦以及维护团队的分离也是大势所趋,一个应用程序的不同模块往往由多个不同的团队维护,如果每个模块升级新功能都需要对整个应用程序进行升级,则需要较长的时间成本,严重影响应用程序的开发效率。Android插件化技术在此背景下应运而生。目前国内有很多插件化技术框架被广泛应用,具体通过如下方法完成:打包阶段生成多个插件APK和一个主APK;主APK在启动阶段初始化插件技术框架;主APK通过Android四大基本组件(Activity,Service,BroadcastReceiver,ContentProvider)调用插件APK;插件技术框架安装插件APK然后执行。所述插件技术框架所运行的原理,主要有如下两种:静态代理模式,如dynamic-load-APK、Direct-Load-APK等插件技术框架。这种模式的插件技术框架的主要原理是通过在宿主APK中定义Activity组件,代理插件中的Activity组件所有生命周期,保证插件Activity组件正常运行;动态拦截hook模式,如360DroidPlugin、small等插件技术框架,这种模式的插件技术框架的主要原理是通过动态拦截Android系统接口或方法,从底层实现插件安装升级。另一方面,Android系统运行在各种各样的设备中,有小屏幕的手机、超大屏幕的平板甚至电视。针对屏幕尺寸的差距,很多情况下,开发者先针对手机开发一套应用程序,然后拷贝一份,修改布局以适应其他屏幕尺寸的设备,这很大程度上增加了开发者的工作量,延长了开发周期。为了解决这样的问题,Android3.0推出了Fragment组件。Fragment的含义为“碎片”,Fragment组件承担一部分原先由Activity组件承担的工作;通过Fragment组件,可以将屏幕分解为多个Fragment(碎片),同时负责控制Activity组件基础上显示View空间以及它们之间的逻辑。通过Fragment组件可以将屏幕碎片化为多个Fragment后,Activity组件只需要花精力去管理当前屏幕内应该显示哪些Fragments,以及应该对它们进行如何布局就行了。也就是,通过Fragment组件可以组合一系列有关联的UI组件,并管理它们之间的逻辑,而Activity组件负责在不同屏幕下(例如横竖屏)布局不同的Fragments组件的组合。同时,Fragment组件的使用特性,使其在客户端代码架构组织、多终端屏幕分辨率适配等方面发挥着重要作用。在现有技术下,Fragement组件有静态使用模式和动态使用模式两种启动模式。所述静态使用模式是使用Fragment组件最简单的一种方式,把Fragment组件当成普通的控件,直接写在Activity组件的布局文件中;所述动态使用模式是通过编程方式,使用系统类FragmentManager直接将Fragment添加到Activity组件中,以实现动态的加载。不论静态启动模式还是动态启动模式,Fragement组件最终都是嵌入Activity组件中,运行生命周期受Activity组件控制。在Android插件化的大背景下,Fragment组件也越来越多地在插件化技术中应用。目前插件包定义的Fragment组件经常与插件内部Activity组件配合使用,与标准APK调用方式类似,绝大部分插件化技术框架都能够支持。然而,在实际业务需求中,不同插件间Fragment组件与Activity组件配合使用的场景越来越多,Activity组件、Fragment组件很可能被分配到不同的插件模块中,由于Fragment组件不是Android系统标准的四大组件之一,此时Android系统将无法找到Fragment组件,从而使Activity组件无法正常调用处于其他组件中的Fragment组件。这样,就会造成以下问题:不同插件之间无法实现相互调用Fragment组件,即Fragment组件只能在插件内部使用,这极大地限制了Fragment组件的使用场景。在多终端屏幕分辨率适配时,只能使用自定义view或者Activity组件实现类似Fragment组件的功能,而Fragment组件在屏幕适配方面的显著优势无法得到充分的发挥。在一个Android客户端应用程序的代码架构模式设计中,不得不考虑上述问题,开发者需要更复杂的代码逻辑,耗费更多的脑力和体力劳动,显著增加了不必要的工作量。
技术实现思路
本申请提供一种Android插件框架下不同插件间启动Fragment组件的方法和装置,以解决现有技术不支持Activity组件启动不同插件中Fragment组件的问题。本申请提供一种Android插件框架下不同插件间启动Fragment组件的方法,包括:系统接收到向Activity组件上添加Fragment组件的命令;根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名;根据所述插件包名安装运行所述插件包;使用所述插件包的类加载器加载运行所述Fragment组件。优选的,所述根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名的步骤,所述预定的方法为如下方法:启动预先自定义的类加载器;所述自定义的类加载器根据所述Fragment组件的类名查找并解析预先定义好的插件清单文件,获得所述Fragment组件所在插件包名。优选的,所述自定义类加载器根据所述Fragment组件的类名查找并解析预先定义好的插件清单文件,获得所述Fragment组件所在插件包名采用如下方式实现:复写所述自定义类加载器中findClass方法,实现对所述预先定义好的插件清单文件的读取;在读取的插件清单文件中,查找所述Fragment组件的类名对应的插件包名。优选的,所述启动预先自定义类加载器的过程是通过将代理hook系统类加载器PathClassLoader,替换成自定义类加载器实现启动的。优选的,所述根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名的步骤,所述预定的方法为如下方法:读取预先在客户端硬编码中定义好的所述Fragment组件的类名与其所在插件包名映射,获得其所在的插件包名。优选的,在所述插件包的类加载器加载运行所述Fragment组件的步骤之后,检测所述Fragment组件是否加载成功,若否,则执行以下步骤:所述Fragment组件被替换成预先在主APK定义的代理类;对所述代理类执行实例化,通过反射机制在其构造函数中获取所述Fragment组件的类名;通过所述Fragment组件的类名,获得对应所述Fragment组件的URL链接;实例化系统Webv本文档来自技高网
...
一种Android插件框架下不同插件间启动Fragment组件的方法和装置

【技术保护点】
1.一种Android插件框架下不同插件间启动Fragment组件的方法,其特征在于,包括:系统接收到向Activity组件上添加Fragment组件的命令;根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名;根据所述插件包名安装运行所述插件包;使用所述插件包的类加载器加载运行所述Fragment组件。

【技术特征摘要】
1.一种Android插件框架下不同插件间启动Fragment组件的方法,其特征在于,包括:系统接收到向Activity组件上添加Fragment组件的命令;根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名;根据所述插件包名安装运行所述插件包;使用所述插件包的类加载器加载运行所述Fragment组件。2.根据权利要求1所述的方法,其特征在于,所述根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名的步骤,所述预定的方法为如下方法:启动预先自定义的类加载器;所述自定义的类加载器根据所述Fragment组件的类名查找并解析预先定义好的插件清单文件,获得所述Fragment组件所在插件包名。3.根据权利要求2所述的方法,其特征在于,所述自定义类加载器根据所述Fragment组件的类名查找并解析预先定义好的插件清单文件,获得所述Fragment组件所在插件包名采用如下方式实现:复写所述自定义类加载器中findClass方法,实现对所述预先定义好的插件清单文件的读取;在读取的插件清单文件中,查找所述Fragment组件的类名对应的插件包名。4.根据权利要求2所述的方法,其特征在于,所述启动预先自定义类加载器的过程是通过将代理hook系统类加载器PathClassLoader,替换成自定义类加载器实现启动的。5.根据权利要求1所述的方法,其特征在于,所述根据所述Fragment组件的类名,采用预定的方法,获得其所在的插件包名的步骤,所述预定的方法为如下方法:读取预先在客户端硬编码中定义好的所述Fragment组件的类名与其所在插件包名映射,获得其所在的插件包名。6.根据权利要求1所述的方法,其特征在于,在所述插件包的类加载器加载运行所述Fragment组件的步骤之后,检测所述Fragment组件是否加载成功,若否,则执行以下步骤:所述Fragment组件被替换成预先在主APK定义的代理类;对所述代理类执行实例化,通过反射机制在其构造函数中获取所述Fragment组件的类名;通过所述Fragment组件的类名,获得对应所述Fragment组件的URL链接;实例化系统WebviewFragment组件,将所述URL链接设置进该组件;将所述WebviewFragment组件添加到Activity组件中,替换所述代理类;或者,将所述WebviewFragment组件覆盖在所述代理类的上面,并执行所述WebviewFragment组件。7.根据权利要求6所述的方法,其特征在于,所述通过所述Fragment组件的类名,获得对应所述Fragment组件的URL链接,通过如下方法中的一种实现:读取配置文件中Fragment组件的类名与其所对应的URL链接的映射关系,通过Fragment组件的名称映射,获得对应所述Fragment组件的URL链接;或,将所述Fragment组件的类名传入预先设定好的服务器端,获得服务器端输出的对应所述Fragment组件的URL链接;或,读取预先在客户端硬编码中定义好的Fragment组件的类名与URL链接映射,获得对应所述Fragment组件的URL链接。8.一种Android插件框架下不同插件间启动Fragment组件的装置,其特征在于,包括:接收单元,用于接收来自系统的向Activity组件上添加F...

【专利技术属性】
技术研发人员:黄定磊
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

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

1