基于Android的应用启动任务优化方法及装置制造方法及图纸

技术编号:36431074 阅读:13 留言:0更新日期:2023-01-20 22:43
本申请提供一种基于Android的应用启动任务优化方法及装置,方法包括:存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序,这样可以解决复杂任务调度管理问题,大大减少开发人员需要面对的非业务逻辑(例如任务排序、线程调度等);针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。这样不需要预先逐个定义接口,可以实现动态的接口方法调用。接口方法调用。接口方法调用。

【技术实现步骤摘要】
基于Android的应用启动任务优化方法及装置


[0001]本申请涉及应用启动任务优化
,具体而言,涉及一种基于Android的应用启动任务优化方法及装置。

技术介绍

[0002]在Andriod应用启动时,需要执行各种初始化任务,有些任务之间还有前后依赖关系。在大型的应用中,启动任务的数量和任务之间的相互依赖关系比较复杂,导致任务管理混乱,代码维护成本极高,可谓牵一发而动全身。目前Android中解决此类问题的方法通常是将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页,其中有依赖关系的任务通过各种回调等方式来完成异步任务调度。
[0003]随着业务的迭代,启动任务和应用内其他任务的增多,代码变得臃肿,任务之间的依赖关系变得错综复杂难以维护。对于这种情况,开发人员面向的不是业务本身的逻辑,而是大量复杂的非业务逻辑(如线程调度,任务排序等),导致后续迭代难度增大,业务关系难以捋清。
[0004]并且,在应用启动任务优化过程中,通常会涉及到跨进程通信,传统的跨进程通信主要是通过定义各个业务需要的AIDL(Android Interface Definition Language,即Android接口定义语言)及服务,通过Android Binder机制进行跨进程通信。这样直接使用binder加service的方式使得面临复杂业务时,通信接口数量多且复杂难以管理,更加重了开发人员的开发负担。

技术实现思路

[0005]本申请实施例的目的在于提供一种基于Android的应用启动任务优化方法及装置,以有效实现应用启动任务优化,降低开发人员的开发负担。
[0006]为了实现上述目的,本申请的实施例通过如下方式实现:
[0007]第一方面,本申请实施例提供一种基于Android的应用启动任务优化方法,包括:存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序;针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。
[0008]在本申请实施例中,存储应用启动时关联的所有初始化任务,然后利用任务先后依赖关系及任务调度逻辑,进行任务队列结构排序,可以解决复杂任务调度管理问题,大大减少开发人员需要面对的非业务逻辑(例如任务排序、线程调度等);而在初始化任务的执行过程中,通过判断当前任务是否在主进程内,当前任务不在主进程内时,可以通过声明注解方法实现当前任务的跨进程任务队列交互。这样的方式不需要预先逐个定义接口,可以实现动态的接口方法调用,在面临复杂业务时,仍然非常便于管理,大大降低开发人员的开
发负担。
[0009]结合第一方面,在第一方面的第一种可能的实现方式中,基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,包括:针对每个初始化任务:获取调用本初始化任务所在线程需要等待的任务数量,并基于本初始化任务需要等待的任务数量,确定出本初始化任务的入度,其中,本初始化任务不需要等待时则任务数量为零;基于每个初始化任务的入度,确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务的入度减一,其中,一个初始化任务的后续任务依赖于此初始化任务的执行结果;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。
[0010]在该实现方式中,针对每个初始化任务:可以确定出本初始化任务的入度,进一步确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务(依赖于此初始化任务的执行结果)的入度减一;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。此种方式可以利用广度优先的方式梳理出初始化任务的有向无环图,从而实现任务队列结构排序,使得任务之间逻辑关系清晰,开发者可以直接面向业务逻辑进行任务启动,而无需关心任务之间的具体调度,极大地方便了开发人员优化自己的应用启动及应用内任务梳理过程。
[0011]结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在基于每个初始化任务的入度,确定出本阶段的可执行任务之前,所述方法还包括:获取每个初始化任务所在线程的优先级;对应的,基于每个初始化任务的入度,确定出本阶段的可执行任务,包括:确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务;基于每个本阶段任务和其所在线程的优先级,确定出本阶段的可执行任务。
[0012]在该实现方式中,通过获取每个初始化任务所在线程的优先级,并确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务,进一步基于每个本阶段任务和其所在线程的优先级确定出本阶段的可执行任务。这样的方式能够考虑到同一入度的本阶段任务(即本阶段内不需要再等待其他初始化任务的执行结果),考虑到本阶段任务所在线程的优先级,更有利于进一步优化启动任务(所在线程的优先级越高,被执行的概率越高)。
[0013]结合第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:对初始化任务进行线程管理。
[0014]在该实现方式中,对初始化任务进行线程管理,能够进一步实现对应用启动任务的优化。
[0015]结合第一方面的第一种可能的实现方式,在第一方面的第四种可能的实现方式中,通过声明注解方法实现当前任务的跨进程任务队列交互,包括:在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存;在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类ID及接口方法ID获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。
[0016]在该实现方式中,在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存,在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类ID及接口方法ID获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。此种方式通过协程技术解决
多线程任务调度问题,跨进程任务调度支持,使得多进程间任务调度在调用者层面无感知。
[0017]结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,包括:利用ProccessBridge.connect在其他进程中向主进程发起链接请求;获取主进程返回的链接结果,建立其他进程与主进程之间的跨进程连接。
[0018]结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,通过定义好的类ID及接口方法ID获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互,包括:其他进程利用ProccessBridge.getInstanc本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Android的应用启动任务优化方法,其特征在于,包括:存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序;针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。2.根据权利要求1所述的基于Android的应用启动任务优化方法,其特征在于,基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,包括:针对每个初始化任务:获取调用本初始化任务所在线程需要等待的任务数量,并基于本初始化任务需要等待的任务数量,确定出本初始化任务的入度,其中,本初始化任务不需要等待时则任务数量为零;基于每个初始化任务的入度,确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务的入度减一,其中,一个初始化任务的后续任务依赖于此初始化任务的执行结果;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。3.根据权利要求2所述的基于Android的应用启动任务优化方法,其特征在于,在基于每个初始化任务的入度,确定出本阶段的可执行任务之前,所述方法还包括:获取每个初始化任务所在线程的优先级;对应的,基于每个初始化任务的入度,确定出本阶段的可执行任务,包括:确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务;基于每个本阶段任务和其所在线程的优先级,确定出本阶段的可执行任务。4.根据权利要求2所述的基于Android的应用启动任务优化方法,其特征在于,所述方法还包括:对初始化任务进行线程管理。5.根据权利要求2所述的基于Android的应用启动任务优化方法,其特征在于,通过声明注解方法实现当前任务的跨进程任务队列交互,包括:在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存;在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之...

【专利技术属性】
技术研发人员:王峰王文辉唐进段凌云
申请(专利权)人:贵阳语玩科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1