安卓应用的启动方法、存储介质、电子设备与流程

文档序号:24741921发布日期:2021-04-20 21:53阅读:95来源:国知局
安卓应用的启动方法、存储介质、电子设备与流程

1.本发明涉及安卓技术领域,尤其涉及一种安卓应用的启动方法、存储介质、电子设备。


背景技术:

2.随着安卓应用功能越来越复杂,实现的需求越来越多,使得代码量呈直线上升趋势,同时引入越来越多的第三方代码来实现对应的功能。在安卓应用启动时,需要对各第三方代码进行初始化,且根据安卓系统的启动流程规定,第一帧显示出来之前,会回调应用的创建函数。如果在创建函数中进行多个负载的第三方应用的初始化,但是又不得不经常初始化时,就会导致第一帧渲染的时间延长,启动时间变长,页面白屏,严重影响用户体验和流畅性。


技术实现要素:

3.本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的第一个目的在于提出一种安卓应用的启动方法,以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
4.本发明的第二个目的在于提出一种计算机可读存储介质。
5.本发明的第三个目的在于提出一种电子设备。
6.为达到上述目的,本发明第一方面实施例提出一种安卓应用的启动方法,所述方法包括以下步骤:安卓应用启动时,获取针对所有需要初始化的第三方任务预先构建的有向图;确定所述有向图中所有任务执行所需要的运行线程;根据所述有向图选择开始执行的任务和所选择任务对应的运行线程;将所述所选择任务放置到对应的运行线程运行;当所选择的任务执行完成后,判断是否还存在未执行的任务;如果存在,则返回所述根据所述有向图选择开始执行的任务和所选择任务对应的运行线程的步骤;如果不存在,则判定安卓应用启动完成。
7.本发明实施例的安卓应用的启动方法,在安卓应用启动时,获取针对所有需要初始化的第三方任务预先构建的有向图;并确定有向图中所有任务执行所需要的运行线程;进而根据有向图选择开始执行的任务和所选择任务对应的运行线程;以便将所选择任务放置到对应的运行线程运行;当所选择的任务执行完成后,判断是否还存在未执行的任务;如果存在,则返回根据有向图选择开始执行的任务和所选择任务对应的运行线程的步骤;如果不存在,则判定安卓应用启动完成。由此,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
8.为达到上述目的,本发明第二方面实施例提出一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述的安卓应用的启动方法。
9.本发明实施例的计算机可读存储介质,在其上的计算机程序被处理器执行时,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
10.为达到上述目的,本发明第三方面实施例提出一种电子设备,该电子设备包括存储器、处理器和存储在存储器上的计算机程序,该计算机程序被处理器执行时,实现上述的安卓应用的启动方法。
11.本发明实施例的电子设备,通过实现上述的安卓应用的启动方法,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验
12.本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
13.图1是本发明第一实施例的安卓应用的启动方法的流程图;
14.图2是本发明第一示例的有向图的示意图;
15.图3是本发明第二示例的有向图的示意图;
16.图4是本发明第三示例的有向图的示意图;
17.图5是本发明第一示例的安卓应用的启动方法的示意图;
18.图6是本发明第二示例的安卓应用的启动方法的示意图;
19.图7是本发明第二实施例的安卓应用的启动方法的流程图;
20.图8是本发明一个示例的安卓应用的启动方法的流程图。
具体实施方式
21.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
22.下面参考附图描述本发明实施例的安卓应用的启动方法、存储介质、电子设备。
23.图1是本发明一个实施例的安卓应用的启动方法的流程图。
24.如图1所示,安卓应用的启动方法包括以下步骤:
25.s11,安卓应用启动时,获取针对所有需要初始化的第三方任务预先构建的有向图。
26.具体地,可以在安卓应用启动时,获取存储有所有第三方任务的哈希表,进而从哈希表中获取该有向图。
27.其中,上述有向图包括各第三方任务的优先级,还包括各第三方任务的依赖关系。
28.需要说明的是,上述依赖关系指的是一个第三方任务必须在其所依赖着的其他第三方任务完成之后才能运行。作为一个示例,若任务y必须在任务x完成之后才能开始,则说明任务x与任务y之间的依赖关系为y依赖x,进而包括该任务x与任务y的有向图可以如图2所示。
29.s12,确定有向图中所有任务执行所需要的运行线程。
30.作为一个示例,如若获取到如图3所示的有向图,则根据该有向图可确定需要4个运行线程,以分别执行如下任务:a1

b1

c1

d1

e1

f1、a2

b2

c2

d2

e2

f2、a3

b3、c3

d3

e3

f3。
31.需要说明的是,在确定有向图中所有任务执行所需要的运行线程之后,还可以检查有向图的依赖关系中是否存在循环依赖;如果存在,则确定循环断开点,并在循环断开点处断开循环依赖;根据处理后的有向图选择开始执行的任务和所选择任务对应的运行线程。例如,如若在确定有向图中所有任务执行所需要的运行线程后,发现该运行线程中存在如图4所示的线程,则需要确定其的循环断开点,以断开循环,保证任务的有效执行。
32.作为一个示例,可选择可使安卓应用启动时间最短的任务节点,作为循环断开点。
33.s13,根据有向图选择开始执行的任务和所选择任务对应的运行线程。
34.具体地,可以根据有向图中各第三方任务的优先级,即按照有向图中优先级的高低顺序,选择开始执行的任务。
35.作为一个示例,对于图3所示的有向图,若该有向图中优先级最高的任务为a1,则选择a1为最先开始执行的任务,并确定与其对应的运行线程为a1

b1

c1

d1

e1

f1。如图5所示。
36.可选地,可以将有向图中的每一个运行线程中优先级最高的任务选为对应线程最先开始执行的任务,从而可同时执行多个任务。
37.作为一个示例,对于图3所示的有向图,若运行线程a1

b1

c1

d1

e1

f1中优先级最高的任务为a1、a2

b2

c2

d2

e2

f2中优先级最高的任务为a2、a3

b3中优先级最高的任务为a3、c3

d3

e3

f3中优先级最高的任务为c3,则将a1、a2、a3、c3选为开始执行的任务并同时执行。如图6所示。
38.s14,将所选择任务放置到对应的运行线程运行。
39.具体地,所需要的运行线程包括主线程和线程池中的异步线程,进而在确定开始执行的任务后,判断该任务对应的线程是否为主线程。如果所选择任务对应的运行线程为主线程,则通过消息传递机制handler将所选择任务切换到主线程中运行;如果所选择的线程为异步线程,则在线程池中运行所选择的任务。
40.作为一个示例,如图5所示,如若所选择的任务为任务b1,进而判断任务b1所在的线程a1

b1

c1

d1

e1

f1是否为主线程。若线程a1

b1

c1

d1

e1

f1为主线程,则通过消息传递机制handler将b1切换到主线程中运行;如若该线程不为主线程,则判断该线程为异步线程,进而在线程池中运行该任务b1。
41.其中,上述线程池可以根据安装安卓应用的终端设备的cpu设置运行核数,以充分利用cpu的资源。
42.需要说明的是,在运行所选择的任务之前,还需要检查所选择任务所依赖着的任务是否均已执行完成。如果是,则执行所选择任务;如果否,则待所选择任务所依赖着的任务均执行完成后,执行所选择任务。
43.可选地,如若确定所选择任务所依赖的任务尚未完成,则可将所选择的任务设置为静止状态,同时阻塞该任务所在的运行线程。进而返回步骤s13并将所依赖的任务作为被选择的开始执行的任务。在所依赖的任务完成后,将所选择的任务及与其对应的运行线程均设置为运动状态。
44.作为一个示例,如图3所示,如若所选择的任务为b1,且确定其所依赖的任务a3尚未完成,则可将b1设置为静止状态,将运行线程a1

b1

c1

d1

e1

f1设为阻塞状态。进而返回步骤s13并将a3作为被选择的开始执行的任务。在a3完成后,将任务b1与运行线程a1

b1

c1

d1

e1

f1设为运动状态并继续运行b1。
45.可选地,如若确定所选择任务所依赖的任务尚未完成,则可将所选择的任务存入缓存装置内,返回步骤s13并将所依赖的任务作为被选择的开始执行的任务。在所依赖的任务完成后,将所选择的任务从缓存装置内取出并继续运行。
46.作为一个示例,如图3所示,如若所选择的任务为b1,且确定其所依赖的任务a3尚未完成,则可将任务b1存入缓存装置并返回步骤s13,同时将任务a3作为步骤s13中的被选择的开始执行的任务。从而在任务a3被执行完成后,将任务b1从缓存装置中取出并继续运行。
47.可选地,如若确定所选择任务所依赖的任务尚未完成,则可将所依赖的任务的优先级设为最高。进而结束当前进程并返回步骤s13。
48.作为一个示例,如图3所示,如若所选择的任务为b1,且确定其所依赖的任务a3尚未完成,则可将任务a3的优先级设为最高。进而结束当前进行并返回步骤s13。
49.可选地,如若所选择任务为安卓应用启动后开始执行的第一个任务,则也可以不检查其所依赖着的任务是否均已执行完成。
50.s15,当所选择的任务执行完成后,判断是否还存在未执行的任务。
51.具体地,可以在所选择的任务执行完成后,将所选择任务从哈希表中删除,进而遍历哈希表,通过查看哈希表中是否还有任务来判断是否还存在为执行的任务。
52.作为一个示例,如图3所示,如若所选择的任务为b1,则在任务b1完成后,将任务b1从哈希表中删除,进而查看哈希表中是否还有未执行的任务。
53.可选地,在所选择的任务执行完成后,还可将执行任务的时间记录下来。
54.s16,如果不存在,则判定安卓应用启动完成。
55.可选地,如果存在,则返回上述根据有向图选择开始执行的任务和所选择任务对应的运行线程的步骤。
56.其中,如若判断存在,则可将上述执行完成的任务从有向图中去除,获取一个新的有向图。
57.在本发明的一个实施例中,如图7所示,在安卓应用启动前,还需要针对所有需要初始化的第三方任务预先构建有向图,具体步骤可以如下所示:
58.s71,新建有向图模板。
59.其中,该有向图模板可以为一个通用模板;也可为根据具体的安卓应用专门设计的模板。
60.作为一个示例,如图8所示,可以通过代码配置一个project(项目),进而将该project作为有向图模板。
61.s72,初始化有向图模板。
62.具体地,可以根据具体的安卓应用初始化该有向图模板。
63.作为一个示例,如图8所示,可以根据具体的安卓应用为该有向图模板新建启动任务。
64.可选地,如若上述新建的有向图模板为根据具体的安卓应用专门设计的模板,则也可以跳过步骤s72,直接执行步骤s73。
65.s73,新建并配置第三方任务,进而根据该第三方任务生成有向图。
66.具体地,可以将安卓应用的启动过程进行拆分,并将拆分得到的结果封装,从而得到多个第三方任务。
67.进一步地,将上述多个第三方任务进行依赖分类:分为有向图中无依赖关系的任务与有向图中依赖着其他任务;例如,对于图2所示的任务x与任务y,任务x为有向图中无依赖关系的任务,任务y为与有向图中依赖着其他任务。从而对上述多个第三方任务进行优先级评分,分值越高,则说明该任务的优先级便越高。
68.其中,有向图中无依赖关系的任务的优先级高于有向图中依赖着其他任务的优先级,且有向图中任务依赖深度最大的任务链中的锚点优先级最高。
69.由此,可以将配置完成的第三方任务填入有向图模板中并配置第三方任务间的关系,从而完成有向图的构件。作为一个示例,如图8所示,可以将有向图中无依赖关系的任务设置为开始任务,从而在安卓应用启动后执行。进而可以对有向图中依赖着其他任务分别配置依赖任务与被依赖任务列表。由此,可以生成有向表。
70.需要说明的是,在完成有向图的构建后,可以将有向图保存在哈希表中。有向图还包括各第三方任务是否在主线程运行的标识。
71.综上,本发明实施例的安卓应用的启动方法,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
72.进一步地,本发明提出一种计算机可读存储介质。
73.在本发明实施例中,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述的安卓应用的启动方法。
74.本发明实施例的计算机可读存储介质,在其上的计算机程序被处理器执行时,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
75.进一步地,本发明提出一种电子设备。
76.在本发明实施例中,电子设备包括存储器、处理器和存储在存储器上的计算机程序,该计算机程序被处理器执行时,实现上述的安卓应用的启动方法。
77.本发明实施例的电子设备,通过实现上述的安卓应用的启动方法,可以实现对安卓应用的启动任务进行拆分以得到有向图,进而根据有向图启动安卓应用,从而缩短了安卓应用的启动耗时,提高了用户的使用体验。
78.需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或
多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
79.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
80.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
81.在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
82.此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
83.在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
84.在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
85.尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1