处理状态事件的方法、装置、终端及存储介质与流程

文档序号:17842799发布日期:2019-06-11 21:24阅读:214来源:国知局
处理状态事件的方法、装置、终端及存储介质与流程

本公开涉及计算机应用领域,尤其涉及一种处理广播事件的方法、装置、终端及存储介质。



背景技术:

在终端内部,一般由操作系统来监控应用客户端的状态;并且,操作系统监控到该应用客户端的状态发生改变时,通过系统四大组件中的广播组件来向应用客户端发送广播消息,由应用客户端根据该广播消息,处理状态改变的状态事件。例如,应用客户端下载某个视频时,将该视频的下载任务添加到下载列表中。操作系统监控该下载任务的状态,当操作系统监控到该下载任务完成时,确定应用客户端的状态发生改变,向应用客户端发送广播消息,该广播消息对应的状态事件为将该视频的下载任务从下载列表中移除。应用客户端接收该广播消息,将该视频的下载任务从下载列表中移除。

相关技术中应用客户端接收到广播消息时,直接将该广播消息对应的状态事件交由该应用客户端的主线程来执行。例如,应用客户端接收到该广播消息时,将该视频的下载任务从下载列表中移除由该应用客户端的主线程来执行。

当该状态事件的处理时长较长时,应用客户端将该状态事件由应用客户端的主线程来执行,会影响主线程中正在执行的其他任务,导致应用客户端出现anr(appnotresponse,应用程序无响应)的问题,从而导致应用客户端出现卡顿。



技术实现要素:

本公开提供一种处理状态事件的方法、装置、终端及存储介质,可以解决应用客户端出现anr的问题。

根据本公开实施例的第一方面,提供了一种处理状态事件的方法,所述方法包括:

接收操作系统的广播消息,所述广播消息用于指示应用客户端的状态事件;

确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将所述多个子任务中的至少一个第一子任务分配给所述应用客户端的主线程执行,将所述多个子任务中的至少一个第二子任务分配给所述应用客户端的子线程执行,所述第一子任务为预计完成耗时小于预设耗时的子任务,所述第二子任务为预计完成耗时不小于所述预设耗时的子任务。

在一种可能实现方式中,所述确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务包括:

将所述状态事件对应的任务拆分为多个子任务;

确定每个子任务的预计完成耗时;

基于所述每个子任务的预计完成耗时,在所述多个子任务中确定所述至少一个第一子任务,以及所述至少一个第二子任务。

在另一种可能实现方式中,所述确定每个子任务的预计完成耗时,包括:

确定所述每个子任务的任务类型,基于所述每个子任务的任务类型,从任务类型和预计完成耗时的对应关系中,获取所述每个子任务的预计完成耗时;或者,

对于每个子任务,确定所述子任务的历史耗时,将所述子任务的历史耗时作为所述子任务的预计完成耗时。

在另一种可能实现方式中,所述子线程为单队列的线程池,所述将所述至少一个第二子任务分配给所述应用客户端的子线程执行,包括:

将所述至少一个第二子任务分配给所述线程池,并调用所述线程池中的多个第一子线程,通过异步执行方式执行所述至少一个第二子任务。

在另一种可能实现方式中,所述调用所述线程池中的多个第一子线程,通过异步执行方式执行所述至少一个第二子任务,包括:

基于每个第二子任务的预计完成耗时,确定所述每个第二子任务的执行顺序;

对于所述线程池中的每个第一子线程,当所述第一子线程执行完上一个第二子任务时,基于所述执行顺序,确定下一个执行的第二子任务,通过所述第一子线程执行所述下一个执行的第二子任务。

在另一种可能实现方式中,所述基于每个第二子任务的预计完成耗时,确定所述每个第二子任务的执行顺序,包括:

基于所述每个第二子任务的预计完成耗时,将所述每个第二子任务按照预计完成耗时由短到长进行排序,得到所述执行顺序。

在另一种可能实现方式中,在所述接收操作系统的广播消息之前,所述方法包括:

当所述应用客户端启动时,在所述操作系统中进行注册广播功能,所述注册广播功能用于当所述应用客户端的状态发生改变时,所述操作系统向所述应用客户端发送所述广播消息。

在另一种可能实现方式中,所述在所述操作系统中进行注册广播功能,包括:

调用所述操作系统中的广播注册器,创建第一广播标签;

调用所述操作系统中的广播接收器,向所述操作系统中的广播中转站发送第一广播标签和注册广播请求,所述注册广播请求携带所述应用客户端的应用标识;

调用所述广播中转站,将所述应用标识添加到所述第一广播标签中,得到第二广播标签;

调用所述操作系统中的系统管理服务注册器,存储所述第二广播标签,所述第二广播标签用于指示所述应用客户端在所述操作系统中已进行注册广播功能。

根据本公开实施例的第二方面,提供了一种处理状态事件的装置,所述装置包括:

接收单元,被配置为接收操作系统的广播消息,所述广播消息用于指示应用客户端的状态事件;

确定单元,被配置为确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

分配单元,被配置为将所述至少一个第一子任务分配给所述应用客户端的主线程执行,将所述至少一个第二子任务分配给所述应用客户端的子线程执行,所述第一子任务为预计完成耗时小于预设耗时的子任务,所述第二子任务为预计完成耗时不小于所述预设耗时的子任务。

在一种可能实现方式中,所述确定单元,还被配置为将所述状态事件对应的任务拆分为多个子任务;确定每个子任务的预计完成耗时;基于所述每个子任务的预计完成耗时,在所述多个子任务中确定所述至少一个第一子任务,以及所述至少一个第二子任务。

在另一种可能实现方式中,所述确定单元,还被配置为确定所述每个子任务的任务类型,基于所述每个子任务的任务类型,从任务类型和预计完成耗时的对应关系中,获取所述每个子任务的预计完成耗时;或者,

对于每个子任务,确定所述子任务的历史耗时,将所述子任务的历史耗时作为所述子任务的预计完成耗时。

在另一种可能实现方式中,所述子线程为单队列的线程池,所述分配单元,还被配置为将所述至少一个第二子任务分配给所述线程池,并调用所述线程池中的多个第一子线程,通过异步执行方式执行所述至少一个第二子任务。

在另一种可能实现方式中,所述分配单元,还被配置为基于每个第二子任务的预计完成耗时,确定所述每个第二子任务的执行顺序;对于所述线程池中的每个第一子线程,当所述第一子线程执行完上一个第二子任务时,基于所述执行顺序,确定下一个执行的第二子任务,通过所述第一子线程执行所述下一个执行的第二子任务。

在另一种可能实现方式中,所述分配单元,还被配置为基于所述每个第二子任务的预计完成耗时,将所述每个第二子任务按照预计完成耗时由短到长进行排序,得到所述执行顺序。

在另一种可能实现方式中,所述装置还包括:

注册单元,被配置为当所述应用客户端启动时,在所述操作系统中进行注册广播功能,所述注册广播功能用于当所述应用客户端的状态发生改变时,所述操作系统向所述应用客户端发送所述广播消息。

在另一种可能实现方式中,所述注册单元,还被配置为调用所述操作系统中的广播注册器,创建第一广播标签;调用所述操作系统中的广播接收器,向所述操作系统中的广播中转站发送第一广播标签和注册广播请求,所述注册广播请求携带所述应用客户端的应用标识;调用所述广播中转站,将所述应用标识添加到所述第一广播标签中,得到第二广播标签;调用所述操作系统中的系统管理服务注册器,存储所述第二广播标签,所述第二广播标签用于指示所述应用客户端在所述操作系统中已进行注册广播功能。

根据本公开实施例的第三方面,提供了一种终端,所述终端包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为:

接收操作系统的广播消息,所述广播消息用于指示应用客户端的状态事件;

确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将所述至少一个第一子任务分配给所述应用客户端的主线程执行,将所述至少一个第二子任务分配给所述应用客户端的子线程执行,所述第一子任务为预计完成耗时小于预设耗时的子任务,所述第二子任务为预计完成耗时不小于所述预设耗时的子任务。

根据本公开实施例的第四方面,提供了一种非临时性计算机可读存储介质,当所述存储介质的指令由终端的处理器执行时,使得终端能够执行一种处理状态事件的方法,所述方法包括:

接收操作系统的广播消息,所述广播消息用于指示应用客户端的状态事件;

确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将所述至少一个第一子任务分配给所述应用客户端的主线程执行,将所述至少一个第二子任务分配给所述应用客户端的子线程执行,所述第一子任务为预计完成耗时小于预设耗时的子任务,所述第二子任务为预计完成耗时不小于所述预设耗时的子任务。

根据本公开实施例的第五方面,提供了一种应用程序,当所述应用程序中的指令由客户端的处理器执行时,使得客户端能够执行一种处理状态事件的方法,所述方法包括:

接收操作系统的广播消息,所述广播消息用于指示应用客户端的状态事件;

确定所述状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将所述至少一个第一子任务分配给所述应用客户端的主线程执行,将所述至少一个第二子任务分配给所述应用客户端的子线程执行,所述第一子任务为预计完成耗时小于预设耗时的子任务,所述第二子任务为预计完成耗时不小于所述预设耗时的子任务。

本公开的实施例提供的技术方案可以包括以下有益效果:

本公开实施例提供的处理状态事件的方法、装置、终端及存储介质,将状态事件对应的任务拆分为多个子任务,将预计完成耗时小于预设耗时的第一子任务分配给主线程执行,将预计完成耗时不小于预设耗时的第二子任务分配给子线程执行,通过开启异步线程池,避免了预计完成耗时时间长的子任务影响主线程正在执行的其他任务,从而避免了应用客户端出现anr和卡顿现象,提高了应用客户端的运行效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是根据一示例性实施例示出的一种处理状态事件的实施环境图。

图2是根据一示例性实施例示出的一种处理状态事件的方法的流程图。

图3为根据一示例性实施例示出的一种处理状态事件的方法的流程图。

图4是根据一示例性实施例示出的一种注册广播功能的流程图。

图5是根据一示例性实施例示出的一种广播组件的结构示意图。

图6是根据一示例性实施例示出的一种发送广播消息的流程图。

图7是根据一示例性实施例示出的一种处理状态事件的装置的框图。

图8是根据一示例性实施例示出的一种处理状态事件的终端的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

图1是根据一示例性实施例示出的一种处理状态事件的实施环境,该实施环境中包括应用客户端101和操作系统102,应用客户端101和操作系统102安装在同一个终端上。操作系统102中包括广播组件(broadcastreceiver),应用客户端101和操作系统102之间通过该广播组件进行通信,且操作系统102用于实时监控该应用客户端101的状态,并在该任务的状态发生改变时,通过该广播组件向该应用客户端101发送广播消息。应用客户端101处理该广播消息对应的状态事件。

应用客户端101为终端上安装的任一客户端101;例如,应用客户端101可以为视频播放客户端101、音频播放、社交应用客户端101、短视频应用客户端101等。在本公开实施例中,对应用客户端101不作具体限定。操作系统102为该终端安装的操作系统;例如,该操作系统102为android(安卓)系统。终端可以为手机、平板电脑、计算机等,在本公开实施例中,对此都不做具体限定。

图2是根据一示例性实施例示出的一种处理状态事件的方法的流程图,应用于应用客户端中,如图2所示,包括以下步骤:

在步骤s21中,接收操作系统的广播消息,该广播消息用于指示应用客户端的状态事件。

在步骤s22中,确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务。

在步骤s23中,将该至少一个第一子任务分配给该应用客户端的主线程执行,将该至少一个第二子任务分配给该应用客户端的子线程执行,该第一子任务为预计完成耗时小于预设耗时的子任务,该第二子任务为预计完成耗时不小于该预设耗时的子任务。

在一种可能实现方式中,确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务,包括:

将该状态事件对应的任务拆分为多个子任务;

确定每个子任务的预计完成耗时;

基于每个子任务的预计完成耗时,在多个子任务中确定至少一个第一子任务,以及至少一个第二子任务。

在另一种可能实现方式中,确定每个子任务的预计完成耗时,包括:

确定每个子任务的任务类型,根据每个子任务的任务类型,从任务类型和预计完成耗时的对应关系中,获取每个子任务的预计完成耗时;或者,

对于每个子任务,确定子任务的历史耗时,将子任务的历史耗时作为子任务的预计完成耗时。

在另一种可能实现方式中,子线程为单队列的线程池,将至少一个第二子任务分配给应用客户端的子线程执行,包括:

将至少一个第二子任务分配给线程池,并调用线程池中的多个第一子线程,通过异步执行方式执行至少一个第二子任务。

在另一种可能实现方式中,调用线程池中的多个第一子线程,通过异步执行方式执行至少一个第二子任务,包括:

基于每个第二子任务的预计完成耗时,确定每个第二子任务的执行顺序;

对于线程池中的每个第一子线程,当第一子线程执行完上一个第二子任务时,基于执行顺序,确定下一个执行的第二子任务,通过第一子线程执行下一个执行的第二子任务。

在另一种可能实现方式中,基于每个第二子任务的预计完成耗时,确定每个第二子任务的执行顺序,包括:

基于每个第二子任务的预计完成耗时,将每个第二子任务按照预计完成耗时由短到长进行排序,得到执行顺序。

在另一种可能实现方式中,在接收操作系统的广播消息之前,方法包括:

当应用客户端启动时,在操作系统中进行注册广播功能,注册广播功能用于当应用客户端的状态发生改变时,操作系统向应用客户端发送广播消息。

在另一种可能实现方式中,在操作系统中进行注册广播功能,包括:

调用操作系统中的广播注册器,创建第一广播标签;

调用操作系统中的广播接收器,向操作系统中的广播中转站发送第一广播标签和注册广播请求,注册广播请求携带应用客户端的应用标识;

调用广播中转站,将应用标识添加到第一广播标签中,得到第二广播标签;

调用操作系统中的系统管理服务注册器,存储第二广播标签,第二广播标签用于指示应用客户端在操作系统中已进行注册广播功能。

本公开实施例提供的处理状态事件的方法,应用客户端将状态事件对应的任务拆分为多个子任务,将预计完成耗时小于预设耗时的第一子任务分配给主线程执行,将预计完成耗时不小于预设耗时的第二子任务分配给子线程执行,通过开启异步线程池,避免了预计完成耗时时间长的子任务影响主线程正在执行的其他任务,从而避免了应用客户端出现anr和卡顿现象,提高了应用客户端的运行效率。

上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。

图3是根据一示例性实施例示出的一种处理状态事件的方法的流程图,应用于应用客户端和操作系统中,如图3所示,包括以下步骤:

在步骤s31中,当应用客户端启动时,应用客户端在操作系统中进行注册广播功能。

该注册广播功能用于当应用客户端正在执行的任务的状态发生改变时,操作系统向应用客户端发送广播消息。相应的,本步骤可以通过以下步骤s311至s314实现,如图4所示,包括:

s311:应用客户端调用操作系统中的广播注册器,创建第一广播标签。

参见图5,广播组件包括广播注册器(contextimpl.register)、广播接收器(broadcastreceiver.onreceiver)、广播中转站(loadedapk.receiverdispatcher)和系统管理服务注册器(activitymanagerservice);当应用客户端启动时,应用客户端向广播注册器发送第一注册广播请求,第一注册广播请求携带该应用客户端的应用标识。广播注册器接收应用客户端发送的第一注册广播请求,创建第一广播标签。第一广播标签为标签模板,该标签模板中包括指定字段,该指定字段用于存储该应用客户端的应用标识。其中,应用标识可以为应用客户端的名称、安装位置或者安装包的存储路径等。

s312:应用客户端调用操作系统中的广播接收器,向操作系统中的广播中转站发送第一广播标签和第二注册广播请求。

广播注册器创建第一广播标签后,向广播接收器发送第一广播标签和第二注册广播请求,由广播接收器将第一广播标签和第二注册广播请求转发至广播中转站;其中,第二注册广播请求携带该应用客户端的应用标识。

s313:应用客户端调用该广播中转站,将该应用标识添加到第一广播标签中,得到第二广播标签。

广播中转站接收广播接收器转发的第一广播标签和第二注册广播请求,将第二注册广播请求中的该应用客户端的应用标识添加到第一广播标签的指定字段中,得到第二广播标签。

s314:应用客户端调用操作系统中的系统管理服务注册器存储该第二广播标签,以完成注册广播功能。

广播中转站生成第二广播标签之后,向系统管理服务注册器发送第二广播标签;系统管理服务注册器接收第二广播标签,存储该第二广播标签。第二广播标签用于指示所述应用客户端在所述操作系统中已进行注册广播功能。且第二广播标签的指定字段中存储的应用标识用于指示该应用客户端为广播接收者,当后续操作系统监控到应用客户端正在执行的任务的状态发生改变时,向对应的应用客户端发送广播消息即可。

需要说明的一点是,广播中转站和系统管理服务注册器是两个独立的进程,因此,广播中转站可以通过跨进程通信方式向系统管理服务注册器发送第二广播标签。

需要说明的另一点是,在应用客户端启动时,在操作系统中进行注册广播功能,后续在运行应用客户端的过程中,不需要再进行注册广播功能,操作系统直接基于第二广播标签中的应用标识向应用客户端发生广播消息即可,从而节省了注册广播功能的资源。

在步骤s32中,操作系统监控应用客户端的状态,当该应用客户端的状态发生改变时,操作系统向应用客户端发送广播消息。

应用客户端的状态可以为执行任务、任务完成、屏幕关闭、屏幕亮起、终端重启或者终端关机等。执行任务可以为播放任务或者下载任务等。当操作系统监控到该应用客户端的状态发生改变时,操作系统通过广播组件向应用客户端发送广播消息。该广播消息用于指示应用客户端的状态发生改变,该广播消息中至少携带有应用客户端的应用标识;当该状态改变由任务状态改变引起时,该广播消息还可以携带该任务的任务标识。。

本步骤可以通过以下步骤s321至s324实现,如图6所示,包括:

s321:当操作系统监控到该应用客户端的状态发生改变时,操作系统中的广播发送器向操作系统中的系统管理服务注册器发送广播消息发送请求。

该广播消息发送请求至少携带该应用客户端的应用标识,当该状态由任务状态改变引起时,该广播消息发送请求还可以携带该任务的任务标识。该广播组件中还包括广播发送器(contextimpl.sendbroadcast),操作系统调用该广播发送器向系统管理服务注册器发送广播消息发送请求。

s322:系统管理服务注册器接收广播发送器发送的广播消息发送请求,向操作系统中的广播中转站发送广播消息。

系统管理服务器注册器接收该广播消息发送请求,根据该应用客户端的应用标识,确定该应用客户端是否已进行注册广播功能;当该应用客户端已进行注册广播功能时,根据该广播消息发送请求,向操作系统中的广播中转站发送广播消息。当该应用客户端没有进行注册广播功能时,丢弃该广播消息发送请求。或者,当该应用客户端没有进行注册广播功能时,操作系统还可以通知应用客户端进行注册广播功能。

当应用客户端在操作系统中进行广播注册操作时,系统管理服务器注册器中存储有包含该应用客户端的应用标识的第二广播标签;相应的,系统管理服务器注册器根据该应用客户端的应用标识,确定该应用客户端是否已进行注册广播功能的步骤可以为:系统管理服务器确定是否存在包含该应用客户端的应用标识的第二广播标签;当存在包含该应用客户端的应用标识的第二广播标签,确定该应用客户端已进行注册广播功能;当不存在包含该应用客户端的应用标识的第二广播标签,确定该应用客户端没有进行注册广播功能。

s323:广播中转站接收该广播消息后,向操作系统中的广播接收器转发该广播消息。

s324:广播接收器接收该广播消息后,基于该广播消息中的应用客户端的应用标识,向该应用客户端发送该广播消息。

由于操作系统对应用客户端进行注册广播功能时,将该应用客户端定义为广播接收者。因此,操作系统中的广播接收器接收该广播消息后,通过广播接收器与该应用客户端之间的接口向应用客户端发送该广播消息。

需要说明的一点是,操作系统在监控应用客户端的状态之前,可以先确定该应用客户端是否进行注册广播功能;当该应用客户端进行了注册广播功能时,操作系统才监控应用客户端的状态;当该应用客户端没有进行注册广播功能时,操作系统可以不监控应用客户端的状态。

在步骤s33中,应用客户端接收操作系统的广播消息,该广播消息用于指示应用客户端的状态事件。

应用客户端通过广播接收器与该应用客户端之间的接口接收该广播消息;根据该广播消息确定该应用客户端的状态发生改变,执行步骤s34。

该状态事件用于表示应用客户端的状态发生改变。该状态事件可以为任一事件。例如,当状态改变为点亮屏幕时,该状态改变对应的状态事件为绘制屏幕元素;当状态改变为下载任务完成时,该状态改变对应的状态事件为将下载任务从下载列表中移除等。在本公开实施例中,对状态事件不作具体限定。

在步骤s34中,应用客户端确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务。

本步骤可以通过以下步骤s341至s343实现,包括:

步骤s341:应用客户端将该状态事件对应的任务拆分为多个子任务。

被拆分的子任务的数量可以为一默认的第一预设数量,也可以根据状态事件的事件类型进行设置。当被拆分的子任务的数量为默认的第一预设数量时,应用客户端将该状态事件对应的任务拆分为该第一预设数量个子任务。其中,第一预设数量可以根据需要进行设置并更改,在本公开实施例中,对该第一预设数量不作具体限定;例如,第一预设数量可以为3或者5等。

当被拆分的子任务的数量根据状态的事件类型进行设置时,应用客户端根据该状态事件的事件类型,从事件类型和数量的对应关系中获取该状态事件对应的第一数量,将该状态事件对应的任务拆分为第一数量个子任务。

步骤s342:应用客户端确定每个子任务的预计完成耗时。

应用客户端可以通过以下任一种实现方式确定每个子任务的预计完成耗时。

第一种实现方式:应用客户端确定每个子任务的任务类型,基于每个子任务的任务类型,从任务类型和预计完成耗时的对应关系中,获取每个子任务的预计完成耗时。

在本步骤之前,应用客户端确定多个任务类型以及每个任务类型的预计完成耗时,建立任务类型和预计完成耗时的对应关系。其中,应用客户端确定每个任务类型的预计完成耗时的步骤可以为:对于该每个任务类型,应用客户端获取该任务类型的多个样本任务的完成耗时,确定该任务类型的多个样本任务的完成耗时的平均值,将该平均值作为该任务类型的预计完成耗时。

应用客户端可以根据每个子任务的任务类型预测每个子任务的预计完成耗时,不同的任务类型对应不同的预计完成耗时。有的任务类型耗时长,例如拷贝文件;有的任务类型耗时短,例如切换歌曲。应用客户端根据子任务的任务类型,建立任务类型和预计完成耗时的对应关系,应用客户端确定每个子任务的任务类型后,从该对应关系中,获取每个子任务的预计完成耗时,从而提高了确定每个子任务的预计完成耗时的准确性。

第二种实现方式:对于每个子任务,应用客户端确定该子任务的历史耗时,将该子任务的历史耗时作为该子任务的预计完成耗时。

在一种可能的实现方式中,应用客户端可以获取该子任务的任一历史耗时,将该任一历史耗时作为该子任务的预计完成耗时。在另一种可能的实现方式中,应用客户端还可以获取该子任务在当前时间之前的预设时长内的多个历史耗时,将该多个历史耗时的平均值作为该子任务的预计完成耗时。

在本公开实施例中,应用客户端根据将该子任务的历史耗时确定该子任务的预计完成耗时,从而提高了准确性。

需要说明的一点是,应用客户端可以通过以上两种方式中的任一方式确定每个子任务的预计完成耗时,也可以结合以上两种方式确定每个子任务的预计完成耗时;当结合以上两种方式确定每个子任务的预计完成耗时时,本步骤可以为:对于每个子任务,应用客户端确定该子任务的任务类型,根据该任务类型,从任务类型和预计完成耗时的对应关系中获取该子任务的第一预计完成耗时,以及确定该子任务的历史耗时,将该子任务的历史耗时作为该子任务的第二预计完成耗时,将该子任务的第一预计完成耗时和第二预计完成耗时进行加权,得到该子任务的预计完成耗时。

需要说明的另一点是,以上两种方式只是举例,并不对应用客户端确定每个子任务的预计完成耗时的实现方式作具体限定,应用客户端还可以通过其他方式确定每个子任务的预计完成耗时。

步骤343:应用客户端基于每个子任务的预计完成耗时,在多个子任务中确定至少一个第一子任务,以及至少一个第二子任务。

在一种可能的实现方式中,应用客户端根据每个子任务的预计完成耗时进行子任务分配;应用客户端根据每个子任务的预计完成耗时,将多个子任务中预计完成耗时小于预设耗时的至少一个子任务,确定为至少一个第一子任务,将多个子任务中除第一子任务之外的至少一个子任务确定为至少一个第二子任务。

在步骤s35中,应用客户端将至少一个第一子任务分配给应用客户端的主线程执行,将至少一个第二子任务分配给应用客户端的子线程执行,该第一子任务为预计完成耗时小于预设耗时的子任务,该第二子任务为预计完成耗时不小于预设耗时的子任务。

应用客户端将预计完成耗时小于预设耗时的至少一个第一子任务分配给主线程执行。

在一种可能的实现方式中,当存在多个第一子任务时,应用客户端可以由主线程随机执行某个第一子任务;在另一种可能的实现方式中,应用客户端基于每个第一子任务的预计完成耗时,确定每个第一子任务的第一执行顺序;应用客户端向主线程发送该第一执行顺序和每个第一子任务,由主线程基于该第一执行顺序,执行每个第一子任务。其中,应用客户端确定第一执行顺序的步骤可以为:应用客户端基于每个第一子任务的预计完成耗时,将每个第一子任务按照预计完成耗时由短到长进行排序,得到第一执行顺序。

应用客户端将预计完成耗时不小于预设耗时至少一个第二子任务分配给应用客户端的子线程执行。相应的,应用客户端将至少一个第二子任务分配给应用客户端的子线程执行时的步骤可以为:应用客户端将至少一个第二子任务分配给线程池,并调用线程池中的多个第一子线程,通过异步执行方式执行至少一个第二子任务。

其中,应用客户端调用线程池中的多个第一子线程,通过异步执行方式执行至少一个第二子任务的步骤可以为:

应用客户端基于每个第二子任务的预计完成耗时,确定每个第二子任务的执行顺序;对于线程池中的每个第一子线程,当第一子线程执行完上一个第二子任务时,基于执行顺序,确定下一个执行的第二子任务,通过第一子线程执行下一个执行的第二子任务。

在一种可能的实现方式中,当存在多个第二子任务时,应用客户端可以由多个第一子线程随机执行多个第二子任务。在另一种可能的实现方式中,当存在多个第二子任务,且第二子任务的数量小于第一子线程的数量时,应用客户端可以由多个第一子线程随机执行多个第二子任务;在另一种可能的实现方式中,当存在多个第二子任务,且第二子任务的数量大于第一子线程的数量时,应用客户端基于每个第二子任务的预计完成耗时,确定每个第二子任务的第二执行顺序;对于线程池中的每个第一子线程,当第一子线程执行完上一个第二子任务时,基于该第二执行顺序,确定下一个执行的第二子任务,通过第一子线程执行下一个执行的第二子任务。其中,应用客户端确定第二执行顺序的步骤可以为:应用客户端基于每个第二子任务的预计完成耗时,将每个第二子任务按照预计完成耗时由短到长进行排序,得到第二执行顺序。

例如,线程池包括十个第一子线程,当第二子任务的数量为五时,这十个第一子线程中的任一五个第一子线程可以执行该五个第二子任务;当第二子任务的数量为十五个时,这十个第一子线程可以按照第二执行顺序,执行该第二执行顺序中预计完成耗时最短的十个第二子任务,当十个第一子线程中有任一一个第一子线程执行完十个第二子任务后,从剩下的五个第二子任务中选择预计耗时最短的一个第二子任务并执行。

需要说明的一点是,该子线程是一个单队列并可优先持有cpu(centralprocessingunit,中央处理器)资源的线程池,该线程池完全可保障每个第二子任务的有效执行。预设耗时可以根据需要进行设置并更改,在本公开实施例中,对预设耗时不作具体限定。例如,预设耗时为0.1秒、0.2秒或者0.5秒。

需要说明的另一点是,当第一子任务的数量超过第二预设数量时,应用客户端根据每个第一子任务的预计完成耗时,从多个第一子任务中选择第二预设数量个第一子任务,将选择的第二预设数量个第一子任务分配给主线程执行,将多个子任务中除选择的第二预设数量个第一子任务以外的其他子任务分配给子线程执行。其中,选择的第二预设数量个第一子任务的预计完成耗时均小于未被选择的第一子任务。

第二预设数量可以根据需要进行设置并更改,在本公开实施例中,对第二预设数量不作具体限定;例如,第二预设数量可以为2或者3等。

在本公开实施例中,当主线程正在执行的其他任务时,将预计完成耗时小于预设耗时的第一子任务分配给主线程执行不会影响主线程的执行进度,从而避免引发anr、卡顿的问题。

本公开实施例提供的处理状态事件方法,应用客户端将状态事件对应的任务拆分为多个子任务,将预计完成耗时小于预设耗时的第一子任务分配给主线程执行,将预计完成耗时不小于预设耗时的第二子任务分配给子线程执行,通过开启异步线程池,避免了预计完成耗时时间长的子任务影响主线程正在执行的其他任务,从而避免了应用客户端出现anr和卡顿现象,提高了应用客户端的运行效率。

图7是根据一示例性实施例示出的一种处理状态事件的装置的框图,如图7所示,该装置包括接收单元701、拆分单元702和分配单元703。

接收单元701,被配置为接收操作系统的广播消息,广播消息用于指示应用客户端的状态事件;

确定单元702,被配置为确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

分配单元703,被配置为将至少一个第一子任务分配给应用客户端的主线程执行,将至少一个第二子任务分配给应用客户端的子线程执行,第一子任务为预计完成耗时小于预设耗时的子任务,第二子任务为预计完成耗时不小于预设耗时的子任务。

在一种可能实现方式中,确定单元702,还被配置为将该状态事件对应的任务拆分为多个子任务;确定每个子任务的预计完成耗时;基于每个子任务的预计完成耗时,在多个子任务中确定至少一个第一子任务,以及至少一个第二子任务。

在另一种可能实现方式中,确定单元702,还被配置为确定每个子任务的任务类型,基于每个子任务的任务类型,从任务类型和预计完成耗时的对应关系中,获取每个子任务的预计完成耗时;或者,

对于每个子任务,确定子任务的历史耗时,将子任务的历史耗时作为子任务的预计完成耗时。

在另一种可能实现方式中,子线程为单队列的线程池,分配单元703,还被配置为将至少一个第二子任务分配给线程池,并调用线程池中的多个第一子线程,通过异步执行方式执行至少一个第二子任务。

在另一种可能实现方式中,分配单元703,还被配置为基于每个第二子任务的预计完成耗时,确定每个第二子任务的执行顺序;对于线程池中的每个第一子线程,当第一子线程执行完上一个第二子任务时,基于执行顺序,确定下一个执行的第二子任务,通过第一子线程执行下一个执行的第二子任务。

在另一种可能实现方式中,分配单元703,还被配置为基于每个第二子任务的预计完成耗时,将每个第二子任务按照预计完成耗时由短到长进行排序,得到执行顺序。

在另一种可能实现方式中,装置还包括:

注册单元,被配置为当应用客户端启动时,在操作系统中进行注册广播功能,注册广播功能用于当应用客户端的状态发生改变时,操作系统向应用客户端发送广播消息。

在另一种可能实现方式中,注册单元,还被配置为调用操作系统中的广播注册器,创建第一广播标签;调用操作系统中的广播接收器,向操作系统中的广播中转站发送第一广播标签和注册广播请求,注册广播请求携带应用客户端的应用标识;调用广播中转站,将应用标识添加到第一广播标签中,得到第二广播标签;调用操作系统中的系统管理服务注册器,存储第二广播标签,第二广播标签用于指示应用客户端在操作系统中已进行注册广播功能。

本公开实施例提供的处理状态事件的装置,将状态事件对应的任务拆分为多个子任务,将预计完成耗时小于预设耗时的第一子任务分配给主线程执行,将预计完成耗时不小于预设耗时的第二子任务分配给子线程执行,通过开启异步线程池,避免了预计完成耗时时间长的子任务影响主线程正在执行的其他任务,从而避免了应用客户端出现anr和卡顿现象,提高了应用客户端的运行效率。

关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图8是根据一示例性实施例示出的一种终端800的框图。该终端800用于执行上述处理状态事件的方法中客户端所执行的步骤。

通常,终端800包括有:处理器801和存储器802。

处理器801可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器801可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器801也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器801可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器801还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。

存储器802可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器802还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器802中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器801所具有以实现本申请中方法实施例提供的视频发布方法。

在一些实施例中,终端800还可选包括有:外围设备接口803和至少一个外围设备。处理器801、存储器802和外围设备接口803之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口803相连。具体地,外围设备包括:射频电路804、触摸显示屏805、摄像头806、音频电路807、定位组件808和电源809中的至少一种。

外围设备接口803可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器801和存储器802。在一些实施例中,处理器801、存储器802和外围设备接口803被集成在同一芯片或电路板上;在一些其他实施例中,处理器801、存储器802和外围设备接口803中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路804用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路804通过电磁信号与通信网络以及其他通信设备进行通信。射频电路804将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路804包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路804可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路804还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏805用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏805是触摸显示屏时,显示屏805还具有采集在显示屏805的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器801进行处理。此时,显示屏805还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏805可以为一个,设置终端800的前面板;在另一些实施例中,显示屏805可以为至少两个,分别设置在终端800的不同表面或呈折叠设计;在再一些实施例中,显示屏805可以是柔性显示屏,设置在终端800的弯曲表面上或折叠面上。甚至,显示屏805还可以设置成非矩形的不规则图形,也即异形屏。显示屏805可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。

摄像头组件806用于采集图像或视频。可选地,摄像头组件806包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件806还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路807可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器801进行处理,或者输入至射频电路804以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端800的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器801或射频电路804的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路807还可以包括耳机插孔。

定位组件808用于定位终端800的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件808可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。

电源809用于为终端800中的各个组件进行供电。电源809可以是交流电、直流电、一次性电池或可充电电池。当电源809包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端800还包括有一个或多个传感器810。该一个或多个传感器810包括但不限于:加速度传感器811、陀螺仪传感器812、压力传感器813、指纹传感器814、光学传感器815以及接近传感器816。

加速度传感器811可以检测以终端800建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器811可以用于检测重力加速度在三个坐标轴上的分量。处理器801可以根据加速度传感器811采集的重力加速度信号,控制触摸显示屏805以横向视图或纵向视图进行用户界面的显示。加速度传感器811还可以用于游戏或者用户的运动数据的采集。

陀螺仪传感器812可以检测终端800的机体方向及转动角度,陀螺仪传感器812可以与加速度传感器811协同采集用户对终端800的3d动作。处理器801根据陀螺仪传感器812采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器813可以设置在终端800的侧边框和/或触摸显示屏805的下层。当压力传感器813设置在终端800的侧边框时,可以检测用户对终端800的握持信号,由处理器801根据压力传感器813采集的握持信号进行左右手识别或快捷操作。当压力传感器813设置在触摸显示屏805的下层时,由处理器801根据用户对触摸显示屏805的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器814用于采集用户的指纹,由处理器801根据指纹传感器814采集到的指纹识别用户的身份,或者,由指纹传感器814根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器801授权该用户具有相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器814可以被设置终端800的正面、背面或侧面。当终端800上设置有物理按键或厂商logo时,指纹传感器814可以与物理按键或厂商标志集成在一起。

光学传感器815用于采集环境光强度。在一个实施例中,处理器801可以根据光学传感器815采集的环境光强度,控制触摸显示屏805的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏805的显示亮度;当环境光强度较低时,调低触摸显示屏805的显示亮度。在另一个实施例中,处理器801还可以根据光学传感器815采集的环境光强度,动态调整摄像头组件806的拍摄参数。

接近传感器816,也称距离传感器,通常设置在终端800的前面板。接近传感器816用于采集用户与终端800的正面之间的距离。在一个实施例中,当接近传感器816检测到用户与终端800的正面之间的距离逐渐变小时,由处理器801控制触摸显示屏805从亮屏状态切换为息屏状态;当接近传感器816检测到用户与终端800的正面之间的距离逐渐变大时,由处理器801控制触摸显示屏805从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图8中示出的结构并不构成对终端800的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

在示例性实施例中,还提供了一种非临时性计算机可读存储介质,当存储介质中的指令由终端的处理器执行时,使得终端能够执行一种处理状态事件的方法,方法包括:

接收操作系统的广播消息,广播消息用于指示应用客户端的状态事件,该状态事件用于表示应用客户端的状态发生改变;

确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将至少一个第一子任务分配给应用客户端的主线程执行,将至少一个第二子任务分配给应用客户端的子线程执行,第一子任务为预计完成耗时小于预设耗时的子任务,第二子任务为预计完成耗时不小于预设耗时的子任务。

在示例性实施例中,还提供了一种应用程序,当应用程序中的指令由终端的处理器执行时,使得终端能够执行一种处理状态事件的方法,方法包括:

接收操作系统的广播消息,广播消息用于指示应用客户端的状态事件,该状态事件用于表示应用客户端的状态发生改变;

确定该状态事件对应的任务的至少一个第一子任务和至少一个第二子任务;

将至少一个第一子任务分配给应用客户端的主线程执行,将至少一个第二子任务分配给应用客户端的子线程执行,第一子任务为预计完成耗时小于预设耗时的子任务,第二子任务为预计完成耗时不小于预设耗时的子任务。

本领域技术人员在考虑说明书及实践这里的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1