CN109857478A - 目标应用程序的运行方法、装置及可读存储介质 - Google Patents
目标应用程序的运行方法、装置及可读存储介质 Download PDFInfo
- Publication number
- CN109857478A CN109857478A CN201910100329.8A CN201910100329A CN109857478A CN 109857478 A CN109857478 A CN 109857478A CN 201910100329 A CN201910100329 A CN 201910100329A CN 109857478 A CN109857478 A CN 109857478A
- Authority
- CN
- China
- Prior art keywords
- module
- parameter
- programing operation
- script running
- transit
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本公开是关于一种目标应用程序的运行方法、装置及存储介质,涉及程序设计领域,该方法包括:编程运行模块接收调用信号,编程运行模块中注解有编程接口和脚本接口的映射关系,调用信号包括第一参数;编程运行模块根据映射关系和调用信号确定调用方式;编程运行模块向中转模块发送调用消息,调用消息中包括第一参数以及调用方式;中转模块将第一参数转换为第二参数,并将第二参数应用于第一调用。通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,编程过程繁琐的问题。
Description
技术领域
本公开实施例涉及程序设计领域,特别涉及一种目标应用程序的运行方法、装置及可读存储介质。
背景技术
Java语言是一种面向对象的计算机编程语言,通常在程序设计中,Java语言用于对程序的后台逻辑进行编辑,且Java语言编辑的Java代码运行在Java虚拟机中;JavaScript语言(简称:JS语言)是一种动态脚本语言,通常在程序设计中,JS语言用于对程序的前端交互进行编辑,且JS语言编辑的JS脚本运行在JS虚拟机中。因此,在程序运行过程中,Java和JS之间存在调用关系,如:通过Java语言调用JS语言编辑的方法。
由于Java语言对应有Java本机接口(Java Native Interface,JNI)规范,Java虚拟机通过该JNI规范实现Java语言与其他语言之间的调用、交互等,而JS语言未有对应的规范,故JS虚拟机通过自定义的接口实现JS语言与其他语言之间的调用、交互等,相关技术中,实现Java对象和JS脚本之间的调用时,存在J2V8技术,即通过JNI规范接口将JS语言对应的V8引擎进行Java封装从而实现两种语言之间的相互调用。
然而,JS语言为动态语言,其语法与Java语言的语法差异较大,从Java中调用一个函数到JS中时,需要程序开发者将参数转换为JS语言能够识别的类型后才能实现调用,且调用完成后,JS转换得到的数据,也需要经过转换后才能被Java其他代码使用,Java代码和JS代码的编程中还需要考虑数据转换以及调用方式等,编程较为繁琐。
发明内容
本公开实施例提供了一种目标应用程序的运行方法、装置及存储介质,可以解决Java代码和JS代码的编程中还需要考虑数据转换以及调用方式等,编程较为繁琐的问题。所述技术方案如下:
根据本公开实施例的第一方面,提供了一种目标应用程序的运行方法,所述目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,所述方法包括:
所述编程运行模块接收调用信号,所述调用信号用于实现在所述编程运行模块和所述脚本运行模块之间的调用,所述编程运行模块中注解有所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系,所述调用信号包括第一参数,所述第一参数与所述编程运行模块对应;
所述编程运行模块根据所述映射关系和所述调用信号确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述编程运行模块向所述中转模块发送调用消息,所述调用消息中包括所述第一参数以及所述调用方式;
所述中转模块将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,所述第二参数与所述脚本运行模块对应。
可选地,所述中转模块中包括汇编函数;
所述中转模块将所述第一参数转换为第二参数之前,还包括:
所述中转模块根据所述汇编函数接收所述编程运行模块发送的所述第一参数,所述汇编函数用于对所述第一参数的参数规则进行限定。
可选地,所述中转模块将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,包括:
所述中转模块将所述第一参数转换为第二参数,并将所述第二参数和所述调用方式发送至所述脚本运行模块;
所述脚本运行模块根据所述调用方式和所述第二参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述脚本运行模块对应;
所述中转模块将所述返回值转换为结果值并将所述结果值发送至所述编程运行模块,所述结果值的数据类型与所述编程运行模块对应。
可选地,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
所述方法还包括:
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述方法还包括:
所述编程运行模块分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述编程运行模块获取所述缓存池中的第i个缓存块;
所述编程运行模块向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块获取对所述第i个缓存块的所有权;
所述脚本运行模块对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述编程运行模块获取所述缓存池中的第i个缓存块,包括:
所述编程运行模块创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述编程运行模块创建缓存块对象之后,还包括:
所述编程运行模块对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述结束对所述第i个缓存块的获取,包括:
所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述脚本运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
根据本公开的另一方面,提供了一种目标应用程序的运行方法,所述目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,所述方法包括:
所述脚本运行模块接收调用信号,所述调用信号用于实现在所述脚本运行模块和所述编程运行模块之间的调用,所述脚本运行模块中注册有通过所述中转模块实现调用的方法,所述脚本运行模块中注册的方法是根据所述编程运行模块中注解的所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系得到的,所述调用信号包括第三参数,所述第三参数与所述脚本运行模块对应;
所述脚本运行模块根据所述调用信号和所述脚本运行模块中注册的方法确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述脚本运行模块向所述中转模块发送所述调用消息,所述调用消息中包括所述第三参数和所述调用方式;
所述中转模块将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,所述第四参数对应所述编程运行模块。
可选地,所述中转模块将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,包括:
所述中转模块将所述第三参数转换为第四参数,并将所述第四参数和所述调用方式发送至所述编程运行模块;
所述编程运行模块根据所述调用方式和所述第四参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述编程运行模块对应;
所述中转模块将所述返回值转换为结果值并将所述结果值发送至所述脚本运行模块,所述结果值的数据类型与所述脚本运行模块对应。
可选地,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
所述方法还包括:
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述方法还包括:
所述脚本运行模块分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述脚本运行模块获取所述缓存池中的第i个缓存块;
所述脚本运行模块向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块获取对所述第i个缓存块的所有权;
所述编程运行模块对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述脚本运行模块获取所述缓存池中的第i个缓存块,包括:
所述脚本运行模块创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述脚本运行模块创建缓存块对象之后,还包括:
所述脚本运行模块对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述结束对所述第i个缓存块的获取,包括:
所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述编程运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
根据本公开的另一方面,提供了一种目标应用程序的运行装置,所述装置包括:
编程运行模块,被配置为接收调用信号,所述调用信号用于实现在所述编程运行模块和所述脚本运行模块之间的调用,所述编程运行模块中注解有所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系,所述调用信号包括第一参数,所述第一参数与所述编程运行模块对应;
所述编程运行模块,还被配置为根据所述映射关系和所述调用信号确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述编程运行模块,还被配置为向所述中转模块发送调用消息,所述调用消息中包括所述第一参数以及所述调用方式;
中转模块,被配置为将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,所述第二参数与所述脚本运行模块对应。
可选地,所述中转模块中包括汇编函数;
所述中转模块,还被配置为根据所述汇编函数接收所述编程运行模块发送的所述第一参数,所述汇编函数用于对所述第一参数的参数规则进行限定。
可选地,所述中转模块,还被配置为将所述第一参数转换为第二参数,并将所述第二参数和所述调用方式发送至所述脚本运行模块;
所述脚本运行模块,被配置为根据所述调用方式和所述第二参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述脚本运行模块对应;
所述中转模块,还被配置为将所述返回值转换为结果值并将所述结果值发送至所述编程运行模块,所述结果值的数据类型与所述编程运行模块对应。
可选地,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述编程运行模块,还被配置为分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述编程运行模块,还被配置为获取所述缓存池中的第i个缓存块;
所述编程运行模块,还被配置为向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块,还被配置为获取对所述第i个缓存块的所有权;
所述脚本运行模块,还被配置为对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述编程运行模块,还被配置为创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述编程运行模块,还被配置为对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述编程运行模块,还被配置为所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述脚本运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
根据本公开的另一方面,提供了一种目标应用程序的运行装置,所述装置包括:
脚本运行模块,被配置为接收调用信号,所述调用信号用于实现在所述脚本运行模块和所述编程运行模块之间的调用,所述脚本运行模块中注册有通过所述中转模块实现调用的方法,所述脚本运行模块中注册的方法是根据所述编程运行模块中注解的所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系得到的,所述调用信号包括第三参数,所述第三参数与所述脚本运行模块对应;
所述脚本运行模块,还被配置为根据所述调用信号和所述脚本运行模块中注册的方法确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述脚本运行模块,还被配置为向所述中转模块发送所述调用消息,所述调用消息中包括所述第三参数和所述调用方式;
中转模块,被配置为将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,所述第四参数对应所述编程运行模块。
可选地,所述中转模块将所述第三参数转换为第四参数,并将所述第四参数和所述调用方式发送至所述编程运行模块;
所述编程运行模块,还被配置为根据所述调用方式和所述第四参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述编程运行模块对应;
所述中转模块,还被配置为将所述返回值转换为结果值并将所述结果值发送至所述脚本运行模块,所述结果值的数据类型与所述脚本运行模块对应。
可选地,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述脚本运行模块,还被配置为分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述脚本运行模块,还被配置为获取所述缓存池中的第i个缓存块;
所述脚本运行模块,还被配置为向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块,还被配置为获取对所述第i个缓存块的所有权;
所述编程运行模块,被配置为对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述脚本运行模块,还被配置为创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述脚本运行模块,还被配置为对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述脚本运行模块,还被配置为所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述编程运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
根据本公开的另一方面,提供了一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述本公开实施例提供的目标应用程序的运行方法。
根据本公开的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如上述本公开实施例提供的目标应用程序的运行方法。
本公开实施例提供的技术方案可以包括以下有益效果:
通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本公开一个示例性实施例提供的目标应用程序的程序运行框架的结构示意图;
图2是本公开另一个示例性实施例提供的目标应用程序的程序运行框架的结构示意图;
图3是本公开一个示例性实施例提供的目标应用程序的运行方法流程图;
图4是基于图3示出的示例性实施例提供的将第一参数转换为第二参数的流程图;
图5是基于图3示出的示例性实施例提供的另一个将第一参数转换为第二参数的流程图;
图6是基于图3示出的示例性实施例提供的Java对象和JS对象之间的关联关系示意图;
图7是基于图3示出的示例性实施例提供的调用结果示意图;
图8是本公开另一个示例性实施例提供的目标应用程序的运行方法流程图;
图9是基于图8示出的示例性实施例提供的调用结果示意图;
图10是本公开另一个示例性实施例提供的目标应用程序的运行方法流程图;
图11是基于图10示出的示例性实施例提供的垃圾回收机制示意图;
图12是基于图10示出的示例性实施例提供的强引用关系和弱引用关系示意图;
图13是基于图10示出的示例性实施例提供的强引用关系和弱引用关系示意图;
图14是基于图10示出的示例性实施例提供的强引用关系和弱引用关系示意图;
图15是本公开另一个示例性实施例提供的目标应用程序的运行方法流程图;
图16是基于图15示出的示例性实施例提供的缓存池分配方式示意图;
图17是基于图15示出的示例性实施例提供的缓存块获取方式示意图;
图18是基于图15示出的示例性实施例提供的缓存块数据获取方式示意图;
图19是基于图15示出的示例性实施例提供的缓存块归还方式示意图;
图20是基于图15示出的示例性实施例提供的对缓存块连续使用方式的示意图;
图21是本公开一个示例性实施例提供的异步数据传输机制示意图;
图22是本公开一个示例性实施例提供的目标应用程序的运行装置的结构框图;
图23是本公开另一个示例性实施例提供的目标应用程序的运行装置的结构框图;
图24是本公开一个示例性实施例提供的终端的结构框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
首先,对本公开实施例提供的目标应用程序的程序运行框架进行说明,如图1所示,该程序运行框架100中包括编程运行模块110、脚本运行模块120以及中转模块130;
第一,编程运行模块110中包括虚拟机111、编程代码112、类库113以及内存数据114;
可选地,该编程运行模块110主要用于实现目标应用程序的后台逻辑功能,如:数据存储、数据计算等。
虚拟机111用于运行编程运行模块110中的编程代码112,将编程代码112实现为实际的后台逻辑功能,可选地,编程运行模块110中的虚拟机111对应提供有编程接口,该编程接口用于实现编程运行模块110与其他模块之间的调用、交互等功能,可选地,该编程接口用于实现编程运行模块110与中转模块130之间的调用和交互,可选地,当编程运行模块110实现为Java运行时时,该编程接口为基于JNI规范的接口。类库113中包括程序开发人员配置的类,一个类对应定义有变量、方法等,一个类通常对应目标应用程序中的一个功能模块,如:用户管理模块对应的类中定义有变量用户名、年龄、性别,以及定义有方法增加、删除、修改。内存数据114中包括编程运行模块110运行过程中需要使用的数据,以及运行过程中获取并存储的数据等。
可选地,该编程运行模块110是由面向对象的编程语言实现的模块,可选地,该编程语言为Java语言。可选地,该编程语言还可以实现为超文本预处理器(HypertextPreprocessor,PHP)语言。
第二,脚本运行模块120中包括虚拟机121、脚本代码122以及内存数据123;
可选地,该脚本运行模块120主要用于实现目标应用程序的前台交互功能,如:触发事件、显示效果等。
虚拟机121用于运行脚本运行模块120中的脚本代码122,将脚本代码122实现为实际的前台交互功能,可选地,脚本运行模块120中的虚拟机121对应提供有脚本接口,该脚本接口用于实现脚本运行模块120与其他模块之间的调用、交互等,可选地,该脚本接口用于实现脚本运行模块120与中转模块130之间的调用和交互,如:实现脚本运行模块120与编程运行模块110之间的调用。可选地,脚本代码122用于对变量、方法等进行定义,或,脚本运行模块120中包括类库,该类库的类中定义有变量、方法。内存数据123中存储有前台交互中需要使用的数据,如:浏览量数据、访问量数据等。
可选地,该脚本运行模块120是由脚本语言实现的模块,可选地,该脚本语言为Javascript语言。可选地,该脚本语言还可以实现为其他脚本语言。
第三,中转模块130用于对编程运行模块110和脚本运行模块120之间的方法调用、数据交换等进行中转。
可选地,上述编程运行模块110的类库113中还包括注解类,该注解类用于注解编程代码112对应的编程接口和脚本代码122对应的脚本接口之间的映射关系,针对类库113中注解的映射关系,编程运行模块110可以对脚本运行模块120中的方法进行调用,或,脚本运行模块120可以对编程运行模块110中的方法进行调用。示意性的,上述类库113中注解的映射关系包括如下映射方式中的至少一种:
一、NativeObject类用于表示将编程运行模块110中的类映射为脚本运行模块120中的对象;
二、NativeProperty类用于表示将编程运行模块110中的类内定义的参数或方法映射为脚本运行模块120中对象上的属性;
三、Native Method类用于表示将编程运行模块110中的方法映射为脚本运行模块120中对象上的函数。
可选地,编程运行模块110的类库中配置好注解类后,编程运行模块110将配置好的注解类发送至中转模块130,中转模块130将注解类对应的接口与脚本运行模块120的接口进行映射,即注册到脚本运行模块120中。中转模块130利用编程运行模块110提供的接口获取注解类的属性和方法的描述信息,如:1、需要在脚本运行模块120中显示的函数或属性的名称;2、方法的参数类型、返回值类型、数据类型,中转模块130将上述描述信息组合后,形成描述集合,并将描述集合通过脚本运行模块120的接口映射到脚本运行模块120中。
值得注意的是,上述方法可以理解为程序设计中的函数。
示意性的,以上述编程运行模块110为Java运行时、脚本运行模块120为JS运行时、中转模块130为native框架为例进行说明,如图2所示,程序运行框架200中包括Java运行时210、JS运行时220以及native框架230,Java运行时210和native框架230之间通过JNI规范接口进行交互,JS运行时220与native框架230之间通过JS接口进行交互。
结合上述目标应用程序的程序运行框架,对本公开实施例提供的目标应用程序的运行方法进行说明,请参考图3,以该方法应用于如图1所示的程序运行框架中为例进行说明,该目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,以编程运行模块对脚本运行模块进行调用为例进行说明,该方法包括:
步骤301,编程运行模块接收调用信号,编程运行模块中注解有编程运行模块对应的编程接口和脚本运行模块对应的脚本接口的映射关系。
可选地,调用信号用于实现在编程运行模块和脚本运行模块之间的调用,该调用信号中包括第一参数,该第一参数对应编程运行模块。
可选地,编程接口与脚本接口之间的映射关系中包括如下映射方式中的至少一种:
一、NativeObject类用于表示将编程运行模块中的类映射为脚本运行模块中的对象;
二、NativeProperty类用于表示将编程运行模块中的类内定义的参数或方法映射为脚本运行模块中对象上的属性;
三、Native Method类用于表示将编程运行模块中的方法映射为脚本运行模块中对象上的函数。
由于上述编程接口与脚本接口之间的映射关系中包括多种映射方式,该第一参数可以是编程运行模块中类内定义的参数,也可以是需要调用方法进行处理的参数,还可以是默认的初始值。可选地,该第一参数与编程运行模块对应,即,该第一参数的数据类型为编程运行模块中能够识别的数据类型。
可选地,该调用信号可以是服务器发送至终端的目标应用程序后生成的,也可以是该目标应用程序自动生成的。
步骤302,编程运行模块根据映射关系和调用信号确定编程运行模块和脚本运行模块之间的调用方式。
可选地,该调用方式中包括脚本运行模块中用于对该第一参数进行处理的方法,或,该调用方式中包括脚本运行模块中用于对该第一参数进行处理的函数。根据该调用信号确定该第一参数需要进行的处理,从而确定映射关系中与该第一参数需要进行的处理对应的调用方式。
步骤303,编程运行模块向中转模块发送调用消息,调用消息中包括第一参数以及调用方式。
可选地,当编程运行模块实现为Java运行时时,该Java运行时通过JNI规范的接口向中转模块发送调用消息,该调用消息中包括第一参数以及调用方式。示意性的,请参考图4,编程运行模块410中定义了两个参数不同的native方法,method1和method2,其中,method1对应的参数为int a和int b,method2对应的参数为String a,int b和double c,则中转模块420需要实现上述method1和method2对应的两个函数native_method1和native_method2,上述method1和method2即为编程运行模块410的调用方式,也即编程运行模块410需要调用的方法。
可选地,编程运行模块通过native方法对中转模块进行调用,该native方法对应上述调用消息,即该native方法中包括第一参数及调用方式。
可选地,该中转模块是由C语言或C++语言编写得到的。可选地,该中转模块还对应有存储管理子模块,该存储管理子模块为自动存储管理(Automatic Storage Management,ASM)模块。
步骤304,中转模块将第一参数转换为第二参数。
步骤305,中转模块将第二参数应用于调用方式中对脚本运行模块的第一调用。
可选地,中转模块中还包括汇编函数,该汇编函数用于对第一参数的参数规则进行限定,中转模块根据汇编函数接收编程运行模块发送的第一参数。对应的,编程运行模块向中转模块发送的调用消息中的调用方式,是由编程运行模块的native方法定义的固定形式的调用方式,可选地,上述method1和method2还需要实现成为脚本运行模块对应的方法,则通过汇编函数的方式实现,以编程运行模块为Java运行时,脚本运行模块为JS运行时为例,如图5所示,中转模块51中包括函数normalize_native_method,该函数为汇编编写的函数,用于将Java运行时提供的参数存储到缓存块中,中转模块51中还包括Java_js_bridge函数,该函数用于将Java运行时提供的参数转换为JS运行时对应的参数,并调用对应的JS函数,如图5所示,Java运行时52的方法native int method1(int a,int b)对应到JS运行时53中为js_method1(a,b),Java运行时52的方法native String method2(String a,intb,double c)对应到JS运行时53中为js_method2(a,b,c),其中,Java运行时52的方法native int method1中的参数int a、int b被转换为a、b,Java运行时52的方法nativeString method2中的参数String a、int b、double c被转换为a、b、c。
可选地,中转模块将第一参数转换为第二参数,并将第二参数和调用方式发送至脚本运行模块,可选地,该调用方式为脚本运行模块中的调用方式,该脚本运行模块根据调用方式和第二参数得到返回值,并将返回值发送至中转模块,该返回值的数据类型与脚本运行模块对应,即,该返回值为脚本运行模块中能够识别的数值;中转模块将返回值转换为结果值并将结果值发送至编程运行模块,该结果值的数据类型与编程运行模块对应。
可选地,中转模块将第二参数和调用方式发送至脚本运行模块时,根据脚本运行模块的发送接口进行发送,该发送接口为脚本运行模块提供并与中转模块确定的用于交互的接口,示意性的,当脚本运行模块为JS运行时,该发送接口为JS应用程序编程接口((Application Programming Interface,API)。
示意性的,编程运行模块和脚本运行模块之间通过中转模块实现映射,以及编程运行模块中的对象和脚本运行模块中的对象通过中转模块中的数据关联,以编程运行模块为Java运行时,脚本运行模块为JS运行时,中转模块为native框架为例,如图6所示,Java运行时61中的java对象611和JS运行时62中的js对象621之间通过native框架63中的native数据631关联。
示意性的,请参考图7,Java运行时71将调用消息发送至中转模块72,中转模块72将转换后的参数和调用的方法发送至JS运行时73,JS运行时73将结果发送至中转模块72,中转模块72将转换后的结果发送至Java运行时71。
综上所述,本实施例提供的目标应用程序的运行方法中,通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
在一个可选的实施例中,上述编程运行模块对脚本运行模块的调用还可以实现为脚本运行模块对编程运行模块的调用,请参考图8,以该方法应用于如图1所示的程序运行框架中为例进行说明,该目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,该方法包括:
步骤801,脚本运行模块接收调用信号,脚本运行模块中注册有通过中转模块实现调用的方法。
可选地,该调用信号可以是终端的目标应用程序根据终端接收到的触控信号生成的,也可以是该目标应用程序自动生成的。
可选地,调用信号用于实现在脚本运行模块和编程运行模块之间的调用,脚本运行模块中注册有通过中转模块实现的方法,该脚本运行模块中注册的方法是根据编程运行模块中注解的编程接口和脚本接口的映射关系得到的,该映射关系在上述步骤301中已进行了详细说明,此处不再赘述。
可选地,编程运行模块中配置好注解类后,将配置好的注解类发送至中转模块,中转模块将注解类对应的接口与脚本运行模块的接口进行映射,即注册到脚本运行模块中。其中,中转模块利用编程运行模块提供的接口获取注解类的属性和方法的描述信息,如:1、需要在脚本运行模块中显示的函数或属性的名称;2、方法的参数类型、返回值类型、数据类型,中转模块将上述描述信息组合后,形成描述集合,并将描述集合通过脚本运行模块的接口映射到脚本运行模块中。
可选地,该调用信号中包括第三参数,该第三参数与脚本运行模块对应。
步骤802,脚本运行模块根据调用信号和脚本运行模块中注册的方法确定编程运行模块和脚本运行模块之间的调用方式。
可选地,该调用方式中包括编程运行模块中用于对该第三参数进行处理的方法,或,该调用方式中包括编程运行模块中用于对该第三参数进行处理的函数。根据该调用信号确定该第三参数需要进行的处理,从而确定与该第三参数需要进行的处理对应的调用方式,即确定处理该第三参数所调用的方法。
步骤803,脚本运行模块向中转模块发送调用消息,调用消息中包括第三参数以及调用方式。
可选地,当脚本运行模块实现为JS运行时时,该JS运行时通过JS API向中转模块发送调用消息,该调用消息中包括第三参数以及调用方式。
可选地,脚本运行模块通过回调函数对中转模块进行调用。
可选地,该第三参数可以是多个参数组成的数组。
可选地,该中转模块是由C语言或C++语言编写得到的。可选地,该中转模块还对应有存储管理子模块,该存储管理子模块为自动存储管理(Automatic Storage Management,ASM)模块。
步骤804,中转模块将第三参数转换为第四参数。
步骤805,中转模块将第四参数应用于调用方式中对编程运行模块的第二调用。
可选地,中转模块将第三参数转换为第四参数,并将第四参数和调用方式发送至编程运行模块,可选地,该调用方式为编程运行模块中的调用方式,该编程运行模块根据调用方式和第四参数得到返回值,并将返回值发送至中转模块,该返回值的数据类型与编程运行模块对应,即,该返回值为编程运行模块中能够识别的数值;中转模块将返回值转换为结果值并将结果值发送至脚本运行模块,该结果值的数据类型与脚本运行模块对应。
可选地,中转模块将第四参数和调用方式发送至编程运行模块时,根据编程运行模块的发送接口进行发送,该发送接口为编程运行模块提供并与中转模块确定的用于交互的接口,示意性的,当脚本运行模块为Java运行时,该发送接口为JNI规范接口。
示意性的,请参考图9,JS运行时91将调用消息发送至中转模块92,中转模块92将转换后的参数和调用的方法发送至Java运行时93,Java93运行时将结果发送至中转模块92,中转模块92将转换后的结果发送至JS运行时91。
综上所述,本实施例提供的目标应用程序的运行方法中,通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
在一个可选的实施例中,编程运行模块、中转模块以及脚本运行模块之间定义有回收机制,该回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收,图10是本公开另一个示例性实施例提供的目标应用程序的运行方法流程图,如图10所示,该方法包括:
步骤1001,当编程运行模块中的编程对象通过中转模块中的中转数据引用脚本运行模块中的脚本对象时,建立编程对象对中转数据的强引用关系、中转数据对脚本对象的强引用关系、脚本对象对中转数据的弱引用关系以及中转数据对编程对象的弱引用关系。
编程运行模块和脚本运行模块中都包括垃圾回收机制,以编程运行模块中的垃圾回收机制为例进行说明,示意性的,如图11所示,编程运行模块1110中的root对象为编程运行模块中的根节点对象,A、B、C、D都为根节点root对象的子节点对象,也即,A、B、C、D能够从root对象查找到,因此A、B、C、D对象不会被回收,而F、G对象无法从root对象查找到,故F、G对象可以被垃圾回收器(Garbage Collector,GC)回收。
为避免GC回收被中转模块引用的对象,以及避免中转模块持续引用对象,本实施例中提供的回收机制如图12所示,native框架1210中的数据1对运行时1220中的对象A存在强引用关系(由实线表示),native框架1210中的数据2对运行时1220中的对象B存在弱引用关系(由虚线表示),故对象A不会被GC回收,而对象B可以被GC回收。
以编程运行模块为java运行时,编程对象为java A对象,脚本运行模块为JS运行时,脚本对象为JS A对象,中转模块为native框架,中转数据为native数据为例,如图13所示,建立java A对象131对native数据132的强引用关系,native数据132对JS A对象133的强引用关系,JS A对象133对native数据132的弱引用关系以及native数据132对java A对象131的弱引用关系。
可选地,上述编程对象引用脚本对象的引用关系是由编程运行模块和脚本运行模块之间的调用关系生成的,示意性的,脚本运行模块调用编程运行模块中对象A中的方法,脚本运行模块中的对象B接收编程运行模块返回的返回值,则建立该对象A对对象B的强引用。
可选地,编程对象被回收后,中转数据被回收,则脚本对象成为垃圾,等待脚本运行模块中的GC回收。
步骤1002,当脚本运行模块中的脚本对象通过中转模块中的中转数据引用编程运行模块中的编程对象时,建立脚本对象对中转数据的强引用关系、中转数据对编程对象的强引用关系、编程对象对中转数据的弱引用关系以及中转数据对脚本对象的弱引用关系。
示意性的,以编程运行模块为java运行时,编程对象为java A对象,脚本运行模块为JS运行时,脚本对象为JS A对象,中转模块为native框架,中转数据为native数据为例,如图14所示,建立JS A对象141对native数据142的强引用关系,native数据142对java A对象143的强引用关系,java A对象143对native数据142的弱引用关系以及native数据142对JS A对象141的弱引用关系。
可选地,脚本对象被释放后,中转数据被脚本对象释放,则编程对象在编程运行模块中成为垃圾,等待编程运行模块中的GC回收。
在某些特定的情况下,上述垃圾回收机制会造成待应用的对象被回收,示意性的,从js创建了一个java对象,该java对象负责从网络上下载数据,由于网络下载耗时很长,所以js负责接收数据的对象,会等待很长时间,这段时间里面,该js负责接收数据的对象可能会被回收,导致数据接收失败。在该特定情况下,建立脚本对象对中转数据的强引用以及中转数据对编程对象的强引用,而编程对象对脚本对象的引用在部分时间内为强引用,该部分时间为编程对象明确确定脚本对象不能被回收时,对脚本对象进行强引用,并在解除强引用时,通过开发人员手动进行解除。
可选地,上述弱引用用于表示该脚本对象和编程对象之间的引用路径,脚本对象通过该弱引用确定对其进行引用的编程对象,以及编程对象通过该弱引用确定对其进行引用的脚本对象。
值得注意的是,图10所示的实施例可以与上述图3所示的实施例结合实现,也可以与上述图8所示的实施例结合实现,且上述图3和图8所示的实施例也可以结合实现。
综上所述,本实施例提供的目标应用程序的运行方法中,通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
本实施例提供的方法,通过编程运行模块、中转模块以及脚本运行模块之间定义的回收机制,当中转数据对编程数据或脚本数据存在引用时,建立强引用,并当引用结束时释放引用关系,避免编程运行模块和脚本运行模块中的回收机制中,会将中转数据引用对象回收造成引用失败的问题。
在一个可选地实施例中,编程运行模块和脚本运行模块之间需要传递大量数据,图15是本公开一个示例性实施例提供的目标应用程序的运行方法的流程图,以该方法应用于如图1所示的程序运行框架100中为例进行说明,如图15所示,以该方法中由编程运行模块向脚本运行模块发送数据为例,该方法包括:
步骤1501,编程运行模块分配缓存池.
可选地,编程运行模块创建缓存块(英文:Buffer),该Buffer管理一块内存,且该编程运行模块可以设置缓存块的大小,如:8K、256K、1M等,缓存池是一组缓存块的集合。
步骤1502,将缓存池的分配方式发送至中转模块。
可选地,中转模块用于对缓存池进行管理,并向缓存块提供内存用于放置数据。
可选地,该缓存池的所有权属于该编程运行模块,即编程运行模块可以对缓存池的配置数据进行修改。
示意性的,请参考图16,java运行时1610分配bufferpool1611后,将bufferpool1611的分配方式发送至native框架1620,该bufferpool1611中包括buffer1、buffer2、…、buffern。
步骤1503,编程运行模块获取缓存池中的第i个缓存块。
可选地,编程运行模块创建缓存块对象,该缓存块对象的指针指向第i个缓存块,即实现为编程运行模块获取缓存池中的第i个缓存块。可选地,该编程运行模块获取对第i个缓存块的所有权。
示意性的,请参考图17,java运行时1710的buffer对象1711的指针指向bufferpool1712中的buffer2,即java运行时1710获取缓存池中的第二个缓存块buffer2。
步骤1504,编程运行模块向第i个缓存块填充数据,并结束对第i个缓存块的获取。
步骤1505,中转模块获取对第i个缓存块的所有权。
步骤1506,脚本运行模块对第i个缓存块进行应用,并获取第i个缓存块中的数据。
可选地,脚本运行模块对该第i个缓存块进行应用时,脚本运行模块不具备该第i个缓存块的所有权,仅能获取该缓存块中的数据。
示意性的,请参考图18,java运行时1810的buffer对象1811结束对buffer2的获取,即终止对buffer2的指针指向,而js运行时1820的buffer对象1821从buffer2获取数据,由于js运行时1820对该buffer2没有所有权,故该buffer对象1820对buffer2的指针指向以虚线示意。
可选地,当脚本运行模块获取第i个缓存块中的数据后,结束对该第i个缓存块的调用,则中转模块放弃对该第i个缓存块的所有权,并将该第i个缓存块归还至缓存池。
示意性的,请参考图19,js运行时1910中的buffer对象1911结束对buffer2中的数据获取后,native框架1920将buffer2归还至缓存池1921。
可选地,当第i个缓存块需要被连续多次使用时,可以通过如下方式实现:
编程运行模块创建缓存块对象后,对缓存块对象进行复制,得到缓存块克隆对象,该缓存块对象和缓存块克隆对象共享指向第i个缓存块的指针,缓存块对象结束对第i个缓存块的获取时,缓存块对象结束指向第i个缓存块的指针,缓存块克隆对象保留指向第i个缓存块的指针,并在脚本运行模块对第i个缓存块进行应用后,重复执行缓存块对象的指针指向第i个缓存块的步骤,由于缓存块克隆对象保留有指向第i个缓存块的指针,该第i个缓存块无法被归还至缓存池中,从而实现对第i个缓存块的连续应用。
示意性的,请参考图20,java运行时2010中包括buffer对象2011和该buffer对象2011的buffer克隆对象2012,buffer对象2011和buffer克隆对象2012共享指向buffer2的指针,当java运行时2010向buffer2填充数据后,buffer对象2011终止指向该buffer2,buffer克隆对象2012保留指向该buffer2的指针;js运行时2020中包括buffer对象2021和该buffer对象2021的buffer克隆对象2022,当js运行时2020从buffer2获取数据后,buffer对象2021终止指向该buffer2,buffer克隆对象2022保留指向该buffer2的指针。
值得注意的是,上述编程运行模块还可以实现为脚本运行模块,上述脚本运行模块还可以实现为编程运行模块,即,通过脚本运行模块分配缓存池,并从脚本运行模块向编程运行模块发送数据。
值得注意的是,图15所示的实施例可以与上述图3所示的实施例结合实现,也可以与上述图8所示的实施例结合实现,还可以与上述图10所示的实施例结合实现。
综上所述,本实施例提供的目标应用程序的运行方法中,通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
本实施例提供的方法,通过分配缓存池以及缓存块实现数据量较大的数据的传递,避免通过拷贝的方式传递数据,导致传递数据时,内存所有者模糊导致的内存泄露或者引用无效内存的问题。
在一个可选的实施例中,上述中转模块中包括至少两条传输队列,该至少两条传输队列支持编程运行模块和脚本运行模块之间的异步数据传输,该编程运行模块中针对采用异步数据传输方式进行数据传输的函数设置有异步传输特征。
示意性的,请参考图21,中转模块2110中包括传输队列2111和传输队列2112,通过传输对列2111从编程运行模块2120将数据传输至脚本运行模块2130的同时,可以通过传输队列2112从脚本运行模块2130将数据传输至编程运行模块2120。
可选地,当函数采用异步数据传输方式进行数据传输时,编程运行模块的注解中对应该函数注解有异步传输特征,示意性的,以数据读取方法为例进行说明,该数据读取方法readDate的java代码如下所示:
其中,task_runner=IO_TASK用于表示该readData方法采用异步数据传输方式进行传输,读取的数据在该readData方法调用成功后返回至js运行时中。
综上所述,本实施例提供的目标应用程序的运行方法中,通过在编程运行模块中注解编程接口和脚本接口之间的映射关系,并通过中转模块将第一参数转换为第二参数,直接根据映射关系以及中转模块实现编程运行模块和脚本运行模块之间的方法调用,避免编程运行模块中还需要针对不同的脚本运行模块的接口设置不同的调用函数,也避免开发者对参数的类型进行转换后进行调用而导致的编程过程繁琐的问题,开发者仅需要在映射关系中进行设置即可通过中转模块完成方法调用。
本实施例提供的方法,通过对采用异步数据传输方式进行数据传输函数注解异步传输特征,异步传输方式的设置方式较为简便。
图22是本公开一个示例性实施例提供的目标应用程序的运行装置的结构示意图,如图22所示,该装置包括:编程运行模块2210、脚本运行模块2220以及中转模块2230;
编程运行模块2210,被配置为接收调用信号,所述调用信号用于实现在所述编程运行模块2210和所述脚本运行模块2220之间的调用,所述编程运行模块2210中注解有所述编程运行模块2210对应的编程接口和所述脚本运行模块2220对应的脚本接口的映射关系,所述调用信号包括第一参数,所述第一参数与所述编程运行模块2210对应;
所述编程运行模块2210,还被配置为根据所述映射关系和所述调用信号确定所述编程运行模块2210和所述脚本运行模块2220之间的调用方式;
所述编程运行模块2210,还被配置为向所述中转模块2230发送调用消息,所述调用消息中包括所述第一参数以及所述调用方式;
中转模块2230,被配置为将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块2220的第一调用,所述第二参数与所述脚本运行模块2220对应。
可选地,所述中转模块2230中包括汇编函数;
所述中转模块2230,还被配置为根据所述汇编函数接收所述编程运行模块2210发送的所述第一参数,所述汇编函数用于对所述第一参数的参数规则进行限定。
可选地,所述中转模块2230,还被配置为将所述第一参数转换为第二参数,并将所述第二参数和所述调用方式发送至所述脚本运行模块2220;
所述脚本运行模块2220,被配置为根据所述调用方式和所述第二参数得到返回值,并将所述返回值发送至所述中转模块2230,所述返回值的数据类型与所述脚本运行模块2220对应;
所述中转模块2230,还被配置为将所述返回值转换为结果值并将所述结果值发送至所述编程运行模块2210,所述结果值的数据类型与所述编程运行模块2210对应。
可选地,所述编程运行模块2210、所述脚本运行模块2220以及所述中转模块2230之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
当所述编程运行模块2210中的编程对象通过所述中转模块2230中的中转数据引用所述脚本运行模块2220中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述编程运行模块2210,还被配置为分配缓存池,并将所述缓存池的分配方式发送至所述中转模块2230,所述中转模块2230用于对所述缓存池进行管理;
所述编程运行模块2210,还被配置为获取所述缓存池中的第i个缓存块;
所述编程运行模块2210,还被配置为向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块2230,还被配置为获取对所述第i个缓存块的所有权;
所述脚本运行模块2220,还被配置为对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述编程运行模块2210,还被配置为创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述编程运行模块2210,还被配置为对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述编程运行模块2210,还被配置为所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述脚本运行模块2220对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块2230中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块2210和所述脚本运行模块2220之间的异步数据传输,所述编程运行模块2210中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块2210为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块2220为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块2230通过所述Java本机接口与所述Java运行时进行通信,所述中转模块2230通过所述JS接口与所述JavaScript运行时进行通信。
图23是本公开一个示例性实施例提供的目标应用程序的运行装置的结构示意图,如图23所示,该装置包括:脚本运行模块2310、编程运行模块2320以及中转模块2330;
脚本运行模块2310,被配置为接收调用信号,所述调用信号用于实现在所述脚本运行模块2310和所述编程运行模块2320之间的调用,所述脚本运行模块2310中注册有通过所述中转模块2330实现调用的方法,所述脚本运行模块2310中注册的方法是根据所述编程运行模块2320中注解的所述编程运行模块2320对应的编程接口和所述脚本运行模块2310对应的脚本接口的映射关系得到的,所述调用信号包括第三参数,所述第三参数与所述脚本运行模块2310对应;
所述脚本运行模块2310,还被配置为根据所述调用信号和所述脚本运行模块2310中注册的方法确定所述编程运行模块2320和所述脚本运行模块2310之间的调用方式;
所述脚本运行模块2310,还被配置为向所述中转模块2330发送所述调用消息,所述调用消息中包括所述第三参数和所述调用方式;
中转模块2330,被配置为将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块2320的第二调用,所述第四参数对应所述编程运行模块2320。
可选地,所述中转模块2330将所述第三参数转换为第四参数,并将所述第四参数和所述调用方式发送至所述编程运行模块2320;
所述编程运行模块2320,还被配置为根据所述调用方式和所述第四参数得到返回值,并将所述返回值发送至所述中转模块2330,所述返回值的数据类型与所述编程运行模块2320对应;
所述中转模块2330,还被配置为将所述返回值转换为结果值并将所述结果值发送至所述脚本运行模块2310,所述结果值的数据类型与所述脚本运行模块2310对应。
可选地,所述编程运行模块2320、所述脚本运行模块2310以及所述中转模块2330之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
当所述编程运行模块2320中的编程对象通过所述中转模块2330中的中转数据引用所述脚本运行模块2310中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
可选地,所述脚本运行模块2310,还被配置为分配缓存池,并将所述缓存池的分配方式发送至所述中转模块2330,所述中转模块2330用于对所述缓存池进行管理;
所述脚本运行模块2310,还被配置为获取所述缓存池中的第i个缓存块;
所述脚本运行模块2310,还被配置为向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块2330,还被配置为获取对所述第i个缓存块的所有权;
所述编程运行模块2320,被配置为对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
可选地,所述脚本运行模块2310,还被配置为创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
可选地,所述脚本运行模块2310,还被配置为对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述脚本运行模块2310,还被配置为所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述编程运行模块2320对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
可选地,所述中转模块2330中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块2320和所述脚本运行模块2310之间的异步数据传输,所述编程运行模块2320中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
可选地,所述编程运行模块2320为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块2310为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块2330通过所述Java本机接口与所述Java运行时进行通信,所述中转模块2330通过所述JS接口与所述JavaScript运行时进行通信。
图24是根据一示例性实施例示出的一种装置2400的框图。例如,装置2400可以是上文介绍的终端。例如,终端可以是手机、平板电脑、电子书阅读器、多媒体播放设备、PC、可穿戴设备等电子设备。
参照图24,装置2400可以包括以下一个或多个组件:处理组件2402,存储器2404,电源组件2406,多媒体组件2408,音频组件2410,输入/输出(I/O)接口2412,传感器组件2414,以及通信组件2416。
处理组件2402通常控制装置2400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件2402可以包括一个或多个处理器2420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件2402可以包括一个或多个模块,便于处理组件2402和其他组件之间的交互。例如,处理组件2402可以包括多媒体模块,以方便多媒体组件2408和处理组件2402之间的交互。
存储器2404被配置为存储各种类型的数据以支持在装置2400的操作。这些数据的示例包括用于在装置2400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器2404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件2406为装置2400的各种组件提供电力。电源组件2406可以包括电源管理系统,一个或多个电源,及其他与为装置2400生成、管理和分配电力相关联的组件。
多媒体组件2408包括在所述装置2400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件2408包括一个前置摄像头和/或后置摄像头。当装置2400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件2410被配置为输出和/或输入音频信号。例如,音频组件2410包括一个麦克风(MIC),当装置2400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器2404或经由通信组件2416发送。在一些实施例中,音频组件2410还包括一个扬声器,用于输出音频信号。
I/O接口2412为处理组件2402和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件2414包括一个或多个传感器,用于为装置2400提供各个方面的状态评估。例如,传感器组件2414可以检测到装置2400的打开/关闭状态,组件的相对定位,例如所述组件为装置2400的显示器和小键盘,传感器组件2414还可以检测装置2400或装置2400一个组件的位置改变,用户与装置2400接触的存在或不存在,装置2400方位或加速/减速和装置2400的温度变化。传感器组件2414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件2414还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件2414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件2416被配置为便于装置2400和其他设备之间有线或无线方式的通信。装置2400可以接入基于通信标准的无线网络,如Wi-Fi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件2416经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件2416还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置2400可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述目标应用程序的运行方法。
在示例性实施例中,还提供了一种非临时性计算机可读存储介质,其上存储有计算机程序,当所述计算机程序由装置2400的处理器执行时,使得装置2400能够实现上述目标应用程序的运行方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (21)
1.一种目标应用程序的运行方法,其特征在于,所述目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,所述方法包括:
所述编程运行模块接收调用信号,所述调用信号用于实现在所述编程运行模块和所述脚本运行模块之间的调用,所述编程运行模块中注解有所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系,所述调用信号包括第一参数,所述第一参数与所述编程运行模块对应;
所述编程运行模块根据所述映射关系和所述调用信号确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述编程运行模块向所述中转模块发送调用消息,所述调用消息中包括所述第一参数以及所述调用方式;
所述中转模块将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,所述第二参数与所述脚本运行模块对应。
2.根据权利要求1所述的方法,其特征在于,所述中转模块中包括汇编函数;
所述中转模块将所述第一参数转换为第二参数之前,还包括:
所述中转模块根据所述汇编函数接收所述编程运行模块发送的所述第一参数,所述汇编函数用于对所述第一参数的参数规则进行限定。
3.根据权利要求1所述的方法,其特征在于,所述中转模块将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,包括:
所述中转模块将所述第一参数转换为第二参数,并将所述第二参数和所述调用方式发送至所述脚本运行模块;
所述脚本运行模块根据所述调用方式和所述第二参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述脚本运行模块对应;
所述中转模块将所述返回值转换为结果值并将所述结果值发送至所述编程运行模块,所述结果值的数据类型与所述编程运行模块对应。
4.根据权利要求根据权利要求1至3任一所述的方法,其特征在于,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
所述方法还包括:
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
5.根据权利要求1至3任一所述的方法,其特征在于,所述方法还包括:
所述编程运行模块分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述编程运行模块获取所述缓存池中的第i个缓存块;
所述编程运行模块向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块获取对所述第i个缓存块的所有权;
所述脚本运行模块对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
6.根据权利要求5所述的方法,其特征在于,所述编程运行模块获取所述缓存池中的第i个缓存块,包括:
所述编程运行模块创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
7.根据权利要求6所述的方法,其特征在于,所述编程运行模块创建缓存块对象之后,还包括:
所述编程运行模块对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述结束对所述第i个缓存块的获取,包括:
所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述脚本运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
8.根据权利要求1至3任一所述的方法,其特征在于,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
9.根据权利要求1至3任一所述的方法,其特征在于,
所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
10.一种目标应用程序的运行方法,其特征在于,所述目标应用程序中包括编程运行模块、脚本运行模块以及中转模块,所述方法包括:
所述脚本运行模块接收调用信号,所述调用信号用于实现在所述脚本运行模块和所述编程运行模块之间的调用,所述脚本运行模块中注册有通过所述中转模块实现调用的方法,所述脚本运行模块中注册的方法是根据所述编程运行模块中注解的所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系得到的,所述调用信号包括第三参数,所述第三参数与所述脚本运行模块对应;
所述脚本运行模块根据所述调用信号和所述脚本运行模块中注册的方法确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述脚本运行模块向所述中转模块发送所述调用消息,所述调用消息中包括所述第三参数和所述调用方式;
所述中转模块将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,所述第四参数对应所述编程运行模块。
11.根据权利要求10所述的方法,其特征在于,所述中转模块将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,包括:
所述中转模块将所述第三参数转换为第四参数,并将所述第四参数和所述调用方式发送至所述编程运行模块;
所述编程运行模块根据所述调用方式和所述第四参数得到返回值,并将所述返回值发送至所述中转模块,所述返回值的数据类型与所述编程运行模块对应;
所述中转模块将所述返回值转换为结果值并将所述结果值发送至所述脚本运行模块,所述结果值的数据类型与所述脚本运行模块对应。
12.根据权利要求根据权利要求10或11所述的方法,其特征在于,所述编程运行模块、所述脚本运行模块以及所述中转模块之间定义有回收机制,所述回收机制中规定有被强引用的对象限制回收,以及被弱引用的对象不限制回收;
所述方法还包括:
当所述编程运行模块中的编程对象通过所述中转模块中的中转数据引用所述脚本运行模块中的脚本对象时,建立所述编程对象对所述中转数据的强引用关系、所述中转数据对所述脚本对象的强引用关系、所述脚本对象对所述中转数据的弱引用关系以及所述中转数据对所述编程对象的弱引用关系;
当所述脚本对象通过所述中转数据引用所述编程对象时,建立所述脚本对象对所述中转数据的强引用关系、所述中转数据对所述编程对象的强引用关系、所述编程对象对所述中转数据的弱引用关系以及所述中转数据对所述脚本对象的弱引用关系。
13.根据权利要求10或11所述的方法,其特征在于,所述方法还包括:
所述脚本运行模块分配缓存池,并将所述缓存池的分配方式发送至所述中转模块,所述中转模块用于对所述缓存池进行管理;
所述脚本运行模块获取所述缓存池中的第i个缓存块;
所述脚本运行模块向所述第i个缓存块填充数据,并结束对所述第i个缓存块的获取;
所述中转模块获取对所述第i个缓存块的所有权;
所述编程运行模块对所述第i个缓存块进行应用,并获取所述第i个缓存块中的所述数据。
14.根据权利要求13所述的方法,其特征在于,所述脚本运行模块获取所述缓存池中的第i个缓存块,包括:
所述脚本运行模块创建缓存块对象,所述缓存块对象的指针指向所述第i个缓存块。
15.根据权利要求14所述的方法,其特征在于,所述脚本运行模块创建缓存块对象之后,还包括:
所述脚本运行模块对所述缓存块对象进行复制,得到缓存块克隆对象,所述缓存块对象和所述缓存块克隆对象共享指向所述第i个缓存块的所述指针;
所述结束对所述第i个缓存块的获取,包括:
所述缓存块对象结束指向所述第i个缓存块的所述指针,所述缓存块克隆对象保留指向所述第i个缓存块的所述指针,并在所述编程运行模块对所述第i个缓存块进行应用后,重复执行所述缓存块对象的指针指向所述第i个缓存块的步骤。
16.根据权利要求10或11所述的方法,其特征在于,所述中转模块中包括至少两条传输队列,所述至少两条传输队列支持所述编程运行模块和所述脚本运行模块之间的异步数据传输,所述编程运行模块中针对采用所述异步数据传输方式进行数据传输的函数设置有异步传输特征。
17.根据权利要求10或11所述的方法,其特征在于,
所述编程运行模块为Java运行时,所述Java运行时中包括Java虚拟机和Java代码,所述Java虚拟机提供有Java本机接口;
所述脚本运行模块为JavaScript运行时,所述JavaScript运行时中包括JavaScript虚拟机和JavaScript代码,所述JavaScript虚拟机提供有JS接口;
所述中转模块通过所述Java本机接口与所述Java运行时进行通信,所述中转模块通过所述JS接口与所述JavaScript运行时进行通信。
18.一种目标应用程序的运行装置,其特征在于,所述装置包括:
编程运行模块,被配置为接收调用信号,所述调用信号用于实现在所述编程运行模块和所述脚本运行模块之间的调用,所述编程运行模块中注解有所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系,所述调用信号包括第一参数,所述第一参数与所述编程运行模块对应;
所述编程运行模块,还被配置为根据所述映射关系和所述调用信号确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述编程运行模块,还被配置为向所述中转模块发送调用消息,所述调用消息中包括所述第一参数以及所述调用方式;
中转模块,被配置为将所述第一参数转换为第二参数,并将所述第二参数应用于所述调用方式中对所述脚本运行模块的第一调用,所述第二参数与所述脚本运行模块对应。
19.一种目标应用程序的运行装置,其特征在于,所述装置包括:
脚本运行模块,被配置为接收调用信号,所述调用信号用于实现在所述脚本运行模块和所述编程运行模块之间的调用,所述脚本运行模块中注册有通过所述中转模块实现调用的方法,所述脚本运行模块中注册的方法是根据所述编程运行模块中注解的所述编程运行模块对应的编程接口和所述脚本运行模块对应的脚本接口的映射关系得到的,所述调用信号包括第三参数,所述第三参数与所述脚本运行模块对应;
所述脚本运行模块,还被配置为根据所述调用信号和所述脚本运行模块中注册的方法确定所述编程运行模块和所述脚本运行模块之间的调用方式;
所述脚本运行模块,还被配置为向所述中转模块发送所述调用消息,所述调用消息中包括所述第三参数和所述调用方式;
中转模块,被配置为将所述第三参数转换为第四参数,并将所述第四参数应用于所述调用方式中对所述编程运行模块的第二调用,所述第四参数对应所述编程运行模块。
20.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至17任一项所述的目标应用程序的运行方法的步骤。
21.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至17任一项所述的目标应用程序的运行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910100329.8A CN109857478B (zh) | 2019-01-31 | 2019-01-31 | 目标应用程序的运行方法、装置及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910100329.8A CN109857478B (zh) | 2019-01-31 | 2019-01-31 | 目标应用程序的运行方法、装置及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857478A true CN109857478A (zh) | 2019-06-07 |
CN109857478B CN109857478B (zh) | 2022-03-25 |
Family
ID=66897302
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910100329.8A Active CN109857478B (zh) | 2019-01-31 | 2019-01-31 | 目标应用程序的运行方法、装置及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857478B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413423A (zh) * | 2019-07-23 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据处理方法、相关装置、设备及存储介质 |
CN112416470A (zh) * | 2019-08-22 | 2021-02-26 | 腾讯科技(深圳)有限公司 | 命令的执行方法和装置、存储介质及电子装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090044203A1 (en) * | 2007-08-10 | 2009-02-12 | Warren Patrick Acker | Apparatus and Method for Generating Programming Interactions for a Computer Program from an Incoming Data Structure |
CN103543991A (zh) * | 2012-07-09 | 2014-01-29 | 百度在线网络技术(北京)有限公司 | 一种扩展浏览器功能的方法及浏览器系统 |
CN107370778A (zh) * | 2016-05-11 | 2017-11-21 | 阿里巴巴集团控股有限公司 | 一种启动应用的方法和系统 |
CN107766119A (zh) * | 2016-08-19 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 一种脚本语言接口的处理方法、装置和设备 |
CN108021356A (zh) * | 2017-11-06 | 2018-05-11 | 江苏省测绘研究所 | 一种跨屏跨平台的可量测实景地图组织方法 |
US20180225112A1 (en) * | 2017-02-07 | 2018-08-09 | Microsoft Technology Licensing, Llc | Seamless extension porting |
CN108874374A (zh) * | 2018-05-25 | 2018-11-23 | 厦门雅基软件有限公司 | 一种脚本引擎接口抽象层及其应用方法 |
-
2019
- 2019-01-31 CN CN201910100329.8A patent/CN109857478B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090044203A1 (en) * | 2007-08-10 | 2009-02-12 | Warren Patrick Acker | Apparatus and Method for Generating Programming Interactions for a Computer Program from an Incoming Data Structure |
CN103543991A (zh) * | 2012-07-09 | 2014-01-29 | 百度在线网络技术(北京)有限公司 | 一种扩展浏览器功能的方法及浏览器系统 |
CN107370778A (zh) * | 2016-05-11 | 2017-11-21 | 阿里巴巴集团控股有限公司 | 一种启动应用的方法和系统 |
CN107766119A (zh) * | 2016-08-19 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 一种脚本语言接口的处理方法、装置和设备 |
US20180225112A1 (en) * | 2017-02-07 | 2018-08-09 | Microsoft Technology Licensing, Llc | Seamless extension porting |
CN108021356A (zh) * | 2017-11-06 | 2018-05-11 | 江苏省测绘研究所 | 一种跨屏跨平台的可量测实景地图组织方法 |
CN108874374A (zh) * | 2018-05-25 | 2018-11-23 | 厦门雅基软件有限公司 | 一种脚本引擎接口抽象层及其应用方法 |
Non-Patent Citations (2)
Title |
---|
夏国柱: "《Android RS脚本在Java中的移植》", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
越简单 越好: "《Js代码和Java代码之间的互相调用了》", 《HTTPS://BLOG.CSDN.NET/GONG1422425666/ARTICLE/DETAILS/54743792》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413423A (zh) * | 2019-07-23 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据处理方法、相关装置、设备及存储介质 |
CN112416470A (zh) * | 2019-08-22 | 2021-02-26 | 腾讯科技(深圳)有限公司 | 命令的执行方法和装置、存储介质及电子装置 |
CN112416470B (zh) * | 2019-08-22 | 2023-08-25 | 腾讯科技(深圳)有限公司 | 命令的执行方法和装置、存储介质及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109857478B (zh) | 2022-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11412153B2 (en) | Model-based method for capturing images, terminal, and storage medium | |
CN111026396B (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN106569800B (zh) | 前端界面生成方法及装置 | |
CN107820020A (zh) | 拍摄参数的调整方法、装置、存储介质及移动终端 | |
CN106548201B (zh) | 卷积神经网络的训练方法、图像识别方法及装置 | |
CN110874217B (zh) | 快应用的界面显示方法、装置及存储介质 | |
CN104536935B (zh) | 计算显示方法、计算编辑方法及装置 | |
CN109542417A (zh) | 一种dom渲染网页的方法、装置、终端和存储介质 | |
CN109857478A (zh) | 目标应用程序的运行方法、装置及可读存储介质 | |
CN110851108A (zh) | 电子设备操作方法、装置、电子设备及存储介质 | |
CN110851240B (zh) | 功能调用方法、装置及存储介质 | |
CN111381829A (zh) | 在线编程方法、装置、电子设备和存储介质 | |
US11102397B2 (en) | Method for capturing images, terminal, and storage medium | |
CN106021072A (zh) | 信息显示方法及装置 | |
CN104063424B (zh) | 网页图片的展现方法和展现装置 | |
CN110968362A (zh) | 应用运行方法、装置及存储介质 | |
CN112766498B (zh) | 模型训练方法及装置 | |
CN106331076A (zh) | 广告推送方法及装置 | |
CN111079040B (zh) | 资源嗅探方法、装置、终端、服务器及存储介质 | |
CN110865864B (zh) | 快应用的界面显示方法、装置、设备及存储介质 | |
CN107402756A (zh) | 用于绘制页面的方法、装置及终端 | |
CN114186894A (zh) | 项目风险检测方法、装置、电子设备及存储介质 | |
CN107395724A (zh) | 网络请求方法及装置 | |
CN112256445A (zh) | 基于应用程序的数据处理方法、装置、设备及存储介质 | |
CN110837817A (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 |