(12)发明专利申请
(10)申请公布号 CN 110908724 A(43)申请公布日 2020.03.24
(21)申请号 201911222343.1(22)申请日 2019.12.03
(71)申请人 深圳市迅雷网络技术有限公司
地址 518052 广东省深圳市南山区粤海街
道高新区社区科技南路18号深圳湾科技生态园12栋B座21层至23层(72)发明人 周刚
(74)专利代理机构 深圳市深佳知识产权代理事
务所(普通合伙) 44285
代理人 王兆林(51)Int.Cl.
G06F 9/4401(2018.01)G06F 9/445(2018.01)
权利要求书2页 说明书11页 附图2页
(54)发明名称
一种Android App启动方法及相关组件(57)摘要
本申请公开了一种Android App启动方法,区别于现有方案,本申请通过将App启动业务与初始化业务划分为若干阶段,在运行各启动阶段的onCreate函数中,启动对应的初始化阶段,即在不同的阶段,触发不同的初始化,启动业务与初始化进程同时执行,减少了App启动时用户等待的时间,而该种启动方式下界面的绘制和业务初始化逻辑,启动任务与初始化任务分阶段并行执行,避免了单线程顺序执行容易导致的启动时长漫长、启动速度慢等问题,提升了启动速度,缩短了启动时间,提升了用户体验。本申请还同时公开了一种Android App启动装置、一种智能终端及可读存储介质,具有上述有益效果。
CN 110908724 ACN 110908724 A
权 利 要 求 书
1/2页
1.一种Android App启动方法,其特征在于,包括:将App启动业务划分为若干启动阶段;
将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段;
在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,以便在运行各启动阶段的同时执行对应的初始化进程。
2.根据权利要求1所述的Android App启动方法,其特征在于,所述将App启动划分为若干启动阶段,包括:
将App启动根据业务操作顺序划分为Application启动阶段、闪屏页出现阶段以及主界面出现阶段;
则相应地,将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,具体为:将所述初始化业务划分为Application启动初始化阶段、闪屏页出现初始化阶段以及主界面出现初始化阶段。
3.根据权利要求2所述的Android App启动方法,其特征在于,所述在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,包括:
在运行所述Application启动阶段的onCreate函数中,启动所述Application启动初始化阶段;
在运行所述闪屏页出现阶段的onCreate函数中,启动所述闪屏页出现初始化阶段;在运行所述主界面出现初始化阶段的onCreate函数中,在MainTabActivity的onWindowFocusChanged获得焦点后延迟预设时间;
达到所述预设延迟时间后,启动所述主界面出现初始化阶段。4.根据权利要求1所述的Android App启动方法,其特征在于,所述将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,包括:
将所述启动初始化业务中存在执行时序性要求的初始化业务根据业务执行先后要求划分至各所述启动阶段对应的初始化阶段;
将所述启动初始化业务中不存在执行时序性要求的初始化业务根据业务执行重要性要求划分至各所述启动阶段对应的初始化阶段。
5.根据权利要求1所述的Android App启动方法,其特征在于,在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,包括:
在运行各所述启动阶段的onCreate函数中,确定对应的初始化任务中各子任务的执行顺序逻辑;
根据所述执行顺序逻辑将所述子任务分配至至少两个子进程异步执行。6.根据权利要求1所述的Android App启动方法,其特征在于,还包括:当所述初始化阶段中各初始化任务均完成时,将设置的初始化状态标记由未完成状态调整为完成状态;
当检测到所述初始化状态标记变化时,启动后续启动阶段以及初始化阶段。7.根据权利要求1至6任一项所述的Android App启动方法,其特征在于,当所述App启动业务中包括闪屏广告业务时,所述将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,包括:
2
CN 110908724 A
权 利 要 求 书
2/2页
将所述启动初始化业务中耗时符合预设高耗时标准的业务划分至闪屏广告出现所属的启动阶段对应的初始化阶段;
则相应地,所述在运行各所述启动阶段的onCreate函数中,启动对应的初始化阶段,包括:
在闪屏广告显示后,执行耗时符合所述高耗时标准的初始化业务。8.一种Android App启动装置,其特征在于,包括:第一划分单元,用于将App启动业务划分为若干启动阶段;第二划分单元,用于将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段;
启动单元,用于在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,以便在运行各启动阶段的同时执行对应的初始化进程。
9.一种智能终端,其特征在于,包括:存储器、处理器以及总线;其中,所述存储器用于存储程序;
所述处理器用于执行所述程序时实现如权利要求1至7任一项所述Android App启动方法的步骤。
10.一种可读存储介质,其特征在于,所述可读存储介质上存储有程序,所述程序被处理器执行时实现如权利要求1至7任一项所述Android App启动方法的步骤。
3
CN 110908724 A
说 明 书
一种Android App启动方法及相关组件
1/11页
技术领域
[0001]本申请涉及电子技术领域,尤其涉及一种Android App启动方法、装置、一种智能终端及可读存储介质。
背景技术
[0002]App启动过程包含大量启动任务以及App初始化任务,当用户在终端启动App时,终端在运行Application的onCreate函数(安卓系统定义的组件被创建的系统回调函数,用来“表示一个窗口正在生成”)开启所有启动业务过程时,获取所有初始化任务在主进程串行穿插执行,比如App启动包含100个待执行逻辑,当前的App启动过程执行如下:逻辑1→执行初始化→逻辑2→执行初始化→逻辑3→执行初始化→……→逻辑n→执行初始化。[0003]而该种启动方式下界面的绘制和业务初始化逻辑,都在同一线程串行执行,容易出现启动时长漫长、启动速度慢、界面卡顿,启动时间长、用户体验感差等问题。[0004]因此,如何克服现有App启动服务在实现机制上存在的技术缺陷,是本领域技术人员亟待解决的问题。
发明内容
[0005]本申请的目的是提供一种Android App启动方法、装置、设备及计算机可读存储介质,旨在解决现有App启动服务在实现机制上存在的技术缺陷。[0006]为实现上述目的,本申请在第一方面提供了一种Android App启动方法,该方法包括:
[0007]将App启动业务划分为若干启动阶段;
[0008]将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段;
[0009]在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,以便在运行各启动阶段的同时执行对应的初始化进程。[0010]可选地,所述将App启动划分为若干启动阶段,包括:
[0011]将App启动根据业务操作顺序划分为Application启动阶段、闪屏页出现阶段以及主界面出现阶段;[0012]则相应地,将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,具体为:将所述初始化业务划分为Application启动初始化阶段、闪屏页出现初始化阶段以及主界面出现初始化阶段。[0013]可选地,在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,包括:
[0014]在运行所述Application启动阶段的onCreate函数中,启动所述Application启动初始化阶段;
[0015]在运行所述闪屏页出现阶段的onCreate函数中,启动所述闪屏页出现初始化阶
4
CN 110908724 A
说 明 书
2/11页
段;
在运行所述主界面出现初始化阶段的onCreate函数中,在MainTabActivity的
onWindowFocusChanged获得焦点后延迟预设时间;[0017]达到所述预设延迟时间后,启动所述主界面出现初始化阶段。[0018]可选地,所述将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,包括:
[0019]将所述启动初始化业务中存在执行时序性要求的初始化业务根据业务执行先后要求划分至各所述启动阶段对应的初始化阶段;
[0020]将所述启动初始化业务中不存在执行时序性要求的初始化业务根据业务执行重要性要求划分至各所述启动阶段对应的初始化阶段。[0021]可选地,在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,包括:
[0022]在运行各所述启动阶段的onCreate函数中,确定对应的初始化任务中各子任务的执行顺序逻辑;
[0023]根据所述执行顺序逻辑将所述子任务分配至至少两个子进程异步执行。[0024]可选地,所述Android App启动方法还包括:[0025]当所述初始化阶段中各初始化任务均完成时,将设置的初始化状态标记由未完成状态调整为完成状态;
[0026]当检测到所述初始化状态标记变化时,启动后续启动阶段以及初始化阶段。[0027]可选地,当所述App启动业务中包括:闪屏广告业务时,所述将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段,包括:
[0028]将所述启动初始化业务中耗时符合预设高耗时标准的业务划分至闪屏广告出现所属的启动阶段对应的初始化阶段;[0029]则相应地,所述在运行各所述启动阶段的onCreate函数中,启动对应的初始化阶段,包括:
[0030]在闪屏广告显示后,执行耗时符合所述高耗时标准的初始化业务。[0031]本申请还公开一种Android App启动装置,包括:[0032]第一划分单元,用于将App启动业务划分为若干启动阶段;[0033]第二划分单元,用于将初始化业务依据所述启动阶段的划分方式划分为各所述启动阶段对应的初始化阶段;[0034]启动单元,用于在运行各所述启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,以便在运行各启动阶段的同时执行对应的初始化进程。[0035]本申请还公开一种智能终端,包括:存储器、处理器以及总线;[0036]其中,所述存储器用于存储程序;
[0037]所述处理器用于执行所述程序时实现所述Android App启动方法的步骤。[0038]本申请还公开一种可读存储介质,所述可读存储介质上存储有程序,所述程序被处理器执行时实现所述Android App启动方法的步骤。[0039]根据本申请提供的技术方案可以明显看出,本申请提供的Android App启动方法,通过将App启动业务与初始化业务划分为若干阶段,在运行各启动阶段的onCreate函数中,
5
[0016]
CN 110908724 A
说 明 书
3/11页
启动对应的初始化阶段,即在不同的阶段,触发不同的初始化,启动业务与初始化进程同时执行,减少了App启动时用户等待的时间,而该种启动方式下界面的绘制和业务初始化逻辑,启动任务与初始化任务分阶段并行执行,避免了单线程顺序执行容易导致的启动时长漫长、启动速度慢等问题,提升了启动速度,缩短了启动时间,提升了用户体验。[0040]本申请同时还对应的提供了一种与方法对应的装置、智能终端及可读存储介质,具有上述有益效果,在此不再赘述。附图说明
[0041]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0042]图1为本申请实施例提供的一种Android App启动方法的流程图;[0043]图2为本申请实施例提供的一种整体启动流程示意图;[0044]图3为本申请实施例提供的一种Android App启动装置的结构示意图;[0045]图4为本申请实施例提供的一种智能终端的结构示意图。
具体实施方式
[0046]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0047]本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。[0048]需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。[0049]实施例一[0050]请参见图1,图1为本申请实施例提供的一种Android App启动方法的流程图,其主要包括以下步骤:[0051]S110:将App启动业务划分为若干启动阶段。
6
CN 110908724 A[0052]
说 明 书
4/11页
本步骤旨在将App启动的执行逻辑划分为若干个阶段,以便后续在不同的App启动
阶段触发不同的初始化。比如App启动任务包括100个待执行逻辑,将各执行逻辑划分为n(n小于100)个阶段,每个阶段包含若干个待执行逻辑,在App启动时,按照这n个阶段而非执行逻辑进行任务触发。[0053]启动阶段划分方式本实施例中不做限定,可以根据实际的使用需要进行划分,比如可以根据执行逻辑的复杂性以及资源占用情况进行划分,还可以基于执行逻辑的对于前端启动业务的所起的作用根据业务操作顺序进行划分,还可以根据执行逻辑的执行时序性要求进行划分等。[0054]S120:将初始化业务依据启动阶段的划分方式划分为各启动阶段对应的初始化阶段。
[0055]本步骤中进行初始化阶段的划分的目的在于将初始化业务划分为各前端启动阶段对应的阶段,则便于在触发前端启动阶段的同时触发对应的初始化,实现App启动的分阶段并行执行,提升启动速度。
[0056]对于初始化任务的初始化阶段的划分方式与启动阶段的划分方式对应,“对应”指阶段数量对应,当前端业务与初始化业务存在业务联系时,“对应”中还包括业务对应。[0057]某些初始化业务需对应各启动阶段执行,即启动任务执行完后才能执行对应的初始化业务,也存在可根据需要任意调整执行顺序的初始化任务,上述步骤中对于具体的启动阶段划分方式本实施例中不做限定,则本步骤中对初始化阶段对应的划分方式也不做限定。
[0058]为加深对不同划分方式下所形成的启动阶段以及初始化阶段的理解,本实施例中以以下两种划分方式为例进行介绍,其它划分方式下均可参照下述介绍:[0059]1、将App启动的执行逻辑根据业务操作顺序进行划分。[0060]一般来说可以将App启动大体划分为Application启动、闪屏页出现以及主界面出现三个阶段(当在主界面出现之前存在闪屏广告时则包括Application启动、闪屏页出现、闪屏广告显示以及主界面出现四个阶段,是否存在闪屏广告本实施例不做限定,主要以不存在闪屏广告为例进行介绍),该种划分方式下,将App启动划分为若干启动阶段具体为:划分为Application启动阶段、闪屏页出现阶段以及主界面出现阶段。初始化业务具体可以划分为:将初始化业务划分为Application启动初始化阶段、闪屏页出现初始化阶段以及主界面出现初始化阶段。该种划分方式下的整体启动流程示意图如图2所示。[0061]以前端业务操作顺序进行划分的方式较贴合用户操作思维,便于后续的任务调整以及维护。[0062]2、将App启动的执行逻辑根据逻辑执行时序性要求进行划分。
[0063]执行时序性要求指执行逻辑间存在的必须或非必须前后执行要求,比如App启动业务包括三个执行逻辑:逻辑1、逻辑2以及逻辑3,而逻辑2必须在逻辑1执行完之后才能执行,而逻辑3执行所需的必要条件中不包含其它执行逻辑的产物,因此逻辑3不存在执行时序性要求,可以任意调换执行顺序。
[0064]存在执行时序性要求的初始化业务需要根据前后性要求严格执行,而不存在执行时序性要求的初始化业务则可以进行动态调整以满足不同的用户需求,实现对应的优势。比如当出于任务均衡性从而提升执行效率的需求需要尽量平衡各阶段所占用的时间时,在
7
CN 110908724 A
说 明 书
5/11页
将存在时序性要求的业务固定执行顺序后,则可以进一步根据当前确定执行顺序的执行逻辑的执行时间以及未确定执行顺序的执行逻辑的执行时间进行任务均衡分配等。[0065]具体地,将App启动的执行逻辑根据逻辑执行时序性要求进行划分可以包括以下两个步骤:
[0066]将启动初始化业务中存在执行时序性要求的初始化业务根据业务执行先后要求划分至各启动阶段对应的初始化阶段;
[0067]将启动初始化业务中不存在执行时序性要求的初始化业务根据业务执行重要性要求划分至各启动阶段对应的初始化阶段。
[0068]该种阶段划分方式可以在保证启动的正常运行的同时实现用户各种自定义需求,提升用户体验。[0069]另外,多种划分方式可以融合使用,也可以单独使用。以上述两种划分方式为例,采用融合划分方式时,可以同时依据业务操作顺序进行划分以及执行时序性要求进行App启动业务的划分。例如,首先确定Application启动,闪屏页出现,主界面出现三个阶段对应的存在时序性要求的执行逻辑,并根据执行先后性要求确定执行分属的阶段以及执行顺序,再确定用户自定义需求(比如启动速度最快、启动最稳定等),并根据各需求下对于各阶段Application启动,闪屏页出现,主界面出现三个阶段任务的要求(比如逻辑1必须在主界面出现阶段、三个阶段任务执行时间相同)确定各不存在时序性要求的执行逻辑所属的任务阶段以及与预先确定的各执行逻辑间的执行顺序。多种划分方式融合使用可以融合多种划分方式下的优势,本实施例仅以上述融合划分方式为例进行介绍,其它融合划分方式均可参照上述介绍,在此不再赘述。[0070]S130:在运行各启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务。
[0071]本步骤旨在运行各启动阶段的同时执行对应的初始化进程,启动阶段与初始化阶段采用线程池多线程并行执行,而非单线程顺序执行,大大缩短了启动时间,提升了用户体验。
[0072]需要说明的是,本实施例中对于初始化阶段任务与主线程(启动阶段执行)并行执行的逻辑不做限定,可以同步执行,也可以异步执行。[0073]优选地,可以按照以下步骤异步执行:[0074]1)、在运行各启动阶段的onCreate函数中,确定对应的初始化任务中各子任务的执行顺序逻辑;[0075]其中,执行顺序逻辑可以根据各子任务的执行时序性以及重要性进行设置,在此不做限定。[0076]2)、根据执行顺序逻辑将子任务分配至至少两个子进程异步执行。[0077]业务逻辑使用线程池池异步并行执行,跟主线程隔离,不影响主线程界面的绘制和跳转流程,保证了两过程分阶段并行执行的稳定性。本实施例中仅以上述异步执行方案为例进行介绍,其它执行逻辑均可参照上述介绍,在此不再赘述。[0078]根据本实施例提供的Android App启动方法可以明显看出,区别于现有启动方案,本申请通过将App启动业务与初始化业务划分为若干阶段,在运行各启动阶段的onCreate函数中,启动对应的初始化阶段,即在不同的阶段,触发不同的初始化,启动业务与初始化
8
CN 110908724 A
说 明 书
6/11页
进程同时执行,减少了App启动时用户等待的时间,而该种启动方式下界面的绘制和业务初始化逻辑,启动任务与初始化任务分阶段并行执行,避免了单线程顺序执行容易导致的启动时长漫长、启动速度慢等问题,提升了启动速度,缩短了启动时间,提升了用户体验。[0079]实施例二
[0080]区别于实施例一,本实例主要从针对提升App启动于初始化业务根据业务操作顺序进行划分的角度出发,在实施例一的基础上,对具体的初始化阶段启动方式进行了进一步的限定。
[0081]当将App启动划分为Application启动阶段、闪屏页出现阶段以及主界面出现阶段,相应地,将初始化业务划分为Application启动初始化阶段、闪屏页出现初始化阶段以及主界面出现初始化阶段时,在运行各启动阶段的onCreate函数中,启动对应的初始化阶段,包括:[0082]1)、在运行Application启动阶段的onCreate函数中,启动Application启动初始化阶段;[0083]2)、在运行闪屏页出现阶段的onCreate函数中,启动闪屏页出现初始化阶段;[0084]3)、在运行主界面出现初始化阶段的onCreate函数中,在MainTabActivity(安卓主界面的一种常规命名,这里仅仅是示例,代表主界面,不限于此命名)的onWindowFocusChanged(安卓系统当窗口获得或失去焦点时,会被操作系统自动回调的函数)获得焦点后延迟预设时间;[0085]4)、达到预设延迟时间后,启动主界面出现初始化阶段。[0086]由于主界面一般很复杂绘制很花时间,在创建的同时就启动初始化会抢占CPU资源影响主界面绘制,并且主界面出现后用户一般会滑动屏幕或者点击按钮,此时为了防止CPU繁忙导致用户响应卡顿,因此根据实际情况预估了一个时间间隔,在MainTabActivity的onWindowFocusChanged获得焦点后延迟预设时间(一些不重要的配置的拉取等,可以放这里),之后再启动初始化,保证了主界面绘制的稳定性。[0087]当然,为简化执行步骤也可以不延迟直接启动对应的初始化,本实施例中不做限定。
[0088]实施例三:
[0089]区别于实施例一与实施例二,本实例主要从存在闪屏广告的角度出发,在实施例一的基础上,对启动初始化业务依据初始化业务执行顺序以及启动阶段的划分方式划分为各启动阶段对应的初始化阶段的步骤进行了进一步的限定。
[0090]目前大部分App启动时出于广告利益等需要均设置有闪屏广告,而闪屏广告一般没有对应的初始化任务,但对于启动阶段存在一定的时间占用,一般为3s或5s甚至更长,在这个阶段中CPU基本很空闲,为提升CPU处理效率,同时提升启动速度,可以充分利用启动时的闪屏广告倒计时做大量的耗时逻辑。[0091]具体地,将启动初始化业务依据初始化业务执行顺序以及启动阶段的划分方式划分为各启动阶段对应的初始化阶段,包括:
[0092]将启动初始化业务中耗时符合预设高耗时标准的业务划分至闪屏广告出现所属的启动阶段对应的初始化阶段;[0093]则相应地,在运行各启动阶段的onCreate函数中,启动对应的初始化阶段,包括:
9
CN 110908724 A[0094]
说 明 书
7/11页
在闪屏广告显示后,执行耗时符合高耗时标准的初始化业务。
[0095]当有闪屏广告时,将耗时的操作隐藏到闪屏广告展示后的倒计时背后进行初始化,若无闪屏广告则这部分操作合并到闪屏页这个阶段执行,会动态调整,是一个动态的过程,充分利用启动时的闪屏广告倒计时以提升启动速度。[0096]实施例四
[0097]区别于实施例一至实施例三,本实例主要从后续启动阶段的触发方式的角度出发,在实施例一的基础上,对各阶段的启动以及结束步骤进行了进一步的限定,包括如下步骤:
[0098]当初始化阶段中各初始化任务均完成时,将设置的初始化状态标记由未完成状态调整为完成状态;
[0099]当检测到初始化状态标记变化时,启动后续启动阶段以及初始化阶段。[0100]经过上述进行一阶段结束状态调整以及一阶段启动方式限定,可以减少各阶段启动时对于前一阶段的监视资源占用,提升资源利用率。[0101]实施例五:
[0102]为加深对上述实施例中介绍的Android App启动方法的理解,本实施例中以一种具体实现方式为例进行介绍。在本实施例介绍的Android App启动中将App启动业务与初始化业务均划分为Application启动阶段、闪屏页出现阶段、闪屏广告显示阶段以及主界面出现阶段。
[0103]每个初始化阶段对应一个初始化工厂,由初始化工厂控制执行,每个具体的初始化业务对应一个初始化器(实现时继承Runnable(JAVA程序设计语言定义的一个接口,当程序需要被多线程执行时需要实现这个接口)),初始化工厂内有一个List,保存当前阶段所有的初始化器,启动时使用线程池并发的执行这些Runnable。每个工厂只负责启动对应的初始化器,若要判断是否已经完成初始化,则在对应的初始化器里有状态标志是否已经完成初始化,若未完成可以设置监听,在初始化完成后会回调完成的监听。具体实现方式如下:
[0104]1)、在运行Application启动阶段的onCreate函数里,启动InitialInApplicationFactory(指在Application启动时使用的初始化工厂名称,仅仅是示例,方便理解,不限于此名称),此工厂使用线程池批量执行需要在Application启动就执行的启动器。
[0105]此工厂可以只放核心基础组件的初始化,App在后台被唤醒时可以只执行此初始化。
[0106]2)、在运行LaunchActivity(闪屏界面名称,仅仅是示例,方便理解,不限于于此名称)的onCreate函数里,启动InitialInLaunchFactory(指在闪屏页启动时使用的初始化工厂名称,仅仅是示例,方便理解,不限于于此名称),使用线程池批量执行需要在闪屏页出现时就执行的初始化,有些需要在闪屏显示就执行的初始化可以添加至该工厂中。[0107]3)、在闪屏广告显示后,执行InitialAfterADShowFactory(指在闪屏广告启动时使用的初始化工厂名称,仅做示例,方便理解,不限于此名称)。[0108]闪屏广告一般有3秒或5秒倒计时,此时CPU很空闲,在此时间里可以做大量的耗时操作,充分利用这个倒计时时间(即使用户点击取消广告,也至少有1到2秒的操作间隔,足
10
CN 110908724 A
说 明 书
8/11页
以完成很多耗时的操作)。
[0109]由于可能会出现少部分设备没有拉取到闪屏广告的情况,此时可以将执行InitialAfterADShowFactory的过程合并到InitialInLaunchFactory(指在闪屏页启动时使用的初始化工厂名称,仅仅是示例,方便理解,不限于于此名称)里面执行。[0110]4)、在进入主界面后,在运行MainTabActivity(安卓主界面的一种常规命名,这里仅仅是示例,代表主界面,不限于此命名)的onWindowFocusChanged函数(安卓系统当窗口获得或失去焦点时,会被操作系统自动回调的函数)获得焦点后延迟2秒,启动InitialAfterMainTabFactory(主界面启动后启动的初始化工厂,仅做示例,方便理解,不限于此名称)。
[0111]可以启动那些最不重要的可以在主界面显示后再执行的初始化,延迟2s是因为主界面一般很复杂绘制很花时间,在创建的同时就启动初始化会抢占CPU资源影响主界面绘制,并且主界面出现后用户一般会滑动屏幕或者点击按钮,此时为了防止CPU繁忙导致用户响应卡顿,也可以根据实际情况进行时间间隔的设定,在此不做限定。[0112]本实施例介绍的启动方式采用线程池异步并行执行,不影响UI线程,UI线程的绘制和跳转以最快的速度执行,且在闪屏广告后执行了大量耗时操作,大大减少了App启动时用户等待的时间,同时由于采用了分阶段初始化,有4个阶段,初始化器可以随时在这4个阶段里面进行调整,放前或者放后,做到了高内聚低耦合,便于维护扩展。[0113]因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。[0114]实施例六:
[0115]在上文中已经通过一些实施例对Android App启动过程的原理实现、优势以及具体实现方式等进行了详细的描述,本申请还提供一种与该方法对应的实体硬件装置300,此部分内容原理与方案部分相对应,实现原理的部分此处不再赘述,以下将对该实体硬件装置的硬件组成进行描述,请参见图3,图3为本申请实施例提供的一种Android App启动装置的结构示意图,该装置中主要包括:第一划分单元310、第二划分单元320以及启动单元330。[0116]其中,第一划分单元310主要用于将App启动业务划分为若干启动阶段;
[0117]第二划分单元320主要用于将初始化业务依据启动阶段的划分方式划分为各启动阶段对应的初始化阶段;[0118]启动单元330主要用于在运行各启动阶段的onCreate函数中,启动其它线程并行执行对应的初始化阶段任务,以便在运行各启动阶段的同时执行对应的初始化进程。[0119]可选地,第一划分单元310具体可以为第一业务划分单元,用于:将App启动根据业务操作顺序划分为Application启动阶段、闪屏页出现阶段以及主界面出现阶段;[0120]则相应地,与第一业务划分单元310连接的第二划分单元320具体可以为:第二业务划分单元,用于将初始化业务划分为Application启动初始化阶段、闪屏页出现初始化阶段以及主界面出现初始化阶段。[0121]可选地,启动单元具体可以包括:[0122]第一启动子单元,用于在运行Application启动阶段的onCreate函数中,启动Application启动初始化阶段;
11
CN 110908724 A[0123]
说 明 书
9/11页
第二启动子单元,用于在运行闪屏页出现阶段的onCreate函数中,启动闪屏页出
现初始化阶段;[0124]第三启动子单元,用于在运行主界面出现初始化阶段的onCreate函数中,在MainTabActivity的onWindowFocusChanged获得焦点后延迟预设时间;达到预设延迟时间后,启动主界面出现初始化阶段。[0125]可选地,第二划分单元具体可以包括:[0126]第一子单元,用于将启动初始化业务中存在执行时序性要求的初始化业务根据业务执行先后要求划分至各启动阶段对应的初始化阶段;[0127]第二子单元,用于将启动初始化业务中不存在执行时序性要求的初始化业务根据业务执行重要性要求划分至各启动阶段对应的初始化阶段。[0128]可选地,启动单元具体可以包括:[0129]确定子单元,用于在运行各启动阶段的onCreate函数中,确定对应的初始化任务中各子任务的执行顺序逻辑;[0130]异步执行子单元,用于根据执行顺序逻辑将子任务分配至至少两个子进程异步执行。
[0131]可选地,本实施例提供的Android App启动装置中可以进一步包括:结束控制子单元以及启动控制子单元;
[0132]结束控制子单元用于当初始化阶段中各初始化任务均完成时,将设置的初始化状态标记由未完成状态调整为完成状态;[0133]启动控制子单元用于当检测到初始化状态标记变化时,启动后续启动阶段以及初始化阶段。
[0134]可选地,当App启动业务中包括:闪屏广告业务时,第二划分单元中进一步包括广告划分子单元,广告划分子单元用于将启动初始化业务中耗时符合预设高耗时标准的业务划分至闪屏广告出现所属的启动阶段对应的初始化阶段;[0135]则相应地,与第二划分单元连接的启动单元进一步用于:在闪屏广告显示后,执行耗时符合高耗时标准的初始化业务。[0136]本实施例介绍的Android App启动装置将启动时间大大的减少,用户体验大大提升。
[0137]实施例七:
[0138]本申请还提供一种与该方法对应的智能终端,此部分内容原理与方案部分相对应,实现原理的部分此处不再赘述,以下将对该智能终端的硬件组成进行描述,请参见图4,图4为本申请实施例提供的一种智能终端的结构示意图,该设备中主要包括:[0139]该电子设备400包括存储器410、处理器420以及总线430,存储器410上存储有可在处理器420上运行的Android App启动程序,该程序通过总线430被传输至处理器420,并在被处理器420执行时可实现如上述实施例给出的Android App启动方法中的各步骤;[0140]其中,存储器410至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器410在一些实施例中可以是电子设备400的内部存储单元,例如该电子设备400的硬盘。存储器410在另一些实施例中也可以是该电子设备400的外部存储设备,例如该电子设备400上配
12
CN 110908724 A
说 明 书
10/11页
备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器410还可以同时由内部存储单元和外部存储设备同时组成。进一步的,存储器410不仅可以用于存储安装于该电子设备400中的各种应用软件和各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。[0141]处理器420在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器410中存储的程序代码或处理数据,例如Android App启动程序等。[0142]总线430可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条双向中空指示线表示,但并不表示仅有一根总线或一种类型的总线。[0143]在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0144]作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0145]另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0146]集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例中所给出的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0147]需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
[0148]以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发
13
CN 110908724 A
说 明 书
11/11页
明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
14
CN 110908724 A
说 明 书 附 图
1/2页
图1
图2
15
CN 110908724 A
说 明 书 附 图
2/2页
图3
图4
16
因篇幅问题不能全部显示,请点此查看更多更全内容