CN110442396A - 应用程序启动方法及装置、存储介质及电子设备 - Google Patents

应用程序启动方法及装置、存储介质及电子设备 Download PDF

Info

Publication number
CN110442396A
CN110442396A CN201910699630.5A CN201910699630A CN110442396A CN 110442396 A CN110442396 A CN 110442396A CN 201910699630 A CN201910699630 A CN 201910699630A CN 110442396 A CN110442396 A CN 110442396A
Authority
CN
China
Prior art keywords
task
dependent tree
initiated
tree
application program
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
Application number
CN201910699630.5A
Other languages
English (en)
Other versions
CN110442396B (zh
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN201910699630.5A priority Critical patent/CN110442396B/zh
Publication of CN110442396A publication Critical patent/CN110442396A/zh
Application granted granted Critical
Publication of CN110442396B publication Critical patent/CN110442396B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading

Landscapes

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

Abstract

本公开涉及数据处理技术领域,具体涉及一种应用程序启动方法,所述方法包括:获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;根据所述待初始化任务和所述任务属性构建任务依赖树;在所述任务依赖树中确定至少一个目标任务;运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。本公开实施例的技术方案一方面能够实现支持不同任务链节点之间相互等待的功能,进而缩短进行应用程序界面首帧绘制之前所需的时间;另一方面,能够通过任务依赖树的树状结构处理待初始化任务之间的复杂依赖关系,进而能够实现缩短进行应用程序界面首帧绘制之前所需的时间的目的。

Description

应用程序启动方法及装置、存储介质及电子设备
技术领域
本公开涉及数据处理技术领域,具体而言,涉及一种应用程序启动方法及装置、计算机可读存储介质及电子设备。
背景技术
应用程序启动的过程一般需要经历onCreate()方法初始化的过程才可以进行应用程序界面首帧绘制。然而,随着应用程序的业务功能越来越多,需要通过onCreate()方法初始化的任务越来越多,因此在应用程序启动过程中,进行应用程序界面首帧绘制之前所需的时间也越来越长。
为了解决上述问题,开发者开发了Rocket框架和Alpha框架,通过将一部分待初始化任务构建成为简单的异步任务链进行异步处理,减小了初始化过程所需的时间。然而,由于在上述两种框架中均不支持在同步任务链上等待异步任务链上异步任务执行完成的功能,因此无法最大程度的缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间。同时,在待初始化任务中存在同步任务和异步任务之间的依赖关系时,由于现有的方法只能将异步执行的任务抽离,因此这种复杂的依赖关系很难通过现有的方法进行构建,进而也无法达到缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间的目的。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种程序启动及装置、计算机可读存储介质及电子设备,进而至少在一定程度上克服由于不支持在同步任务链上等待异步任务链上异步任务执行完成的功能以及无法构建复杂依赖关系造成的进行应用程序界面首帧绘制之前的时间较长的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供了一种应用程序启动方法,包括:
获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
根据所述待初始化任务和所述任务属性构建任务依赖树;
在所述任务依赖树中确定至少一个目标任务;
运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
在本公开的一种示例性实施例中,基于前述方案,在所述目标任务运行结束之后,所述方法还包括:
若还存在其它所述待初始化任务,则继续运行所述任务依赖树。
在本公开的一种示例性实施例中,基于前述方案,所述任务属性还包括任务依赖关系;
所述根据所述待初始化任务和所述任务属性构建任务依赖树,包括:
根据所述任务依赖关系将所述待初始化任务分为至少一个组,并将每组对应的所述待初始化任务连接形成依赖任务链;
以空节点为根节点,以所述依赖任务链的链头为所述根节点的子节点构建任务依赖树。
在本公开的一种示例性实施例中,基于前述方案,所述任务属性还包括任务标识;
在运行所述任务依赖树之前,所述方法还包括:
根据所述任务标识对所述任务依赖树的合法性进行检查。
在本公开的一种示例性实施例中,基于前述方案,所述根据所述任务标识对所述任务依赖树的合法性进行检查,包括:
深度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在回环路径;
在所述任务依赖树中存在回环路径时,生成并展示对应的提示信息。
在本公开的一种示例性实施例中,基于前述方案,所述根据所述任务标识对所述任务依赖树的合法性进行检查,包括:
广度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在相同任务;
在所述任务依赖树中存在相同任务时,生成并展示对应的提示信息。
在本公开的一种示例性实施例中,基于前述方案,在所述任务依赖树中确定至少一个目标任务,包括:
响应于接收到预设任务集,根据所述预设任务集在所述任务依赖树中确定至少一个目标任务。
在本公开的一种示例性实施例中,基于前述方案,所述任务属性还包括任务优先级,所述方法还包括:
判断所述预设任务集中各预设任务是否被所述任务依赖树包含;
在所述任务依赖树包含所述预设任务时,提升所述预设任务对应目标任务的任务优先级;
在所述任务依赖树不包含所述预设任务时,将所述预设任务从所述预设任务集中剔除。
在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
在运行所述任务依赖树时,记录所述任务依赖树运行时的运行信息。
根据本公开的第二方面,提供了一种应用程序启动装置,包括:
数据获取模块,用于获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
依赖树构建模块,用于根据所述待初始化任务和所述任务属性构建任务依赖树;
任务确定模块,用于在所述任务依赖树中确定至少一个目标任务;
任务运行模块,用于运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
根据本公开的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述实施例中第一方面所述的应用程序启动方法。
根据本公开实施例的第四方面,提供了一种电子设备,包括:
处理器;以及
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述实施例中第一方面所述的应用程序启动方法。
本公开实施例提供的技术方案可以包括以下有益效果:
本公开的一种实施例所提供的应用程序启动方法中,通过获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性,根据所述待初始化任务和所述任务属性构建任务依赖树,在所述任务依赖树中确定至少一个目标任务,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。一方面,通过在任务依赖树中确定目标任务,并且在目标任务运行结束后开始首帧绘制,能够实现支持不同任务链节点之间相互等待的功能,进而缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间;另一方面,通过根据待初始化任务和任务属性构建任务依赖树,能够通过任务依赖树的树状结构处理待初始化任务之间的复杂依赖关系,进而能够实现缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间的目的。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出在理想状态下初始化任务的初始化过程所需的最短时间;
图2示意性示出现有技术下初始化任务的初始化过程所需的时间;
图3示意性示出本公开示例性实施例中一种应用程序启动方法的流程图;
图4示意性示出本公开示例性实施例中根据所述初始化任务和所述任务属性构建任务依赖树的方法的流程图;
图5示意性示出本公开示例性实施例中判断预设任务集中各预设任务是否被任务依赖树包含的方法的流程图;
图6示意性示出本公开示例性实施例中一种根据所述任务标识对所述任务依赖树的合法性进行检查的方法流程图;
图7示意性示出本公开示例性实施例中另一种根据所述任务标识对所述任务依赖树的合法性进行检查的方法流程图;
图8示意性示出本公开示例性实施例中以初始化任务A-O为例时构建的任务依赖树;
图9示意性示出本公开示例性实施例中一种应用程序启动装置的组成示意图;
图10示意性示出本公开示例性实施例中另一种应用程序启动装置的组成示意图;
图11示意性示出本公开示例性实施例中另一种应用程序启动装置的组成示意图;
图12示意性示出了适于用来实现本公开示例性实施例的电子设备的计算机系统的结构示意图;
图13示意性示出了根据本公开的一些实施例的计算机可读存储介质的示意图。
具体实施方式
现在将参照附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在现有的应用程序启动的方法当中,会将待初始化任务中能异步执行的任务抽离至另一个线程进行处理,以降低待初始化任务进行初始化过程的时间。但是,由于这种简单抽离的方式并不支持在主线程任务完成后直接等待其它线程的异步任务完成的功能,因此无法最大程度的减小初始化过程的时间。同时,在待初始化任务中存在同步任务和异步任务之间的依赖关系时,由于现有的方法只能将异步执行的任务抽离,因此这种复杂的依赖关系很难通过现有的方法进行构建。
以待初始化任务A-J均为开始首帧绘制之前必须完成的待初始化任务为例,假设在A-J中存在如下依赖关系:待初始化任务A、C、D为同步任务,且D依赖C,C依赖A;B、E-J为可以异步执行的异步任务,且H依赖B,G依赖E,I依赖H,J依赖F。在理想状态下,待初始化任务的初始化过程的最短时间为待初始化任务F、J执行结束的时间,如图1所示。然而,由于在现有技术中主线程任务完成后不支持直接等待异步任务完成的功能,任务F、J实际上会作为同步任务在主线程执行,因此待初始化任务的初始化过程的时间实际为待初始化任务A、C、D、F、J执行结束的时间,如图2所示。
进一步地,假设待初始化任务G为同步任务,由于其依赖的待初始化任务E为异步任务,此时通过简单的抽离异步任务E的方式,无法构建出E与G之间的依赖关系。
为了解决不支持在主线程任务完成后直接等待其它线程的异步任务完成的功能以及无法构建同步任务与异步任务之间的依赖关系的问题,在本示例性实施例中,首先提供了一种应用程序启动方法,可以应用于通过onCreate()方法进行初始化的应用程序的启动过程中。例如,在安卓系统下应用程序的启动过程。参照图3中所示,上述的应用程序启动方法可以包括以下步骤:
S310,获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
S320,根据所述待初始化任务和所述任务属性构建任务依赖树;
S330,在所述任务依赖树中确定至少一个目标任务;
S340,运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
根据本示例性实施例中所提供的应用程序启动方法中,一方面,通过在任务依赖树中确定目标任务,并且在目标任务运行结束后开始首帧绘制,能够实现支持不同任务链节点之间相互等待的功能,进而缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间;另一方面,通过根据待初始化任务和任务属性构建任务依赖树,能够通过任务依赖树的树状结构处理待初始化任务之间的复杂依赖关系,进而能够实现缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间的目的。
下面,将结合附图及实施例对本示例性实施例中的应用程序启动方法的各个步骤进行更详细的说明。
步骤S310,获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性。
在本公开的一种示例实施例中,所述任务属性包括运行任务所需的任务运行数据,具体可以包括各待初始化任务对应的任务状态、同步处理或异步处理开关以及启动任务时间等任务运行时需要的配置,可以根据具体应用程序进行设置,本公开对此不作特殊限制。其中,所述任务状态可以根据任务的运行情况进行改变。例如,在任务开始之前,任务状态为静止;当任务开始运行时,任务状态为运行;当任务运行结束后,任务状态为结束。此外,设置同步处理或异步处理开关是为了使CPU可以根据开关调度对应的线程对待初始化任务进行处理。通过设置任务属性,可以使得待初始化任务在运行过程中能够任务属性进行运行,进而在待初始化任务中的同步任务和异步任务存在依赖关系时,CPU能够根据待初始化任务数据调度对应的线程进行处理。
步骤S320,根据所述待初始化任务和所述任务属性构建任务依赖树。
在本公开的一种示例实施例中,所述任务属性还可以包括任务依赖关系。此时,根据所述初始化任务和所述任务属性构建任务依赖树,参照图4所示,包括如下步骤S410至S420:
步骤S410,根据所述任务依赖关系将所述待初始化任务分为至少一个组,并将每组对应的所述待初始化任务连接形成依赖任务链。
步骤S420,以空节点为根节点,以所述依赖任务链的链头为所述根节点的子节点构建任务依赖树。
在本公开的一种示例实施例中,可以根据任务属性中包括的任务依赖关系将存在依赖关系的待初始化任务分为一个组,将各组内的待初始化任务按照任务依赖关系连接形成依赖任务链。以预设的一个空节点为根节点,以上述依赖任务链的链头为根节点的子节点将依赖任务链与根节点连接,构建任务依赖树。
需要说明的是,由于按照任务依赖关系连接形成的依赖任务链可能存在待初始化任务重复的情况,因此在构建任务依赖树时,需要将存在待初始化任务重复的情况的2条或者多条依赖任务链合并为任务依赖树的一个分支构建任务依赖树。例如,按照任务依赖关系连接形成依赖任务链1:A→B→C和依赖任务链2:A→D,2条依赖任务链中待初始化任务A重复,此时需要将依赖任务链1和依赖任务链2合并,形成任务依赖树的一个分支(参照图6中初始化任务A、B、C、D形成的依赖树分支)。
通过任务依赖关系构建任务依赖树,能够按照待初始化任务之间的依赖关系将待初始化任务排布成为任务依赖树,通过任务依赖树的树状结构表现待初始化任务之间的复杂依赖关系;同时由于在待初始化任务进行运行时,CPU可以根据步骤S310中提出的任务属性调度对应的线程进行处理,因此在任务依赖树存在复杂的任务依赖关系时依然能够进行正常的处理。
步骤S330,在所述任务依赖树中确定至少一个目标任务。
在本公开的一种示例实施例中,在所述任务依赖树中确定至少一个目标任务,包括:响应于接收到预设任务集,根据所述预设任务集在所述任务依赖树中确定至少一个目标任务。
在本公开的一种示例实施例中,在进行应用程序界面的首帧绘制之前,待初始化任务中的一部分任务是必须完成的。因此,需要用户定义哪些待初始化任务是进行应用程序界面的首帧绘制之前必须完成的待初始化任务,并配置为预设任务集。在应用程序启动时,可以根据预设任务集在任务依赖树中确定目标任务。一般情况下,应用程序界面的首帧绘制之前,主线程的同步任务必须执行结束,同时还可能存在其他线程的任务必须执行结束的情况。因此,预设任务集可以根据具体应用程序进行具体的配置。例如,预设任务集可以包括主线程的同步任务中根据依赖关系确定的最后一个执行的同步任务确定为目标任务,同时将其他线程中的必须执行结束的待初始化任务确定为目标任务。待所有目标任务执行结束后,开始首帧绘制。
进一步地,在所述任务属性还包括任务优先级时,参照图5所示,所述方法还包括如下步骤S510至S530:
步骤S510,判断所述预设任务集中各预设任务是否被所述任务依赖树包含;
步骤S520,在所述任务依赖树包含所述预设任务时,提升所述预设任务对应目标任务的任务优先级;
步骤S530,在所述任务依赖树不包含所述预设任务时,将所述预设任务从所述预设任务集中剔除。
在本公开的一种示例实施例中,在所述任务属性还包括任务优先级时,可以判断预设任务集是否合法,即所述预设任务集中各预设任务是否被任务依赖树包含。并且在任务依赖树包含预设任务时,提升所述预设任务对应目标任务的任务优先级;在所述任务依赖树不包含所述预设任务时,将所述预设任务从所述预设任务集中剔除。
例如,在应用程序启动时包括待初始化任务A-J,此时任务依赖树中包含待初始化任务A-J,若预设任务集中包括待初始化任务K,则可以判断任务依赖树不包含预设任务,此时需要将待初始化任务K从预设任务集中剔除。同时,如果预设任务集中存在待初始化任务J,此时可以将待初始化任务J的任务优先级提高,以便于待初始化任务J依赖的待初始化任务执行结束后,待初始化任务J可以优先于其它待初始化任务进行处理,因此能够缩短目标任务执行完成的时间,进而缩短应用程序启动过程中进行应用程序界面首帧绘制之前所需的时间。
步骤S340,运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
在本公开的一种示例实施例中,所述任务属性还可以包括任务标识。在运行所述任务依赖树之前,所述方法还包括:根据所述任务标识对所述任务依赖树的合法性进行检查。通过根据任务标识对所述任务依赖树的合法性进行检查,能够检查任务依赖树是否存在不合法的错误,以便于用户对任务依赖树进行修正,防止由于存在不合法的错误导致任务依赖树运行是出现死循环等现象。
具体地,所述根据初始化任务标识对所述任务依赖树的合法性进行检查,参照图6所示,包括如下步骤S610至S620:
步骤S610,深度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在回环路径。
步骤S620,在所述任务依赖树中存在回环路径时,生成并展示对应的提示信息。
在本公开的一种示例实施例中,在深度遍历所述任务依赖树的过程中,根据任务依赖关系对任务依赖树从根节点向各个子节点的方向对任务标识进行搜索,如果从一个子节点向下搜索时,多次搜索到相同的任务标识,则可以判断当前任务依赖树中存在回环路径,进而判断任务依赖树中可能存在错误。在所述任务依赖树中存在回环路径时,可以生成存在回环路径的对应的提示信息,以便于用户根据提示信息对所述任务依赖树进行修改。
具体地,所述根据初始化任务标识对所述任务依赖树的合法性进行检查,参照图7所示,也可以包括如下步骤S710至S720:
步骤S710,广度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在相同任务。
步骤S720,在所述任务依赖树中存在相同任务时,生成并展示对应的提示信息。
在本公开的一种示例实施例中,在广度遍历所述任务依赖树的过程中,根据对任务依赖树中各个待初始化任务对应的任务标识的搜索,可以判断在所述任务依赖树中是否存在两个相同的待初始化任务,进而判断任务依赖树中可能存在错误,在所述任务依赖树中存在相同任务时,可以存在相同任务的对应的提示信息,以便于用户根据提示信息对所述任务依赖树进行修改。。
在本公开的一种示例实施例中,所述方法还包括:运行所述任务依赖树时,记录任务依赖树运行时的运行信息。在根据运行所述任务依赖树时,可以记录任务依赖树运行时的运行信息以及其中每一个待初始化任务的运行信息,以便于用户可以随时查看每个待初始化任务的运行信息,每条任务链的运行信息以及依赖树的运行信息,进而根据运行信息进行调试等操作。
在本公开的一种示例实施例中,在所述目标任务运行结束之后,所述方法还包括:若还存在其它所述待初始化任务,则据继续运行所述任务依赖树。在所有开始首帧绘制之前需要完成的目标任务执行结束后,可能还存在其它待初始化任务,此时,可以继续运行任务依赖树。例如,在目标任务执行结束后,仍然存在待初始化任务I需要继续运行,待初始化任务I为同步任务,则CPU可以调用主线程进行运行;若初始化任务I为异步线程,则可以调用线程池进行运行。
以下以待初始化任务A-O为例,参照图8所示,对本公开实施例的技术方案的实现细节进行详细阐述:
步骤1,获取待初始化任务A-O对应的任务属性,可以根据任务属性确定待初始化任务是同步任务或异步任务
参照图8所示,黑色节点对应的待初始化任务A、B、C、G、I、N为同步任务,白色节点对应的待初始化任务D、E、F、H、J、K、L、M、O为异步任务。
步骤2,根据任务依赖关系将待初始化任务分为3个组,并分别连接形成6条依赖任务链
根据任务依赖关系将待初始化任务分为3个组:
第1组:包括同步任务A、B、C和异步任务D;
第2组:包括异步任务E、H、K;
第3组:同时包括同步任务G、I、N和异步任务F、J、L、M、O。
同时根据任务依赖关系连接形成如图8所示的6条依赖任务链:
第1条:A→B→C;
第2条:A→D;
第3条:E→H→K;
第4条:J→G→L→M→O;
第5条:J→G→L→N;
第6条:J→F→I。
步骤3,以空节点为根节点,以6条依赖任务链的链头为根节点的子节点构建任务依赖树
参照图8所示,以灰色的空节点为根节点,根节点分别与6条依赖任务链的链头同步任务A、异步任务E和异步任务J连接,由于第1、2条和第4、5、6条依赖任务链的链头相同,因此可以将其分别合并作为任务依赖树的一个分支,最终构建如图8所示的任务依赖树。
步骤4,根据预设任务集在任务依赖树中指定同步任务C,异步任务H和异步任务F为等待任务
步骤5,深度遍历所述任务依赖树,根据任务标识判断所述任务依赖树中是否存在回环路径
在图8所示的依赖关系中,如果添加同步任务B依赖异步任务D,异步任务D依赖同步任务C的依赖关系,则可以判断任务依赖树中存在回环路径。
步骤6,运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面
CPU可以根据任务属性确定的待初始化任务是同步任务或者异步任务分别调用对应的线程进行运行,同步任务调用主线程运行,异步任务调用线程池中的其它线程运行。在同步任务C、异步任务H和异步任务F运行结束后开始首帧绘制以展示所述目标应用程序的首帧页面。
基于上述应用程序的启动方法,对应的应用程序启动系统可以包括任务定义层和任务运行管理层。任务定义层用于配置待初始化任务的任务属性和为各待初始化任务提供的启动功能和运行功能。其中,任务属性可以包括任务状态、任务标识、同步处理或异步处理开关、任务依赖关系、任务优先级等。此外,任务定义层还可以提供内容接口,方便用户可以根据具体应用程序自行增减待初始化任务。任务运行管理层可以提供调试入口、预设任务集添加入口、调度入口以及信息记录模块。其中,调试入口用于随时查看每个待初始化任务的运行信息,每条任务链的运行信息以及依赖树的运行信息,以使用户可以根据运行信息进行调试等操作;预设任务集添加入口用于添加预设任务集以确定目标任务;调度入口,用于对任务依赖树运行过程中的任务调度进行配置;信息记录模块用于记录任务依赖树中所有待初始化任务在运行时所产生的运行信息。
需要注意的是,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
此外,在本公开的示例性实施方式中,还提供了一种应用程序启动装置。参照图9所示,所述应用程序启动装置900包括:数据获取模块910,依赖树构建模块920,任务确定模块930和任务运行模块940。
其中,所述数据获取模块910可以用于获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
所述依赖树构建模块920可以用于根据所述待初始化任务和所述任务属性构建任务依赖树;
所述任务确定模块930可以用于在所述任务依赖树中确定至少一个等待任务;
所述任务运行模块940可以用于运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
在本公开的一种示例性实施例中,基于前述方案,所述任务运行模块940可以用于在还存在其它所述待初始化任务时,继续运行所述任务依赖树。
在本公开的一种示例性实施例中,基于前述方案,所述依赖树构建模块920可以用于根据所述任务依赖关系将所述待初始化任务分为至少一个组,并将每组对应的所述待初始化任务连接形成依赖任务链;以空节点为根节点,以所述依赖任务链的链头为所述根节点的子节点构建任务依赖树。
在本公开的一种示例性实施例中,基于前述方案,所述应用程序启动装置900,参照图10所示,还包括依赖树检查模块950,可以用于根据所述任务标识对所述任务依赖树的合法性进行检查。
在本公开的一种示例性实施例中,基于前述方案,所述依赖树检查模块950可以用于深度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在回环路径;在所述任务依赖树中存在回环路径时,生成并展示对应的提示信息。
在本公开的一种示例性实施例中,基于前述方案,所述依赖树检查模块950可以用于广度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在相同任务;在所述任务依赖树中存在相同任务时,生成并展示对应的提示信息。
在本公开的一种示例性实施例中,基于前述方案,所述任务确定模块930可以用于响应于接收到预设任务集,根据所述预设任务集在所述任务依赖树中确定至少一个目标任务。
在本公开的一种示例性实施例中,基于前述方案,所述任务确定模块930可以用于判断所述预设任务集中各预设任务是否被所述任务依赖树包含;在所述任务依赖树包含所述预设任务时,提升所述预设任务对应目标任务的任务优先级;在所述任务依赖树不包含所述预设任务时,将所述预设任务从所述预设任务集中剔除。
在本公开的一种示例性实施例中,基于前述方案,所述应用程序启动装置900,参照图11所示,还包括信息记录模块960,可以用于在运行所述任务依赖树时,记录所述任务依赖树运行时的运行信息。
由于本公开的示例实施例的应用程序启动装置的各个功能模块与上述应用程序启动方法的示例实施例的步骤对应,因此对于本公开装置实施例中未披露的细节,请参照本公开上述的应用程序启动方法的实施例。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述应用程序启动方法的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“系统”。
下面参照图12来描述根据本公开的这种实施例的电子设备1200。图12显示的电子设备1200仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图12所示,电子设备1200以通用计算设备的形式表现。电子设备1200的组件可以包括但不限于:上述至少一个处理单元1210、上述至少一个存储单元1220、连接不同系统组件(包括存储单元1220和处理单元1210)的总线1230、显示单元1240。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1210执行,使得所述处理单元1210执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施例的步骤。例如,所述处理单元1210可以执行如图3中所示的步骤S310:获取目标应用程序启动时所需的初始化任务和对应的初始化任务数据;S320:根据所述初始化任务和所述初始化任务数据构建任务依赖树;S330:根据预设等待数据结构在所述任务依赖树中确定至少一个等待任务;S340:根据所述任务运行数据运行所述任务依赖树,并在所述等待任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
又如,所述的电子设备可以实现如图4至图5所示的各个步骤。
存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1221和/或高速缓存存储单元1222,还可以进一步包括只读存储单元(ROM)1223。
存储单元1220还可以包括具有一组(至少一个)程序模块1225的程序/实用工具1224,这样的程序模块1225包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1200也可以与一个或多个外部设备1270(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1200交互的设备通信,和/或与使得该电子设备1200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1250进行。并且,电子设备1200还可以通过网络适配器1260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1260通过总线1230与电子设备1200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施例的步骤。
参照图13,描述了根据本公开的实施例的用于实现上述方法的程序产品1300,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。

Claims (12)

1.一种应用程序启动方法,其特征在于,包括:
获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
根据所述待初始化任务和所述任务属性构建任务依赖树;
在所述任务依赖树中确定至少一个目标任务;
运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
2.根据权利要求1所述的方法,其特征在于,在所述目标任务运行结束之后,所述方法还包括:
若还存在其它所述待初始化任务,则继续运行所述任务依赖树。
3.根据权利要求1所述的方法,其特征在于,所述任务属性还包括任务依赖关系;
所述根据所述待初始化任务和所述任务属性构建任务依赖树,包括:
根据所述任务依赖关系将所述待初始化任务分为至少一个组,并将每组对应的所述待初始化任务连接形成依赖任务链;
以空节点为根节点,以所述依赖任务链的链头为所述根节点的子节点构建任务依赖树。
4.根据权利要求1所述的方法,其特征在于,所述任务属性还包括任务标识;
在运行所述任务依赖树之前,所述方法还包括:
根据所述任务标识对所述任务依赖树的合法性进行检查。
5.根据权利要求4所述的方法,其特征在于,所述根据所述任务标识对所述任务依赖树的合法性进行检查,包括:
深度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在回环路径;
在所述任务依赖树中存在回环路径时,生成并展示对应的提示信息。
6.根据权利要求4所述的方法,其特征在于,所述根据所述任务标识对所述任务依赖树的合法性进行检查,包括:
广度遍历所述任务依赖树,根据所述任务标识判断所述任务依赖树中是否存在相同任务;
在所述任务依赖树中存在相同任务时,生成并展示对应的提示信息。
7.根据权利要求1所述的方法,其特征在于,在所述任务依赖树中确定至少一个目标任务,包括:
响应于接收到预设任务集,根据所述预设任务集在所述任务依赖树中确定至少一个目标任务。
8.根据权利要求7所述的方法,其特征在于,所述任务属性还包括任务优先级,所述方法还包括:
判断所述预设任务集中各预设任务是否被所述任务依赖树包含;
在所述任务依赖树包含所述预设任务时,提升所述预设任务对应目标任务的任务优先级;
在所述任务依赖树不包含所述预设任务时,将所述预设任务从所述预设任务集中剔除。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在运行所述任务依赖树时,记录所述任务依赖树运行时的运行信息。
10.一种应用程序启动装置,其特征在于,包括:
数据获取模块,用于获取目标应用程序启动时所需的待初始化任务和所述待初始化任务对应的任务属性;
依赖树构建模块,用于根据所述待初始化任务和所述任务属性构建任务依赖树;
任务确定模块,用于在所述任务依赖树中确定至少一个目标任务;
任务运行模块,用于运行所述任务依赖树,并在所述目标任务运行结束后开始首帧绘制,以展示所述目标应用程序的首帧页面。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至9中任一项所述的应用程序启动方法。
12.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至9中任一项所述的应用程序启动方法。
CN201910699630.5A 2019-07-31 2019-07-31 应用程序启动方法及装置、存储介质及电子设备 Active CN110442396B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910699630.5A CN110442396B (zh) 2019-07-31 2019-07-31 应用程序启动方法及装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910699630.5A CN110442396B (zh) 2019-07-31 2019-07-31 应用程序启动方法及装置、存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN110442396A true CN110442396A (zh) 2019-11-12
CN110442396B CN110442396B (zh) 2022-12-16

Family

ID=68432351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910699630.5A Active CN110442396B (zh) 2019-07-31 2019-07-31 应用程序启动方法及装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN110442396B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110865846A (zh) * 2019-11-14 2020-03-06 北京无限光场科技有限公司 应用管理的方法、装置、终端、系统及存储介质
CN111190590A (zh) * 2020-01-07 2020-05-22 广州虎牙科技有限公司 卡顿优化方法、装置、终端和计算机可读存储介质
CN111258740A (zh) * 2020-02-03 2020-06-09 北京无限光场科技有限公司 一种用于启动应用程序的方法、装置和电子设备
CN112199125A (zh) * 2020-09-18 2021-01-08 上海硬通网络科技有限公司 应用的启动方法、装置及电子设备
CN112685149A (zh) * 2020-12-18 2021-04-20 宝能(广州)汽车研究院有限公司 安卓应用的启动方法、存储介质、电子设备
CN112783568A (zh) * 2021-01-12 2021-05-11 网易(杭州)网络有限公司 应用程序的初始化方法、装置、设备和存储介质
CN112925587A (zh) * 2021-03-11 2021-06-08 北京百度网讯科技有限公司 用于初始化应用的方法和装置
CN113052707A (zh) * 2021-04-30 2021-06-29 中国工商银行股份有限公司 一种应用投产方法、装置、计算机设备和存储介质
CN113326082A (zh) * 2021-07-30 2021-08-31 北京达佳互联信息技术有限公司 一种应用程序的启动方法、电子设备及存储介质
CN114647464A (zh) * 2022-05-19 2022-06-21 恒生电子股份有限公司 应用的并行启动处理方法、装置及电子设备
CN114968395A (zh) * 2022-05-10 2022-08-30 上海淇玥信息技术有限公司 一种基于Spring框架的启动优化方法、装置和计算机设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101652747A (zh) * 2007-03-29 2010-02-17 微软公司 并行dll树初始化
CN106156080A (zh) * 2015-03-31 2016-11-23 阿里巴巴集团控股有限公司 动态页面转换的方法和装置
JP2017027403A (ja) * 2015-07-23 2017-02-02 日本電気株式会社 グラフィカルユーザインタフェース装置、方法およびプログラム
CN107015820A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 应用启动方法、装置及服务器
CN109639687A (zh) * 2016-09-14 2019-04-16 甲骨文国际公司 用于提供基于云的身份和访问管理的系统、方法和介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101652747A (zh) * 2007-03-29 2010-02-17 微软公司 并行dll树初始化
CN106156080A (zh) * 2015-03-31 2016-11-23 阿里巴巴集团控股有限公司 动态页面转换的方法和装置
JP2017027403A (ja) * 2015-07-23 2017-02-02 日本電気株式会社 グラフィカルユーザインタフェース装置、方法およびプログラム
CN107015820A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 应用启动方法、装置及服务器
CN109639687A (zh) * 2016-09-14 2019-04-16 甲骨文国际公司 用于提供基于云的身份和访问管理的系统、方法和介质

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110865846B (zh) * 2019-11-14 2023-12-12 北京有竹居网络技术有限公司 应用管理的方法、装置、终端、系统及存储介质
CN110865846A (zh) * 2019-11-14 2020-03-06 北京无限光场科技有限公司 应用管理的方法、装置、终端、系统及存储介质
CN111190590A (zh) * 2020-01-07 2020-05-22 广州虎牙科技有限公司 卡顿优化方法、装置、终端和计算机可读存储介质
CN111190590B (zh) * 2020-01-07 2024-03-15 广州虎牙科技有限公司 卡顿优化方法、装置、终端和计算机可读存储介质
CN111258740A (zh) * 2020-02-03 2020-06-09 北京无限光场科技有限公司 一种用于启动应用程序的方法、装置和电子设备
CN112199125A (zh) * 2020-09-18 2021-01-08 上海硬通网络科技有限公司 应用的启动方法、装置及电子设备
CN112685149A (zh) * 2020-12-18 2021-04-20 宝能(广州)汽车研究院有限公司 安卓应用的启动方法、存储介质、电子设备
CN112783568A (zh) * 2021-01-12 2021-05-11 网易(杭州)网络有限公司 应用程序的初始化方法、装置、设备和存储介质
CN112783568B (zh) * 2021-01-12 2022-12-06 网易(杭州)网络有限公司 应用程序的初始化方法、装置、设备和存储介质
CN112925587A (zh) * 2021-03-11 2021-06-08 北京百度网讯科技有限公司 用于初始化应用的方法和装置
CN112925587B (zh) * 2021-03-11 2024-08-20 北京百度网讯科技有限公司 用于初始化应用的方法和装置
CN113052707A (zh) * 2021-04-30 2021-06-29 中国工商银行股份有限公司 一种应用投产方法、装置、计算机设备和存储介质
CN113326082A (zh) * 2021-07-30 2021-08-31 北京达佳互联信息技术有限公司 一种应用程序的启动方法、电子设备及存储介质
CN114968395B (zh) * 2022-05-10 2023-09-26 上海淇玥信息技术有限公司 一种基于Spring框架的启动优化方法、装置和计算机设备
CN114968395A (zh) * 2022-05-10 2022-08-30 上海淇玥信息技术有限公司 一种基于Spring框架的启动优化方法、装置和计算机设备
CN114647464A (zh) * 2022-05-19 2022-06-21 恒生电子股份有限公司 应用的并行启动处理方法、装置及电子设备

Also Published As

Publication number Publication date
CN110442396B (zh) 2022-12-16

Similar Documents

Publication Publication Date Title
CN110442396A (zh) 应用程序启动方法及装置、存储介质及电子设备
US10452251B2 (en) Transactional conversation-based computing system
US12019621B2 (en) Bot extensibility infrastructure
JP2024088640A (ja) ボットシステムの性能に関する見解
CN109033223A (zh) 用于跨类型对话的方法、装置、设备以及计算机可读存储介质
US11468881B2 (en) Method and system for semantic intelligent task learning and adaptive execution
CN109002510A (zh) 一种对话处理方法、装置、设备和介质
CN109523187A (zh) 任务调度方法、装置和设备
US20150242304A1 (en) Collaborative computer aided test plan generation
JP2023520425A (ja) 制約に基づくハイパーパラメータチューニングのための方法およびシステム
CA2998465C (en) Application provisioning system for requesting configuration updates for application objects across data centers
CN109034396A (zh) 用于处理分布式集群中的深度学习作业的方法和装置
CN106537426A (zh) 自动生成用于工作流程的执行序列
US20150161536A1 (en) Scientific workflow execution engine
US11651162B2 (en) Composite entity for rule driven acquisition of input data to chatbots
US11322141B2 (en) Information processing device and information processing method
CN108134690B (zh) 网络业务部署流程控制方法、装置及系统
CN109829164A (zh) 用于生成文本的方法和装置
US20230098783A1 (en) Framework for focused training of language models and techniques for end-to-end hypertuning of the framework
CN110232091A (zh) 用于同步数据的方法、系统和装置
CN114594934A (zh) 一种可视化页面生成方法、装置、设备及介质
KR102255334B1 (ko) 전자 장치에서 네트워크 온 칩을 생성하는 장치 및 방법
CN115115062B (zh) 机器学习模型建立方法、相关装置及计算机程序产品
US12112560B2 (en) Usage based resource utilization of training pool for chatbots
KR20240101703A (ko) 사전-트레이닝된 언어 모델들에 대한 긴 텍스트를 핸들링하기 위한 시스템 및 기술들

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