CN113760396A - 一种应用运行方法、装置、电子设备和存储介质 - Google Patents

一种应用运行方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN113760396A
CN113760396A CN202010627293.1A CN202010627293A CN113760396A CN 113760396 A CN113760396 A CN 113760396A CN 202010627293 A CN202010627293 A CN 202010627293A CN 113760396 A CN113760396 A CN 113760396A
Authority
CN
China
Prior art keywords
function
function pointer
stage
life cycle
pointer
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.)
Pending
Application number
CN202010627293.1A
Other languages
English (en)
Inventor
高飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010627293.1A priority Critical patent/CN113760396A/zh
Publication of CN113760396A publication Critical patent/CN113760396A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种应用运行方法、装置、电子设备和存储介质。所述方法包括:在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。通过本发明实施例的技术方案,解决了程序主工程与业务组件之间的耦合性问题,并实现了高效、低成本的对业务组件的维护的效果。

Description

一种应用运行方法、装置、电子设备和存储介质
技术领域
本发明实施例涉及计算机技术,尤其涉及一种应用运行方法、装置、电子设备和存储介质。
背景技术
安装在终端上的应用程序在启动后会经历多种不同的生命周期阶段,该生命周期阶段包括前台运行阶段、后台运行阶段等。在应用程序进入到某个生命周期阶段时,需要通过调用预先注册在注册表中的业务组件的预设方法函数,来执行一定的处理操作,比如在购物应用程序从前台运行阶段进入到后台运行阶段时,需要通过调用视频业务组件的某一方法函数实现视频的暂停播放,同样的,在购物应用程序从后台运行阶段进入到前台运行阶段时,需要通过调用另一方法函数实现视频的继续播放。
在实现本发明的过程中,发明人发现现有技术中至少存在以下技术问题:
上述现有方案中,应用程序的主工程需要维护针对各个生命周期阶段的注册表,如有新增或删除的业务组件,需要手动对注册表进行插入或删除操作,维护成本高;以及,需要在主工程中引入各个业务组件,增加了主工程与业务组件之间的耦合性,使得主工程与业务组件的独立开发测试存在困难。
发明内容
本发明实施例提供了一种应用运行方法、装置、电子设备和存储介质,以解决主工程与业务组件之间的耦合性问题,并实现高效、低成本的对业务组件的维护。
第一方面,本发明实施例提供了一种应用运行方法,该方法包括:
在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
第二方面,本发明实施例还提供了一种应用运行装置,该装置包括:
函数指针写入模块,用于在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
回调函数读取模块,用于在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例中任一所述的应用运行方法。
第四方面,本发明实施例还提供了计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例中任一所述的应用运行方法。
本发明实施例的技术方案,通过在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入所述生命周期阶段对应的数据表中,在检测到应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数,这样解决了现有技术中若需增加或删除业务组件时,需要手动对注册表进行插入或删除操作,维护成本高,且在主工程的生命周期代码中需要用到业务组件的地方,需要在主工程中引入各个业务组件,增加了主工程与业务组件之间的耦合性的问题。本发明实施例的技术方案在进入生命周期阶段时,主工程从数据表中读取函数指针,进行执行函数指针对应的回调函数,无需维护注册表,且无需在主工程中引入业务组件,实现了主工程和业务组件之间的解耦合。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的应用运行方法的流程图;
图2是本发明实施例二提供的应用运行方法的流程图;
图3是本发明实施例二提供的业务组件的自注册过程示意图;
图4是本发明实施例三提供的应用运行方法的流程图;
图5是本发明实施例四提供的应用运行装置的结构示意图;
图6是本发明实施例五提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种应用运行方法的流程图,本实施例可适用于应用程序的编译运行场景中。该方法可以由应用运行装置来执行,该装置可以由软件和/或硬件的方式来实现,集成于具有应用程序的终端中。
在介绍本发明实施例的技术方案之前,为了更好的理解本发明实施例的技术方案,先介绍一下应用程序的编译阶段和运行阶段,以及应用程序的生命周期:
应用程序在运行之前,程序员需先编写一些源代码,这些源代码中包含了应用程序的各生命周期阶段分别对应的生命周期方法函数,生命周期方法函数被包含在主工程中,当应用程序启动运行并进入某个生命周期阶段时,会执行所进入的生命周期阶段对应的生命周期方法函数。当程序员编写源代码完成后,则需对源代码编译,此时,应用程序进入编译阶段,编译阶段会对程序员编写的源代码进行编译生成最终的可执行文件。当用户点击安装的应用程序的图标以触发应用程序启动时,应用程序首先进入加载阶段,加载阶段结束后进入运行阶段,即进入该应用程序的生命周期阶段。
每个应用程序都具有不同的生命周期阶段,应用程序在运行过程中会根据用户的操作等因素进行生命周期阶段的切换。例如,当用户在淘宝这款应用程序的商品详情页观看某一产品的视频介绍时,应用程序处于前台运行的生命周期阶段,此时若用户通过点击手机中的“返回”按键,则暂停视频的播放,此时,会触发淘宝这个应用程序从前台运行的生命周期阶段进入到后台运行的生命周期阶段。若此时用户又对该应用程序的图标进行点击时,该应用程序又从后台运行的生命周期阶段进入到前台运行的生命周期阶段,并继续进行视频的播放。
本实施例的方法具体包括以下步骤:
S110、在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入所述生命周期阶段对应的数据表中。
示例性的,用户编写了一些源代码,源代码编写完成后需要对其进行编译,可执行文件可以是应用程序对源代码进行编译阶段生成的文件。当检测到应用程序的启动触发事件时,应用程序进入加载阶段,将编译阶段生成的可执行文件加载到内存中。这里的触发事件例如可以是,用户点击打开淘宝这款应用程序。
回调函数为业务组件下的一个方法函数,例如,可以是使淘宝中的某一视频组件的暂停或播放的方法函数。函数指针可以是与回调函数对应的一个指针,每一个回调函数都有其对应的一个函数指针。
具体的,当检测到某款应用程序启动打开时,主工程会从加载的在淘宝这款应用程序的编译阶段生成的可执行文件中,读取该应用程序的业务组件的回调函数的函数指针和该函数指针所对应的生命周期阶段,将函数指针写入该函数指针所对应的生命周期阶段对应的数据表中。这样以便后续当应用程序进行生命周期阶段后,基于函数指针将与其对应的回调函数进行回调执行。
需要说明的是,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入所述生命周期阶段对应的数据表中,具体可以是:通过执行加载器代码,从在应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中。
S120、在检测到应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数。
示例性的,当加载阶段结束后,该应用程序进入生命周期阶段。根据应用程序进入的生命周期的不同阶段,从进入的不同生命周期阶段所对应的数据表中读取对应的函数指针,并执行与所读取的函数指针对应的回调函数。
例如,当触发启动淘宝这个应用程序时,将编译阶段生成的可执行文件加载到内存中,并从加载的可执行文件中读取业务组件的回调函数的函数指针和该函数指针对应的生命周期阶段,将该函数指针写入与其对应的生命周期阶段对应的数据表中。当加载结束后,淘宝进入它的生命周期阶段。当用户在淘宝这款应用程序的商品详情页观看某一产品的视频介绍,应用程序处于前台运行的生命周期阶段,此时若用户通过点击手机中的“返回”按键,则会触发应用程序切换到后台运行的生命周期阶段,此时从后台运行的生命周期阶段所对应的数据表中读取到函数指针1,并执行读取的该函数指针1对应的回调函数1,以实现暂停视频的播放。
而后用户又对该应用程序的图标进行点击时,触发该应用程序从后台运行的生命周期阶段进入到前台运行的生命周期阶段,此时从前台运行的生命周期阶段所对应的数据表中读取到另一函数指针2,并执行读取的另一函数指针2对应的回调函数2,以实现视频的继续播放。
这样在增加业务组件时,可在编译阶段就将该新增业务组件的回调函数所对应的函数指针写入可执行文件中,启动加载阶段即可从可执行文件中读取新增组件的回调函数所对应的函数指针,并将其写入对应的生命周期阶段的数据表中,当进入生命周期阶段时,则根据进入的生命周期阶段读取对应的函数指针,执行与该函数指针对应的回调函数。同样的,当要删除业务组件时,可在编译阶段已删除的业务组件的回调函数对应的函数指针就不会被写入可执行文件中,启动加载阶段也就不会将已删除组件的回调函数对应的函数指针写入对应的生命周期阶段的数据表中,当进入生命周期阶段时,主工程也就无法读取到与生命周期阶段对应的函数指针。
这样就解决了现有技术中若需增加或删除业务组件时,需要手动对注册表进行插入或删除操作,维护成本高,且在主工程的生命周期代码中需要用到业务组件的地方,需要在主工程中引入各个业务组件,增加了主工程与业务组件之间的耦合性的问题。本发明实施例的技术方案在进入生命周期阶段时,主工程从数据表中读取函数指针,进行执行函数指针对应的回调函数,无需维护注册表,且无需在主工程中引入业务组件,实现了主工程和业务组件之间的解耦合。
需要说明的是,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数,具体可以是:通过执行主工程代码,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。这样实现了主工程和业务组件之间的解耦合。
需要说明的是,数据表中实际还有函数指针对应的生命周期阶段的标识,在读取函数指针时,通过遍历的方式将数据表中所有生命周期阶段的标识对应的函数指针都进行读取。
本发明实施例的技术方案,通过在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入生命周期阶段对应的数据表中,在检测到应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数,这样解决了现有技术中若需增加或删除业务组件时,需要手动对注册表进行插入或删除操作,维护成本高,且在主工程的生命周期代码中需要用到业务组件的地方,需要在主工程中引入各个业务组件,增加了主工程与业务组件之间的耦合性的问题。本发明实施例的技术方案在进入生命周期阶段时,主工程从数据表中读取函数指针,进行执行函数指针对应的回调函数,无需维护注册表,且无需在主工程中引入业务组件,实现了主工程和业务组件之间的解耦合。
实施例二
图2为本发明实施例二提供的应用运行方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。本实施例在上述各实施例的基础上,优选是在检测到应用程序的启动触发事件之前,该方法还包括:在对应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段。从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,包括:从编译后生成的可执行文件的数据段,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段。
其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的应用运行方法包括:
S210、在对应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段。
示例性的,参考图3所述的业务组件的自注册过程示意图,在对应用程序的源代码进行编译时,若该应用程序的生命周期阶段为一个,则可将业务组件的需要在这一个生命周期阶段执行的回调函数的函数指针、该函数指针所对应的生命周期阶段,以静态变量的形式写入编译后生成的可执行文件的数据段中,例如,可以是写入编译后生成的Mach-O文件的__DATA段中。若该应用程序的生命周期阶段为多个,则可将业务组件的需要在各生命周期阶段执行的各生命周期阶段对应的各回调函数的各函数指针、各函数指针所对应的各生命周期阶段,写入到编译后生成的可执行文件的数据段中。以便后续可从该编译后生成的可执行文件的数据段中读取各生命周期阶段对应的回调函数的函数指针。可选的,函数指针可以键值对(key-value)的形式存储在静态变量中,key代表生命周期阶段,value代表函数指针。
iOS平台一个应用程序的最终可执行文件为二进制Mach-O文件,Mach-O文件主要包含__TEXT、__DATA和__LINKEDIT段。其中__TEXT,主要存储mach header、机器指令及只读常量。_DATA包含初始化了的全局静态变量和局部静态变量。__LINKEDIT包含函数变量的信息(例如名字和地址)。
可选的,所述将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段,具体可以是:将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、所述函数指针对应的生命周期阶段、以及预设位置参数,作为输入参数调用执行预设方法函数,以按照所述预设位置参数将所述函数指针和所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段中。
示例性的,预设位置参数可以是预先设置的业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针,在后续生成的可执行文件的数据段中的位置参数。例如,这里的预设方法函数可以是宏函数。
将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、所述函数指针对应的生命周期阶段、以及预先设置的业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针在后续生成的可执行文件的数据段中的位置参数,作为输入参数,业务组件调用上述预设方法函数。按照预先设置的业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针在后续生成的可执行文件的数据段中的位置参数,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、函数指针对应的生命周期阶段,写入编译后生成的可执行文件的数据段中。这样可以很明确知道业务组件的需要的一个或多个生命周期阶段执行的回调函数的函数指针、函数指针对应的生命周期阶段,在可执行文件的数据段的位置,以便后续基于该位置进行读取与各生命周期阶段对应的回调函数的函数指针,执行函数指针对应的回调函数。
可选的,在对所述应用程序进行编译之前,所述方法还包括:为所述预设方法函数设置预设属性修饰符,以标识所述预设方法函数在编译阶段被调用执行。
示例性的,预设属性修饰符可以是对所述预设方法函数进行修饰的标识符。在程序员编写应用程序的源代码后,对源代码进行编译之前,对预设方法函数进行修饰,设置对应的预设属性修饰符,以标识该预设方法函数在编译阶段被调用执行。例如,为section方法(即宏方法)设置attribute__修饰符,使得该section方法能够在编译期间被调用执行。
S220、在检测到应用程序的启动触发事件时,从编译后生成的可执行文件的数据段,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入所述生命周期阶段对应的数据表中。
S230、在检测到应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数。
本发明实施例的技术方案,通过在对应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段,以便后续可从该编译后生成的可执行文件的数据段中读取各生命阶段对应的回调函数的函数指针。
实施例三
图4为本发明实施例三提供的应用运行方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。本实施例在上述各实施例的基础上,优选是在所述应用程序启动后,所述方法还包括:在检测到对当前显示页面中的第一业务组件的触发操作时,获取针对第一业务组件预先设置的需要调用的第二业务组件的目标方法函数的标识信息;将标识信息进行解析,根据解析结果确定需要调用第二业务组件的目标方法函数后,对目标方法函数进行调用和执行。
其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图3,本实施例提供的应用运行方法包括:
S310、在对应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段。
S320、在检测到应用程序的启动触发事件时,从编译后生成的可执行文件的数据段,读取业务组件的回调函数的函数指针和函数指针对应的生命周期阶段,将函数指针写入生命周期阶段对应的数据表中。
S330、在检测到应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的数据表中读取函数指针,并执行读取的函数指针对应的回调函数。
S340、若进入的生命周期阶段为前台运行阶段,则在检测到对当前显示页面中的第一业务组件的触发操作时,获取针对第一业务组件预先设置的需要调用的第二业务组件的目标方法函数的标识信息;将标识信息进行解析,根据解析结果确定需要调用第二业务组件的目标方法函数后,对目标方法函数进行调用和执行。
示例性的,当前显示页面可以是启动某一应用程序时,该应用程序打开后当前所显示的页面。第一业务组件可以是应用程序中的任一业务组件。第二业务组件可以是应用程序中的另一业务组件。目标方法函数可以是与第二业务组件中的任一方法函数。需要调用的第二业务组件的目标方法函数的标识信息可以是任一可以表示调用第二业务组件的目标方法函数的标识,例如,统一资源定位符(Uniform Resource Locator,URL),也可以是一个修饰符,还可以是一个图标标识等,这里不做限定,只要可将目标方法函数进行标识即可。
可选的,这里标识信息中可以包含:第一业务组件的组件标识和所述目标方法函数的函数标识、以及调用所述目标方法函数所需要的输入参数。这里的第一业务组件的组件标识可以是任一可以表示第一组件的标识;目标方法函数的标识可以是任一可以表示目标方法函数的标识。
当检测到对当前显示页面中的第一业务组件的触发操作时,获取预先设置在第一业务组件的代码中的针对第一业务组件需要调用第二业务组件的目标方法函数的标识信息,将该标识信息传给解析器,解析器对该标识信息进行解析,基于解析结果确定需要调用第二业务组件的目标方法函数后,对该目标方法函数进行调用和执行。
本方案利用Objective-C语言的动态化特性,通过URL进行业务组件间路由交互,从而解决了现有技术中,在一个业务组件中需要调用另一业务组件的方法函数时,需在该业务组件的头文件中引入另一业务组件,造成了两个业务组件的耦合的问题。本发明实施例的这种方案,实现了各业务组件之间的解耦合。
本发明实施例的技术方案,通过在检测到对当前显示页面中的第一业务组件的触发操作时,获取针对第一业务组件预先设置的需要调用的第二业务组件的目标方法函数的标识信息;将标识信息进行解析,根据解析结果确定需要调用第二业务组件的目标方法函数后,对目标方法函数进行调用和执行,实现了各业务组件间的解耦合。
以下是本发明实施例提供的应用运行装置的实施例,该装置与上述各实施例的应用运行方法属于同一个发明构思,在应用运行装置的实施例中未详尽描述的细节内容,可以参考上述应用运行方法的实施例。
实施例四
图5为本发明实施例四提供的应用运行装置的结构示意图,如图5所示,该装置包括:函数指针写入模块310和回调函数读取模块320。
其中,函数指针写入模块310,用于在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
回调函数读取模块320,用于在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
在上述实施例的技术方案的基础上,该装置还包括:
信息写入模块,用于在对所述应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段。
在上述实施例的技术方案的基础上,函数指针写入模块310具体用于:
从所述编译后生成的可执行文件的数据段,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段。
在上述实施例的技术方案的基础上,信息写入模块具体用于:
将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、所述函数指针对应的生命周期阶段、以及预设位置参数,作为输入参数调用执行预设方法函数,以按照所述预设位置参数将所述函数指针和所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段中。
在上述实施例的技术方案的基础上,该装置还包括:
函数修饰模块,用于为所述预设方法函数设置预设属性修饰符,以标识所述预设方法函数在编译阶段被调用执行;其中所述预设方法函数为宏函数。
在上述实施例的技术方案的基础上,函数指针写入模块310还具体用于:
通过执行加载器代码,从在应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中。
在上述实施例的技术方案的基础上,回调函数读取模块320具体用于:
通过执行主工程代码,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
在上述实施例的技术方案的基础上,该装置还包括:
标识信息获取模块,用于在检测到对当前显示页面中的第一业务组件的触发操作时,获取针对第一业务组件预先设置的需要调用的第二业务组件的目标方法函数的标识信息;
函数调用和执行模块,用于将所述标识信息进行解析,根据解析结果确定需要调用第二业务组件的目标方法函数后,对所述目标方法函数进行调用和执行。
可选的,所述标识信息中包含:第一业务组件的组件标识和所述目标方法函数的函数标识、以及调用所述目标方法函数所需要的输入参数。
本发明实施例所提供的应用运行装置可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述应用运行装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例五
图6为本发明实施例五提供的一种电子设备的结构示意图。图6示出了适于用来实现本发明实施方式的示例性电子设备12的框图。图6显示的电子设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,电子设备12以通用计算设备的形式表现。电子设备12的业务组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统业务组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围业务组件互连(PCI)总线。
电子设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
电子设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该电子设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与电子设备12的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发实施例所提供的一种应用运行方法步骤,该方法包括:
在检测到应用程序的启动触发事件时,从在应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供的保留库存量的确定方法的技术方案。
本实施例提出的电子设备与上述实施例提出的应用运行方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行应用运行方法相同的有益效果。
实施例六
本发明实施例六提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的应用运行方法步骤,该方法包括:
在检测到应用程序的启动触发事件时,从在应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种应用运行方法,其特征在于,包括:
在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
2.根据权利要求1所述的方法,其特征在于,在所述检测到应用程序的启动触发事件之前,所述方法还包括:
在对所述应用程序进行编译时,将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段;
所述从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,包括:
从所述编译后生成的可执行文件的数据段,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段。
3.根据权利要求2所述的方法,其特征在于,所述将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、以及所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段,包括:
将业务组件的需要在一个或多个生命周期阶段执行的回调函数的函数指针、所述函数指针对应的生命周期阶段、以及预设位置参数,作为输入参数调用执行预设方法函数,以按照所述预设位置参数将所述函数指针和所述函数指针对应的生命周期阶段,写入到编译后生成的可执行文件的数据段中。
4.根据权利要求3所述的方法,其特征在于,在对所述应用程序进行编译之前,所述方法还包括:
为所述预设方法函数设置预设属性修饰符,以标识所述预设方法函数在编译阶段被调用执行;其中所述预设方法函数为宏函数。
5.根据权利要求1所述的方法,其特征在于,所述从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中,包括:
通过执行加载器代码,从在应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
所述从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数,包括:
通过执行主工程代码,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
6.根据权利要求1-5中任一项所述的方法,其特征在于,在所述应用程序启动后,所述方法还包括:
在检测到对当前显示页面中的第一业务组件的触发操作时,获取针对第一业务组件预先设置的需要调用的第二业务组件的目标方法函数的标识信息;
将所述标识信息进行解析,根据解析结果确定需要调用第二业务组件的目标方法函数后,对所述目标方法函数进行调用和执行。
7.根据权利要求6所述的方法,其特征在于,所述标识信息中包含:第一业务组件的组件标识和所述目标方法函数的函数标识、以及调用所述目标方法函数所需要的输入参数。
8.一种应用运行装置,其特征在于,包括:
函数指针写入模块,用于在检测到应用程序的启动触发事件时,从应用程序编译阶段生成的可执行文件中,读取业务组件的回调函数的函数指针和所述函数指针对应的生命周期阶段,将所述函数指针写入所述生命周期阶段对应的数据表中;
回调函数读取模块,用于在检测到所述应用程序进入生命周期阶段后,从进入的生命周期阶段所对应的所述数据表中读取函数指针,并执行读取的所述函数指针对应的回调函数。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的应用运行方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的应用运行方法。
CN202010627293.1A 2020-07-01 2020-07-01 一种应用运行方法、装置、电子设备和存储介质 Pending CN113760396A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010627293.1A CN113760396A (zh) 2020-07-01 2020-07-01 一种应用运行方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010627293.1A CN113760396A (zh) 2020-07-01 2020-07-01 一种应用运行方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN113760396A true CN113760396A (zh) 2021-12-07

Family

ID=78785453

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010627293.1A Pending CN113760396A (zh) 2020-07-01 2020-07-01 一种应用运行方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN113760396A (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140157291A1 (en) * 2012-11-30 2014-06-05 Facebook, Inc. Method and system for binding objects in dynamic programming languages using caching techniques
CN105183457A (zh) * 2015-08-13 2015-12-23 北京金山安全软件有限公司 一种监听界面生命周期回调的方法及装置
CN106155749A (zh) * 2016-07-28 2016-11-23 浪潮(北京)电子信息产业有限公司 一种监控插件扩展方法及装置
US20180113691A1 (en) * 2016-10-24 2018-04-26 International Business Machines Corporation Compiling Optimized Entry Points for Local-Use-Only Function Pointers
CN108182131A (zh) * 2017-12-13 2018-06-19 东软集团股份有限公司 监控应用运行状态的方法、装置、存储介质及电子设备
CN110321178A (zh) * 2019-06-28 2019-10-11 百度在线网络技术(北京)有限公司 附属应用端的启动处理方法、装置、设备及存储介质
CN110362334A (zh) * 2019-06-05 2019-10-22 广州南方智能技术有限公司 二次开发语言的c++对象生命周期管理方法、设备、介质
CN110502229A (zh) * 2019-08-26 2019-11-26 广州小鹏汽车科技有限公司 页面的生成方法、装置、终端、计算机设备和存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140157291A1 (en) * 2012-11-30 2014-06-05 Facebook, Inc. Method and system for binding objects in dynamic programming languages using caching techniques
CN105183457A (zh) * 2015-08-13 2015-12-23 北京金山安全软件有限公司 一种监听界面生命周期回调的方法及装置
CN106155749A (zh) * 2016-07-28 2016-11-23 浪潮(北京)电子信息产业有限公司 一种监控插件扩展方法及装置
US20180113691A1 (en) * 2016-10-24 2018-04-26 International Business Machines Corporation Compiling Optimized Entry Points for Local-Use-Only Function Pointers
CN108182131A (zh) * 2017-12-13 2018-06-19 东软集团股份有限公司 监控应用运行状态的方法、装置、存储介质及电子设备
CN110362334A (zh) * 2019-06-05 2019-10-22 广州南方智能技术有限公司 二次开发语言的c++对象生命周期管理方法、设备、介质
CN110321178A (zh) * 2019-06-28 2019-10-11 百度在线网络技术(北京)有限公司 附属应用端的启动处理方法、装置、设备及存储介质
CN110502229A (zh) * 2019-08-26 2019-11-26 广州小鹏汽车科技有限公司 页面的生成方法、装置、终端、计算机设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈蒙蒙;陈兴蜀;金鑫;: "基于进程生命周期的虚拟机隐藏进程检测技术", 计算机应用, no. 2, 20 December 2017 (2017-12-20) *

Similar Documents

Publication Publication Date Title
CN112817657B (zh) 一种应用程序启动项加载方法、装置、系统及存储介质
CN111897740A (zh) 用户界面的测试方法、装置、电子设备及计算机可读介质
CN111061489B (zh) 一种多平台编译检测方法、装置、设备及介质
CN111796865B (zh) 一种字节码文件修改方法、装置、终端设备及介质
CN113127050B (zh) 一种应用资源打包过程监控方法、装置、设备和介质
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
CN112463256A (zh) 确定配置文件的方法、系统、电子设备及存储介质
CN113971037A (zh) 应用处理方法、装置、电子设备及存储介质
CN113051514A (zh) 元素的定位方法、装置、电子设备及存储介质
CN113050984A (zh) 资源调取方法、装置、电子设备及存储介质
CN110188366A (zh) 一种信息处理方法、装置及存储介质
CN114003269A (zh) 组件处理方法、装置、电子设备及存储介质
CN111352644A (zh) 小程序更新方法、装置、服务器及存储介质
CN110908882A (zh) 一种应用程序的性能分析方法、装置、终端设备及介质
CN113687880B (zh) 一种调用组件的方法、装置、设备和介质
CN113590225B (zh) 贴图检测方法、装置、电子设备及存储介质
CN112506592B (zh) 页面加载时长的确定方法、装置、设备和存储介质
CN113760396A (zh) 一种应用运行方法、装置、电子设备和存储介质
CN114090514A (zh) 分布式系统的日志检索方法及装置
CN111209225B (zh) 获取实际地址的方法、装置、介质和电子设备
CN112711400B (zh) 视图的处理方法、设备及存储介质
CN114185608B (zh) 文件描述符检测方法及设备
CN111625432B (zh) 页面加载耗时确定方法、装置和计算机可读存储介质
CN111399844B (zh) 安全编译方法、装置、电子设备及计算机可读介质
US20220308847A1 (en) Compiling method, compiling device, execution method, computer-readable storage medium and computer device

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