发明内容
针对现有技术中的技术缺陷,本发明实施例的目的在于提供一种安卓组件间数据传递方法、设备、系统及存储介质,以解决背景技术中所提出的技术问题。
为实现上述目的,第一方面,本发明实施例提供了一种安卓组件间数据传递方法,包括:
生成注解处理器插件;
通过所述注解处理器插件提供的注解对目标组件的类和其内部变量添加注解;
通过所述注解处理器插件收集所述目标组件的类的信息,根据收集的信息生成辅助类;
调用所述辅助类,使当前组件将与所述目标组件中对应变量的数据传递到所述目标组件中;
调用所述辅助类,对传递的数据进行解析后对所述目标组件的变量进行赋值。
进一步,对目标组件的类和其内部变量添加的注解包括:@Required、@Optional、@Builder,其中:
@Builder表示需要对此目标组件生成传值的代码;
@Required表示此数据是必须要获取的;
@Optional表示此数据是可选择性获取的。
进一步,目标组件的类的信息包括:类名称、内部变量数据、内部变量数据类型。
进一步,所述通过所述注解处理器插件收集所述目标组件的类的信息,根据收集的信息生成辅助类,具体包括:
读取注解信息;
根据所述注解信息,构造类结构;
根据所述类结构,生成辅助类。
进一步,借助JavaPoet/KotlinPoet生成对应编程语言的辅助类。
进一步,需要读取的注解信息包括:
@Builder标记的类、类名称;
@Required标记的数据的数据类型、数据名称;
@Optional标记的数据的数据类型、数据名称。
第二方面,本发明还提供了一种安卓组件间数据传递设备,包括:
插件生成模块,用于生成注解处理器插件;
注解添加模块,用于通过所述注解处理器插件提供的注解对目标组件的类和其内部变量添加注解;
辅助类生成模块,用于通过所述注解处理器插件收集所述目标组件的类的信息,根据收集的信息生成辅助类;
数据传递模块,用于调用所述辅助类,使当前组件将与所述目标组件中对应变量的数据传递到所述目标组件中;以及
数据赋值模块,用于调用所述辅助类,对传递的数据进行解析后对所述目标组件中的变量进行赋值。
进一步,所述辅助类生成模块具体用于:
读取注解信息;
根据所述注解信息,构造类结构;
根据所述类结构,生成辅助类。
第三方面,本发明还提供了一种安卓组件间数据传递系统,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行第一方面所述的方法。
第四方面,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行第一方面所述的方法。
实施本发明实施例,具有以下有益效果:
编译时根据注解生成类,其变量的数据类型是严格固定的,且无需手动添加作为KEY的字符串,既能很方便的进行组件间的数值传递,又能减少开发过程中的错误出现率,有效减少了项目的后期维护成本。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
在整个说明书中,对“一个实施例”、“实施例”、“一个示例”或“示例”的提及意味着:结合该实施例或示例描述的特定特征、结构或特性被包含在本发明至少一个实施例中。因此,在整个说明书的各个地方出现的短语“在一个实施例中”、“在实施例中”、“一个示例”或“示例”不一定都指同一实施例或示例。此外,可以以任何适当的组合和、或子组合将特定的特征、结构或特性组合在一个或多个实施例或示例中。此外,本领域普通技术人员应当理解,在此提供的示图都是为了说明的目的,并且示图不一定是按比例绘制的。
第一方面,如图1所示,本发明实施例提供了一种安卓组件间数据传递方法,方法包括:
S1:生成注解处理器插件。
S2:通过所述注解处理器插件提供的注解对目标组件的类和其内部变量添加注解。
具体的,对目标组件的类和其内部变量添加的注解包括:@Required、@Optional、@Builder,其中:@Builder表示需要对此目标组件生成传值的代码;@Required表示此数据是必须要获取的;@Optional表示此数据是可选择性获取的。
S3:通过所述注解处理器插件收集所述目标组件的类的信息,根据收集的信息生成辅助类。
目标组件的类的信息包括:类名称、内部变量数据、内部变量数据类型
通过所述注解处理器插件收集所述目标组件类的信息,根据收集的信息生成辅助类,具体包括:
S31:读取注解信息;
具体的,需要读取的注解信息包括:@Builder标记的类、类名称;@Required标记的数据的数据类型、数据名称;@Optional标记的数据的数据类型、数据名称;
S32:根据所述注解信息,构造类结构;
S33:根据所述类结构,生成辅助类;
具体的,借助JavaPoet/KotlinPoet生成对应编程语言的辅助类。
S4:调用所述辅助类,使当前组件将与所述目标组件中对应变量的数据传递到所述目标组件中。
S5:调用所述辅助类,对传递的数据进行解析后对所述目标组件的变量进行赋值。
具体的,发送方按照以下方式运行:
1)安卓组件间启动时需要传参的情况下,可以在Activity、Service等组件所在类名、以及内部变量进行注解添加,例如:@Builder,@Required等等;
2)注解处理器会在编译的时候,读取类文件代码中的注解信息;
3)根据注解信息沟通Builder类结构;
4)最后生成start启动方法。
接收方按照以下方式运行:
1)通过生成的Builder类,解析传入的Intent对象中携带的数据,对拥有注解的变量赋值
第二方面,基于相同的发明构思,本发明实施例还提供了一种安卓组件间数据传递设备。如图2所示,设备包括:
插件生成模块,用于生成注解处理器插件;
注解添加模块,用于通过所述注解处理器插件提供的注解对目标组件的类和其内部变量添加注解;
辅助类生成模块,用于通过所述注解处理器插件收集所述目标组件的类的信息,根据收集的信息生成辅助类;
数据传递模块,用于调用所述辅助类,使当前组件将与所述目标组件中对应变量的数据传递到所述目标组件中;以及
数据赋值模块,用于调用所述辅助类,对传递的数据进行解析后对所述目标组件中的变量进行赋值。
具体的,所述辅助类生成模块具体用于:
读取注解信息;
具体的,需要读取的注解信息包括:@Builder标记的类、类名称;@Required标记的数据的数据类型、数据名称;@Optional标记的数据的数据类型、数据名称;
根据所述注解信息,构造类结构;
根据所述类结构,生成辅助类。
具体的,借助JavaPoet/KotlinPoet生成对应编程语言的辅助类。
第三方面,基于相同的发明构思,本发明实施例提供一种安卓组件间数据传递系统。如图3所示,该系统可以包括:一个或多个处理器101、一个或多个输入设备102、一个或多个输出设备103和存储器104,上述处理器101、输入设备102、输出设备103和存储器104通过总线105相互连接。存储器104用于存储计算机程序,所述计算机程序包括程序指令,所述处理器101被配置用于调用所述程序指令执行上述安卓组件间数据传递方法实施例部分的方法。
应当理解,在本发明实施例中,所称处理器101可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输入设备102可以包括键盘等,输出设备103可以包括显示器(LCD等)、扬声器等。
该存储器104可以包括只读存储器和随机存取存储器,并向处理器101提供指令和数据。存储器104的一部分还可以包括非易失性随机存取存储器。例如,存储器104还可以存储设备类型的信息。
具体实现中,本发明实施例中所描述的处理器101、输入设备102、输出设备103可执行本发明实施例提供的安卓组件间数据传递方法实施例部分的方法的实施例中所描述的实现方式,在此不再赘述。
需要说明的是,关于安卓组件间数据传递系统的具体工作流程,可参考前述方法实施例部分,在此不再赘述。
第四方面,本发明实施例还提供了一种可读存储介质,存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现:上述安卓组件间数据传递方法。
所述计算机可读存储介质可以是前述实施例所述的后台服务器的内部存储单元,例如系统的硬盘或内存。所述计算机可读存储介质也可以是所述系统的外部存储设备,例如所述系统上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述计算机可读存储介质还可以既包括所述系统的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述系统所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
编译时根据注解生成类,其变量的数据类型是严格固定的,且无需手动添加作为KEY的字符串,既能很方便的进行组件间的数值传递,又能减少开发过程中的错误出现率,有效减少了项目的后期维护成本。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。