CN111488144B - 一种数据处理方法以及设备 - Google Patents
一种数据处理方法以及设备 Download PDFInfo
- Publication number
- CN111488144B CN111488144B CN202010306069.2A CN202010306069A CN111488144B CN 111488144 B CN111488144 B CN 111488144B CN 202010306069 A CN202010306069 A CN 202010306069A CN 111488144 B CN111488144 B CN 111488144B
- Authority
- CN
- China
- Prior art keywords
- class
- life cycle
- application program
- name
- lifecycle
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 15
- 238000000034 method Methods 0.000 claims abstract description 81
- 230000006870 function Effects 0.000 claims description 97
- 238000012545 processing Methods 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 6
- 238000011161 development Methods 0.000 abstract description 10
- 238000012423 maintenance Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
- G06F8/355—Round-trip engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开一种数据处理方法以及设备,其中方法包括如下步骤:当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;在所述声明文件中,获取所述生命周期实现类的类名;根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。采用本申请,保证注册的正确率,提高工作效率,节省开发的成本。
Description
技术领域
本申请涉及电子技术领域,尤其涉及一种数据处理方法以及设备。
背景技术
在安卓开发的过程中,由于业务不断增长,项目的源代码越来越多,工程日益庞大,为了解决不同业务代码耦合严重,改动风险大,难以维护的问题,通常会采用模块化的方案来解决,按照业务类型对项目进行划分,将不同业务放置到独立的子工程(模块工程)中进行开发。每个安卓应用程序在启动的时候,都会由系统调用应用程序(Application)类,在Application类中实现一些应用初始化的操作,例如第三方SDK初始化。对于一个应用程序,Application类只存在于壳工程中,模块工程中是不能存在Application类的。而模块工程与壳工程是隔离开的,模块的初始化逻辑无法直接放到壳工程的Application中。
为了让模块也可以在Application中去执行自己独有的初始化逻辑,现有的做法是,抽象出一个生命周期接口,由每个模块去实现这个接口,并在实现类中加入模块的初始化逻辑,得到若干个生命周期实现类,然后在壳工程的Application类中统一调用所有模块工程的生命周期实现类,让模块的初始化逻辑在Application类中执行。
在上面的模块生命周期管理方案中,由于所有模块工程的生命周期实现类需要在壳工程的Application类中逐个被调用注册。开发者需要知道集成了哪些模块,手动注册生命周期实现类,并且需要找出所有这些模块的生命周期实现类,在壳工程的Application类中手动实例化所有生命周期实现类,因此,每新增或者删除一个模块,都需要重新去修改壳工程的代码,在注册过程中,若出现遗漏,就会导致被遗漏的模块在运行时出现异常,并且注册的过程易出错、工作量大、不利于代码维护。
发明内容
本申请实施例提供一种数据处理方法以及设备,可以提高注册的正确率,提高工作效率,节省开发的成本。
本申请实施例一方面提供了一种数据处理方法,可包括:
当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
在所述声明文件中,获取所述生命周期实现类的类名;
根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;
调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
其中,所述在所述声明文件中,获取所述生命周期实现类的类名,包括:
在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点;
读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名。
其中,获取所述生命周期实现类的类名之后,还包括:将获取到的生命周期实现类的类名保存在类名列表中;
根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,包括:
遍历读取所述类名列表中的生命周期实现类的类名;
每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;
调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例。
其中,所述应用程序的声明文件的生成过程包括:
当接收到所述应用程序的编译指令,确定所述应用程序直接引用的功能模块;
查找所述应用程序直接引用的功能模块是否继续引用其他功能模块,若是则递归查找所述其他功能模块是否引用其他功能模块,直至每个其他功能模块不存在引用的其他功能模块;将查找到的所有其他功能模块确定为所述应用程序间接引用的功能模块;
获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名;
将读取到的生命周期实现类的类名保存在应用程序的声明文件中。
其中,确定所述应用程序直接引用的功能模块,包括:
获得所述应用程序的配置文件,所述配置文件记录有所述应用程序直接引用的功能模块的名称;
根据所述配置文件,确定所述应用程序直接引用的功能模块。
其中,获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名,包括:
获得所述应用程序直接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名;
获得所述应用程序间接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名。
本申请实施例一方面提供了一种数据处理设备,可包括:
文件获取单元,用于当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
类名获取单元,用于在所述声明文件中,获取所述生命周期实现类的类名;
实例创建单元,用于根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;
方法调用单元,用于调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
其中,所述类名获取单元具体用于:
在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点;
读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名。
其中,还包括:将获取到的生命周期实现类的类名保存在类名列表中;
所述实例创建单元具体用于:
遍历读取所述类名列表中的生命周期实现类的类名;
每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;
调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例。
其中,所述应用程序的声明文件的生成过程包括:
当接收到所述应用程序的编译指令,确定所述应用程序直接引用的功能模块;
查找所述应用程序直接引用的功能模块是否继续引用其他功能模块,若是则递归查找所述其他功能模块是否引用其他功能模块,直至每个其他功能模块不存在引用的其他功能模块;将查找到的所有其他功能模块确定为所述应用程序间接引用的功能模块;
获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名;
将读取到的生命周期实现类的类名保存在应用程序的声明文件中。
其中,确定所述应用程序直接引用的功能模块,包括:
获得所述应用程序的配置文件,所述配置文件记录有所述应用程序直接引用的功能模块的名称;
根据所述配置文件,确定所述应用程序直接引用的功能模块。
其中,获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名,包括:
获得所述应用程序直接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名;
获得所述应用程序间接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名。
本申请实施例一方面提供了一种计算机可读存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行上述的方法步骤。
本申请实施例一方面提供了一种计算机设备,包括处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行上述的方法步骤。
在本申请实施例中,当接收到应用程序的运行指令,获取所述应用程序的声明文件后,在所述声明文件中,获取所述生命周期实现类的类名;根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。采用上述方法,避免了手动选择功能模块进行功能模块生命周期的注册,通过在声明文件中,获取生命周期实现类的类名,开发人员无需人工查找出引用的功能模块,以及每个模块的生命周期实现类,同时人工注册存在的易出错、工作量大、不利于代码维护的问题,保证了注册的正确率,提高了工作效率,节省了开发的成本。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种数据处理的系统架构图;
图2是本申请实施例提供的一种数据处理方法的流程示意图;
图3是本申请实施例提供的一种数据处理方法的流程示意图;
图4是本申请实施例提供的一种数据处理方法的场景示意图;
图5是本申请实施例提供的一种数据处理设备的结构示意图;
图6是本申请实施例提供的一种数据处理设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,是本发明实施例提供的一种数据处理的系统架构图。服务器10f通过交换机10e和通信总线10d与用户终端集群建立连接,用户终端集群可包括:用户终端10a、用户终端10b、...用户终端10c。当接收到应用程序的运行指令,用户终端获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类,在所述声明文件中,用户终端获取所述生命周期实现类的类名,用户终端根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。本申请实施例涉及的数据处理设备可以包括具有数据处理的用户终端,所述用户终端包括:平板电脑、智能手机、个人电脑(PC)、笔记本电脑、掌上电脑等终端设备。
请参见图2,为本申请实施例提供了一种数据处理方法的流程示意图。该数据处理方法可以应用在数据处理设备如图1所示的用户终端上。如图2所示,本申请实施例的所述方法可以包括以下步骤S101-步骤S104。
S101,当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
具体的,当接收到应用程序的运行指令,数据处理设备获取所述应用程序的声明文件,可以理解的是,所述运行指令可以是针对应用程序的启动指令,具体可以是点击指令或者是触屏指令,所述应用程序运行需要引用至少一个功能模块,每个功能模块具有各自的生命周期实现类,所述生命周期实现类用于执行模块的初始化逻辑。
所述声明文件是应用程序中的一种用于指示应用程序所引用的功能模块的标记语言,具体可以是应用程序的“AndroidManifest.xml”文件。
S102,在所述声明文件中,获取所述生命周期实现类的类名;
具体的,数据处理设备在所述声明文件中,获取所述生命周期实现类的类名,可以理解的是,所述声明文件中包括至少一个节点信息,所述节点信息包括名称属性和值属性,所述名称属性和值属性具体可以是用户预先定义的字符串。其中名称属性为功能模块对应的生命周期实现类的全类名,值属性设置为用于表示节点类型的固定值。
所述应用程序的声明文件的是在应用程序编译时生成的,具体的,当接收到所述应用程序的编译指令时,确定所述应用程序直接引用的功能模块和间接引用的功能模块,获得所述应用程序直接引用的功能模块的生命周期实现类的类名,以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名,将读取到的生命周期实现类的类名保存在应用程序的声明文件中,其中生命周期实现类的类名可以从功能模块的声明文件中获取,应用程序的声明文件与功能模块的声明文件具有相同的结构和相同的数据类型,应用程序的声明文件可以通过合并功能模块的声明文件生成。
例如,功能模块的声明文件可以是功能模块中的“AndroidManifest.xml”文件,可以在“AndroidManifest.xml”文件的“application”节点中,自定义一个“meta-data”节点,所述“meta-data”节点的信息为节点信息,所述节点信息包括名称属性和值属性,节点信息的名称属性为功能模块对应的生命周期实现类的全类名,所述值属性设置为固定值,例如,值属性为“module_impl”。应用程序的声明文件可以通过合并直接引用的功能模块中“AndroidManifest.xml”文件的节点信息和间接引用的功能模块中“AndroidManifest.xml”文件的节点信息生成。
S103,根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;
具体的,数据处理设备根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,可以理解的是,所述生命周期实现类的全类名对应功能模块的生命周期实现类的全路径,遍历声明文件中的名称属性,通过对象创建方法,创建名称属性对应的功能模块对应的生命周期实现类对象,使用生命周期实现类对象生成生命周期实现类的实例,所述生命周期实现类对象具体可以是通过函数Class.forName(String className)创建出class对象。
S104,调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
具体的,数据处理设备调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期,可以理解的是,通过生命周期实现类的实例完成功能模块的生命周期注册逻辑,然后调用实例中的生命周期方法,以注册所述功能模块的生命周期,根据所述生命周期方法对所述功能模块进行模块初始化。
在本申请实施例中,当接收到应用程序的运行指令,获取所述应用程序的声明文件后,在所述声明文件中,获取所述生命周期实现类的类名;根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。采用上述方法,避免了手动选择功能模块进行功能模块生命周期的注册,通过在声明文件中,获取生命周期实现类的类名,开发人员无需人工查找出引用的功能模块,以及每个模块的生命周期实现类,同时人工注册存在的易出错、工作量大、不利于代码维护的问题,保证了注册的正确率,提高了工作效率,节省了开发的成本。
请参见图3,为本申请实施例提供了一种数据处理方法的流程示意图。如图3所示,本申请实施例的所述方法可以包括以下步骤S201-步骤S205。
S201,当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
具体的,当接收到应用程序的运行指令,数据处理设备获取所述应用程序的声明文件,可以理解的是,所述运行指令可以是针对应用程序的启动指令,具体可以是点击指令或者是触屏指令,所述应用程序运行需要引用至少一个功能模块,每个功能模块具有各自的生命周期实现类,所述生命周期实现类用于执行模块的初始化逻辑。所述声明文件是应用程序中的一种用于指示应用程序所引用的功能模块的标记语言,具体可以是应用程序的“AndroidManifest.xml”文件。
所述应用程序的声明文件的是在应用程序编译时生成的,具体的,当接收到所述应用程序的编译指令时,获得所述应用程序的配置文件,所述配置文件记录有所述应用程序直接引用的功能模块的名称;根据所述配置文件,确定所述应用程序直接引用的功能模块。
查找所述应用程序直接引用的功能模块是否继续引用其他功能模块,若是则递归查找所述其他功能模块是否引用其他功能模块,直至每个其他功能模块不存在引用的其他功能模块,将查找到的所有其他功能模块确定为所述应用程序间接引用的功能模块。
获得所述应用程序直接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名;获得所述应用程序间接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名。将读取到的生命周期实现类的类名保存在应用程序的声明文件中。
其中生命周期实现类的类名可以从功能模块的声明文件中获取,应用程序的声明文件与功能模块的声明文件具有相同的结构和相同的数据类型,应用程序的声明文件可以通过合并功能模块的声明文件生成。
S202,在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点;
具体的,数据处理设备在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点,可以理解的是,所述声明文件中包括至少一个节点信息,所述节点信息包括名称属性和值属性,所述名称属性和值属性具体可以是用户预先定义的字符串。其中名称属性为功能模块对应的生命周期实现类的全类名,值属性设置为用于表示节点类型的固定值。
例如,声明文件可以是的“AndroidManifest.xml”文件,在“AndroidManifest.xml”文件中包括至少一个节点,每个节点信息包括名称属性和值属性,节点信息的名称属性为功能模块对应的生命周期实现类的全类名,将应用程序的直接引用的功能模块和间接引用的功能模块的值属性设置为“module_impl”,则在声明文件中查找节点的值属性为“module_impl”的目标节点。
S203,读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名,将获取到的生命周期实现类的类名保存在类名列表中;
具体的,数据处理设备读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名,将获取到的生命周期实现类的类名保存在类名列表中,可以理解的是,根据值属性确定目标节点后,从所述目标节点的节点信息中获取目标节点的名称属性,所述名称属性为目标节点对应的目标模块的生命周期实现类的全类名,并将所述名称属性存储至节点列表,所述节点列表中包括目标节点对应的功能模块的生命周期实现类的类名。
S204,遍历读取所述类名列表中的生命周期实现类的类名;每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例。
具体的,数据处理设备遍历读取所述类名列表中的生命周期实现类的类名;每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例,可以理解的是,数据处理设备获取节点列表中的节点信息的名称属性,所述名称属性为目标模块的生命周期实现类的全类名,所述生命周期实现类的全类名对应目标模块的生命周期实现类的全路径,遍历节点列表中的生命周期实现类的类名,使用所述类名调用类对象创建方法,创建目标节点所属的功能模块对应的生命周期实现类对象,使用目标对象生成生命周期实现类的实例,具体的,可以使用Class.forName(StringclassName)方法创建出class对象,并使用该class对象的newInstance()方法创建出生命周期实现类的实例,数据处理设备调用生命周期实现类的实例完成功能模块的生命周期注册逻辑。
S205,调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
具体的,数据处理设备调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期,可以理解的是,通过生命周期实现类的实例完成功能模块的生命周期注册逻辑,然后调用实例中的生命周期方法,以注册所述功能模块的生命周期,根据所述生命周期方法对所述功能模块进行模块初始化。
需要说明的是,上述步骤可以集成封装在一个方法类里,例如Modular.register()方法,Modular.register()方法中包括目标对象创建和生命周期实现类的实例的创建,调用Modular.register()方法可以完成模块的生命周期注册逻辑,对所述目标模块进行模块初始化。
上述注册功能模块的生命周期是在用户终端上实现,下面对功能模块的开发进行说明,具体的,根据功能模块的资源数据和功能模块的声明文件生成具有第一格式的目标文件,将所述目标文件存储至文件库;可以理解的是,所述功能模块的资源数据为用于实现功能模块初始化的数据,具体可以是图片、动态图、视频等,所述声明文件是功能模块中的一种用于标记,使文件其具有结构性的标记语言,具体可以是功能模块中的“AndroidManifest.xml”文件,所述目标文件是根据功能模块的资源数据和功能模块的声明文件生成的具有第一格式的文件,所述第一格式为预设的固定格式,具体可以是AndroidArchive(AAR)文件,目标文件的命名可以根据模块的名称命名,具体的,若功能模块的模块名为A,则功能模块A的目标文件为module-A.aar,将生成的目标文件存储至文件库,所述文件库用于存储具有第一格式的文件。所述目标文件中包括运行应用程序的代码和资源数据。
在本申请实施例中,当接收到应用程序的运行指令,获取应用程序的声明文件后,在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点,读取目标节点的名称属性的属性值,以得到所述生命周期实现类的类名,将获取到的生命周期实现类的类名保存在类名列表中,遍历读取所述类名列表中的生命周期实现类的类名;每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例,调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期,采用上述方法,避免了手动选择功能模块进行功能模块生命周期的注册,通过在声明文件中,获取生命周期实现类的类名,开发人员无需人工查找出引用的功能模块,以及每个模块的生命周期实现类,同时人工注册存在的易出错、工作量大、不利于代码维护的问题,保证了注册的正确率,提高了工作效率,节省了开发的成本。
下面将结合图4,为本申请实施例提供的具体实施场景进行说明,如图4所示。为本申请实施例提供了一种数据处理设备的场景示意图。
开发人员在创建目标模块的生命周期类时,将所述生命周期实现类添加至目标模块的标记文件中,具体的,在所述目标模块的标记文件中,添加与所述目标模块的生命周期实现类匹配的节点信息,所述节点信息包括名称属性和标记属性,例如,标记文件是目标模块中的“AndroidManifest.xml”文件,在“AndroidManifest.xml”文件的“application”节点中,自定义一个“meta-data”节点,所述“meta-data”节点的信息为节点信息,目标模块的生命周期实现类的全类名为“com.module.A.AModule”,标记属性为“module_impl”,则根据节点模板生成的节点信息包括节点的名称属性“com.module.A.AModule”和标记属性“module_impl”。
模块开发完成后,通过模块编译工程装置将目标模块的代码、资源数据与AndroidManifest.xml编译生成一个固定格式的目标文件,目标文件可以是AAR文件,具体的,模块A经过编译后生成目标文件A,模块B经过编译后生成目标文件B,模块C经过编译后生成目标文件C,目标文件A、目标文件B和目标文件C均为具有第一格式的文件。
壳工程编译装置在编译期间,获取功能模块的文件中AndroidManifest.xml中的meta-data节点,检测所有节点的节点信息并筛选出所有壳工程直接或者间接依赖的模块对应的节点,将筛选后的节点合并,生成待处理标记文件,通过壳工程编译装置生成壳工程应用程序。
应用程序运行时,使用PackageManager读取应用程序中AndroidManifest.xml所有的meta-data节点,通过节点信息中的标记属性对所有meta-data节点进行过滤,即获取标记属性为“module_impl”的节点,生成节点列表;根据节点列表中节点名称属性,得到所有模块的生命周期实现类的全类名,对所有模块的生命周期实现类的全类名进行遍历,逐个使用Class.forName(String className)方法创建出class对象,并使用该class对象的newInstance()方法创建出生命周期实现类的实例,然后调用生命周期实现类的实例完成目标模块的生命周期注册逻辑,对所述目标模块进行模块初始化。
需要说明的是,图4中虚线框内是本方案的内部流程,可以封装成一个生命周期注册插件,只需要调用生命周期注册插件,即可完成全部的模块生命周期注册流程。采用本方案,开发人员无需人工查找出引用了什么模块,以及每个模块的生命周期实现类,也无需逐个在壳工程的Application类中注册,增删模块也无需修改壳工程的Application类,只需要在壳工程的Application中固定引用上面的M类,即可自动完成所有模块的生命周期注册工作,避免了人工注册可能存在的遗漏问题,免除了逐个注册的工作量,也提高了代码维护的灵活性。
请参见图5,为本申请实施例提供了一种数据处理设备的结构示意图。如图5所示,本申请实施例的所述数据处理设备1可以包括:文件获取单元11、类名获取单元12、实例创建单元13、方法调用单元14。
文件获取单元11,用于当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
具体的,当接收到应用程序的运行指令,文件获取单元11获取所述应用程序的声明文件,可以理解的是,所述运行指令可以是针对应用程序的启动指令,具体可以是点击指令或者是触屏指令,所述应用程序运行需要引用至少一个功能模块,每个功能模块具有各自的生命周期实现类,所述生命周期实现类用于执行模块的初始化逻辑。
所述声明文件是应用程序中的一种用于指示应用程序所引用的功能模块的标记语言,具体可以是应用程序的“AndroidManifest.xml”文件。
类名获取单元12,用于在所述声明文件中,获取所述生命周期实现类的类名;
具体的,类名获取单元12在所述声明文件中,获取所述生命周期实现类的类名,可以理解的是,所述声明文件中包括至少一个节点信息,所述节点信息包括名称属性和值属性,所述名称属性和值属性具体可以是用户预先定义的字符串。其中名称属性为功能模块对应的生命周期实现类的全类名,值属性设置为用于表示节点类型的固定值。
所述应用程序的声明文件的是在应用程序编译时生成的,具体的,当接收到所述应用程序的编译指令时,确定所述应用程序直接引用的功能模块和间接引用的功能模块,获得所述应用程序直接引用的功能模块的生命周期实现类的类名,以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名,将读取到的生命周期实现类的类名保存在应用程序的声明文件中,其中生命周期实现类的类名可以从功能模块的声明文件中获取,应用程序的声明文件与功能模块的声明文件具有相同的结构和相同的数据类型,应用程序的声明文件可以通过合并功能模块的声明文件生成。
例如,功能模块的声明文件可以是功能模块中的“AndroidManifest.xml”文件,可以在“AndroidManifest.xml”文件的“application”节点中,自定义一个“meta-data”节点,所述“meta-data”节点的信息为节点信息,所述节点信息包括名称属性和值属性,节点信息的名称属性为功能模块对应的生命周期实现类的全类名,所述值属性设置为固定值,例如,值属性为“module_impl”。应用程序的声明文件可以通过合并直接引用的功能模块中“AndroidManifest.xml”文件的节点信息和间接引用的功能模块中“AndroidManifest.xml”文件的节点信息生成。
实例创建单元13,用于根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;
具体的,实例创建单元13根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,可以理解的是,所述生命周期实现类的全类名对应功能模块的生命周期实现类的全路径,遍历声明文件中的名称属性,通过对象创建方法,创建名称属性对应的功能模块对应的生命周期实现类对象,使用生命周期实现类对象生成生命周期实现类的实例,所述生命周期实现类对象具体可以是通过函数Class.forName(String className)创建出class对象。
方法调用单元14,用于调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
具体的,方法调用单元14调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期,可以理解的是,通过生命周期实现类的实例完成功能模块的生命周期注册逻辑,然后调用实例中的生命周期方法,以注册所述功能模块的生命周期,根据所述生命周期方法对所述功能模块进行模块初始化。
在本申请实施例中,当接收到应用程序的运行指令,获取所述应用程序的声明文件后,在所述声明文件中,获取所述生命周期实现类的类名;根据所述生命周期实现类的类名,创建所述生命周期实现类的实例;调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。采用上述方法,避免了手动选择功能模块进行功能模块生命周期的注册,通过在声明文件中,获取生命周期实现类的类名,开发人员无需人工查找出引用的功能模块,以及每个模块的生命周期实现类,同时人工注册存在的易出错、工作量大、不利于代码维护的问题,保证了注册的正确率,提高了工作效率,节省了开发的成本。
请参见图6,为本申请实施例提供了一种计算机设备的结构示意图。如图6所示,所述计算机设备1000可以包括:至少一个处理器1001,例如CPU,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据处理应用程序。
在图6所示的计算机设备1000中,网络接口1004可提供网络通讯功能,用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的数据处理应用程序,以实现上述图2-图4任一个所对应实施例中对所述数据处理方法的描述,在此不再赘述。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图2-图4任一个所对应实施例中对所述数据处理方法的描述,也可执行前文图5所对应实施例中对所述数据处理设备的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且所述计算机可读存储介质中存储有前文提及的数据处理设备所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图2-图4任一个所对应实施例中对所述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (9)
1.一种数据处理方法,其特征在于,包括:
当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
在所述声明文件中,获取所述生命周期实现类的类名;
将获取到的生命周期实现类的类名保存在类名列表中;
根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,包括:遍历读取所述类名列表中的生命周期实现类的类名;每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例;
调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
2.根据权利要求1所述的方法,其特征在于,在所述声明文件中,获取所述生命周期实现类的类名,包括:
在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点;
读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名。
3.根据权利要求1所述的方法,其特征在于,所述应用程序的声明文件的生成过程包括:
当接收到所述应用程序的编译指令,确定所述应用程序直接引用的功能模块;
查找所述应用程序直接引用的功能模块是否继续引用其他功能模块,若是则递归查找所述其他功能模块是否引用其他功能模块,直至每个其他功能模块不存在引用的其他功能模块;将查找到的所有其他功能模块确定为所述应用程序间接引用的功能模块;
获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名;
将读取到的生命周期实现类的类名保存在应用程序的声明文件中。
4.根据权利要求3所述的方法,其特征在于,确定所述应用程序直接引用的功能模块,包括:
获得所述应用程序的配置文件,所述配置文件记录有所述应用程序直接引用的功能模块的名称;
根据所述配置文件,确定所述应用程序直接引用的功能模块。
5.根据权利要求3所述的方法,其特征在于,获得所述应用程序直接引用的功能模块的生命周期实现类的类名;以及获得所述应用程序间接引用的功能模块的生命周期实现类的类名,包括:
获得所述应用程序直接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名;
获得所述应用程序间接引用的功能模块的声明文件,从所述声明文件中读取生命周期实现类的类名。
6.一种数据处理设备,其特征在于,包括:
文件获取单元,用于当接收到应用程序的运行指令,获取所述应用程序的声明文件;其中所述应用程序引用至少一个功能模块,每个功能模块具有各自的生命周期实现类;
类名获取单元,用于在所述声明文件中,获取所述生命周期实现类的类名;将获取到的生命周期实现类的类名保存在类名列表中;
实例创建单元,用于根据所述生命周期实现类的类名,创建所述生命周期实现类的实例,包括:遍历读取所述类名列表中的生命周期实现类的类名;每当读取到一个生命周期实现类的类名,使用所述类名调用类对象创建方法,以创建所述类名对应的生命周期实现类对象;调用所述生命周期实现类对象的实例创建方法,以创建所述生命周期实现类的实例;
方法调用单元,用于调用所述生命周期实现类的生命周期方法,以注册所述功能模块的生命周期。
7.根据权利要求6所述的设备,其特征在于,所述类名获取单元具体用于:
在所述声明文件包括的节点中,查找节点的值属性为生命周期实现类的目标节点;
读取所述目标节点的名称属性的属性值,以得到所述生命周期实现类的类名。
8.一种计算机可读存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-5任一项所述的方法。
9.一种计算机设备,其特征在于,其特征在于,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1-5任意一项的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010306069.2A CN111488144B (zh) | 2020-04-17 | 2020-04-17 | 一种数据处理方法以及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010306069.2A CN111488144B (zh) | 2020-04-17 | 2020-04-17 | 一种数据处理方法以及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111488144A CN111488144A (zh) | 2020-08-04 |
CN111488144B true CN111488144B (zh) | 2024-03-19 |
Family
ID=71797929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010306069.2A Active CN111488144B (zh) | 2020-04-17 | 2020-04-17 | 一种数据处理方法以及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111488144B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112558949B (zh) * | 2020-12-21 | 2024-05-28 | 长沙树根互联技术有限公司 | 程序构造方法、装置、电子设备及存储介质 |
CN112862425B (zh) * | 2021-01-12 | 2021-11-12 | 江苏中威科技软件系统有限公司 | 一种阅读ofd版式文件生命周期信息的装置及技术 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968303A (zh) * | 2012-11-21 | 2013-03-13 | 用友软件股份有限公司 | 程序设计系统和程序设计方法 |
CN103970531A (zh) * | 2014-03-26 | 2014-08-06 | 深圳英飞拓科技股份有限公司 | 中心管理服务器及其管理app的方法 |
CN105159712A (zh) * | 2015-09-01 | 2015-12-16 | 北京金山安全软件有限公司 | 一种启动界面的方法及装置 |
CN108491327A (zh) * | 2018-03-26 | 2018-09-04 | 中南大学 | 一种安卓应用动态Receiver组件本地拒绝服务漏洞检测方法 |
CN108897588A (zh) * | 2018-07-09 | 2018-11-27 | 广州市千钧网络科技有限公司 | 一种用于模块间通信的路由方法和路由装置 |
CN110928548A (zh) * | 2019-11-14 | 2020-03-27 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种数据处理方法以及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9344422B2 (en) * | 2013-03-15 | 2016-05-17 | Oracle International Corporation | Method to modify android application life cycle to control its execution in a containerized workspace environment |
-
2020
- 2020-04-17 CN CN202010306069.2A patent/CN111488144B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968303A (zh) * | 2012-11-21 | 2013-03-13 | 用友软件股份有限公司 | 程序设计系统和程序设计方法 |
CN103970531A (zh) * | 2014-03-26 | 2014-08-06 | 深圳英飞拓科技股份有限公司 | 中心管理服务器及其管理app的方法 |
CN105159712A (zh) * | 2015-09-01 | 2015-12-16 | 北京金山安全软件有限公司 | 一种启动界面的方法及装置 |
CN108491327A (zh) * | 2018-03-26 | 2018-09-04 | 中南大学 | 一种安卓应用动态Receiver组件本地拒绝服务漏洞检测方法 |
CN108897588A (zh) * | 2018-07-09 | 2018-11-27 | 广州市千钧网络科技有限公司 | 一种用于模块间通信的路由方法和路由装置 |
CN110928548A (zh) * | 2019-11-14 | 2020-03-27 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种数据处理方法以及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111488144A (zh) | 2020-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107644286B (zh) | 工作流处理方法及装置 | |
KR101795844B1 (ko) | 런타임 시스템 | |
US8954840B2 (en) | Annotation processing of computer files | |
CN110928548B (zh) | 一种数据处理方法以及设备 | |
US20060265469A1 (en) | XML based scripting framework, and methods of providing automated interactions with remote systems | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US11741002B2 (en) | Test automation systems and methods using logical identifiers | |
CN111488144B (zh) | 一种数据处理方法以及设备 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN116974620A (zh) | 应用程序的生成方法、运行方法以及相应的装置 | |
CN111309332A (zh) | 文件内容按需加载方法、装置及电子设备、存储介质 | |
CN111158777B (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN112631563A (zh) | 基于框架的系统开发方法、装置、计算机设备及存储介质 | |
CN111338638A (zh) | 实现自动生成嵌入式软件部件之间通信的系统及其方法 | |
CN110908644A (zh) | 状态节点的配置方法、装置、计算机设备和存储介质 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN114546410A (zh) | 一种基于设计模式的代码优化方法及相关设备 | |
CN112882698A (zh) | 开发环境的生成方法及装置、计算机存储介质及电子设备 | |
CN114595106B (zh) | 一种业务控制设备调测方法及装置 | |
CN111782183B (zh) | 用于判断组件依赖关系的方法及设备、电子设备和介质 | |
CN113918254B (zh) | 语言文本管理方法、装置、存储介质及电子设备 | |
CN114385159A (zh) | 文件处理方法、装置、电子设备及计算机可读存储介质 | |
CN115033454A (zh) | 无侵入App的数据监控方法及终端 | |
CN115878282A (zh) | 跨平台交互方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |