绘制操作的执行方法、电子设备及可读介质转让专利

申请号 : CN202210722559.X

文献号 : CN116055611B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王洪烛肖路

申请人 : 荣耀终端有限公司

摘要 :

本申请实施例提供了一种绘制操作的执行方法、电子设备及计算机可读存储介质,绘制操作的执行方法包括:电子设备确定应用程序申请请求垂直同步VSYNC信号;电子设备判断应用程序处于后台状态、且在进行无效的后台绘制;电子设备禁止应用程序请求VSYNC信号。可以看出:在应用程序处于后台状态,且在进行无效的后台绘制时,电子设备禁止该应用程序请求VSYNC信号,避免该应用程序执行绘制操作去刷新界面浪费电子设备的系统资源,增加电子设备的发热、耗电。

权利要求 :

1.一种绘制操作的执行方法,其特征在于,应用于电子设备,所述电子设备配置有应用程序,所述绘制操作的执行方法包括:所述电子设备确定应用程序申请请求垂直同步VSYNC信号,所述VSYNC信号用于触发所述应用程序执行绘制操作;

所述电子设备确定所述应用程序申请请求VSYNC信号时,屏蔽区间未开启,其中,所述屏蔽区间被开启,所述电子设备禁止所述应用程序在所述屏蔽区间指示的时间段内请求VSYNC信号;

所述电子设备判断所述应用程序处于后台状态、且判断所述应用程序处于后台状态下在预定时间段内完成绘制的次数,达到阈值;

所述电子设备禁止所述应用程序请求VSYNC信号。

2.根据权利要求1所述的绘制操作的执行方法,其特征在于,所述电子设备禁止所述应用程序请求VSYNC信号之前,还包括:所述电子设备确定所述应用程序为第三方应用程序,所述第三方应用程序不属于所述电子设备系统自带的应用程序。

3.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备判断所述应用程序处于后台状态的方式,包括:所述电子设备获取所述应用程序配置的标志位,其中,所述应用程序配置的标志位与所述应用程序的状态同步;

所述电子设备利用所述应用程序配置的标志位,确定所述应用程序是否处于后台状态;其中,所述应用程序配置的标志位为第一值,所述电子设备确定所述应用程序处于后台状态。

4.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备判断所述应用程序处于后台状态的方式,包括:所述电子设备利用所述应用程序的文件系统中的参数,判断所述应用程序是否处于后台状态;其中,所述应用程序的文件系统中的参数大于第一数值,所述电子设备确定所述应用程序处于后台状态;

所述电子设备利用所述电子设备的系统进程针对所述应用程序的参数,判断所述应用程序是否处于后台状态;其中,所述电子设备的系统进程针对所述应用程序的参数大于第二数值,所述电子设备确定所述应用程序处于后台状态;

或者,所述电子设备利用所述应用程序进程中的变量,判断所述应用程序是否处于后台状态;其中,所述应用程序进程中的变量大于第二数值,所述电子设备确定所述应用程序处于后台状态。

5.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备判断所述应用程序处于后台状态的方式,包括:所述电子设备获取所述应用程序配置的标志位,以及所述应用程序的文件系统中的参数、所述电子设备的系统进程针对所述应用程序的参数和所述应用程序进程中的变量中的至少一个,其中,所述应用程序配置的标志位与所述应用程序的状态同步;

所述电子设备利用应用程序配置的标志位,以及所述应用程序的文件系统中的参数、所述电子设备的系统进程针对所述应用程序的参数和所述应用程序进程中的变量中的至少一个,确定所述应用程序是否为后台状态;

其中,所述应用程序配置的标志位为第一值,所述应用程序的文件系统中的参数、所述电子设备的系统进程针对所述应用程序的参数和所述应用程序进程中的变量中的至少一个,满足应用程序处于后台状态的要求,所述电子设备确定所述应用程序处于后台状态。

6.根据权利要求1所述的绘制操作的执行方法,其特征在于,所述电子设备禁止所述应用程序请求VSYNC信号之后,还包括:所述电子设备开启所述屏蔽区间。

7.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备确定应用程序申请请求垂直同步VSYNC信号之后,还包括:所述电子设备判断所述应用程序处于后台状态、且屏蔽区间处于开启状态,则禁止所述应用程序请求VSYNC信号。

8.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备禁止所述应用程序请求VSYNC信号之前,还包括:所述电子设备确定所述应用程序申请请求VSYNC信号的时刻,处于后台延迟区间之外。

9.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,所述电子设备确定应用程序申请请求垂直同步VSYNC信号之后,还包括:所述电子设备判断所述应用程序处于后台状态、且确定所述应用程序申请请求VSYNC信号的时刻,未处于后台延迟区间之外,所述电子设备切后台延迟区间预设时间,其中,所述电子设备切后台延时区间预设时间内,所述电子设备允许所述应用程序请求VSYNC信号。

10.根据权利要求1或2所述的绘制操作的执行方法,其特征在于,还包括:所述电子设备确定应用程序申请请求绘制;

所述电子设备判断所述应用程序处于后台状态、且在进行无效的后台绘制,则禁止所述应用程序请求VSYNC信号。

11.一种电子设备,其特征在于,包括:

一个或多个处理器、存储器和显示屏;

所述存储器和所述显示屏,与所述一个或多个所述处理器耦合,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述一个或多个处理器执行所述计算机指令时,所述电子设备执行如权利要求1至10任意一项所述的绘制操作的执行方法。

12.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序被执行时,具体用于实现如权利要求1至10任意一项所述的绘制操作的执行方法。

说明书 :

绘制操作的执行方法、电子设备及可读介质

技术领域

[0001] 本申请涉及电子技术领域,尤其涉及一种绘制操作的执行方法、电子设备、计算机程序产品及计算机可读存储介质。

背景技术

[0002] 手机等电子设备上配置的应用程序越来越多。但受限于电子设备屏幕尺寸,一个时间段内电子设备仅能展示一个或几个应用程序的显示界面。其他被启动、但显示界面未展示于电子设备屏幕的应用程序则处于后台状态。
[0003] 应用程序处于后台状态,仍然会占用电子设备的系统资源,如内存、CPU计算负载等,来进行绘制操作。但是,处于后台状态的应用程序并不为用户提供可视化的界面或视图,其进行的绘制操作为无效的绘制操作,该应用程序执行无效的绘制操作会浪费电子设备的系统资源,增加电子设备的发热、耗电。

发明内容

[0004] 本申请提供了一种绘制操作的执行方法、电子设备、计算机程序产品及计算机可读存储介质,目的在于实现避免电子设备的应用程序执行无效的绘制操作,浪费电子设备的系统资源,增加电子设备的发热、耗电。
[0005] 为了实现上述目的,本申请提供了以下技术方案:
[0006] 第一方面,本申请提供了一种绘制操作的执行方法,应用于电子设备,该电子设备配置有应用程序,其中,本申请提供的绘制操作的执行方法包括:电子设备确定应用程序申请请求垂直同步VSYNC信号,该VSYNC信号用于触发应用程序执行绘制操作;电子设备判断应用程序处于后台状态、且在进行无效的后台绘制;电子设备禁止应用程序请求VSYNC信号。
[0007] 由上述内容可以看出:电子设备判断应用程序在请求VSYNC信号,则分别通过该应用程序是否处于后台状态,以及判断该应用程序是否在进行无效的后台绘制的方式,来确定该应用程序是否应该禁止申请VSYNC信号。在应用程序处于后台状态,且在进行无效的后台绘制时,电子设备禁止该应用程序请求VSYNC信号,避免该应用程序执行绘制操作去刷新界面浪费电子设备的系统资源,增加电子设备的发热、耗电。
[0008] 在一个可能的实施方式中,电子设备禁止应用程序请求VSYNC信号之前,该绘制操作的执行方法还包括:电子设备确定应用程序为第三方应用程序,第三方应用程序不属于电子设备系统自带的应用程序。
[0009] 在上述可能的实施方式中,因电子设备的系统应用程序、系统服务在处于后台状态时,也有显示界面的需求,不能禁止请求VSYNC信号。因此,电子设备禁止应用程序请求VSYNC信号之前,要先确定申请请求VSYNC信号的应用程序为第三应用程序。
[0010] 在一个可能的实施方式中,电子设备判断应用程序处于后台状态的方式,包括:电子设备获取应用程序配置的标志位,其中,应用程序配置的标志位与应用程序的状态同步;电子设备利用应用程序配置的标志位,确定应用程序是否处于后台状态;其中,应用程序配置的标志位为第一值,电子设备确定应用程序处于后台状态。
[0011] 在上述可能的实施方式中,电子设备为应用程序配置的标志位,与该应用程序的状态同步,即跟随该应用程序的状态。其中,应用程序为后台状态,标志位为第一值,如为false,应用程序为前台状态,标志位为第二值,如为true。
[0012] 在一个可能的实施方式中,电子设备判断应用程序处于后台状态的方式,包括:电子设备利用应用程序的文件系统中的参数,判断应用程序是否处于后台状态;其中,应用程序的文件系统中的参数大于第一数值,电子设备确定应用程序处于后台状态;电子设备利用电子设备的系统进程针对应用程序的参数,判断应用程序是否处于后台状态;其中,电子设备的系统进程针对应用程序的参数大于第二数值,电子设备确定应用程序处于后台状态;或者,电子设备利用应用程序进程中的变量,判断应用程序是否处于后台状态;其中,应用程序进程中的变量大于第二数值,电子设备确定应用程序处于后台状态。
[0013] 在一个可能的实施方式中,电子设备判断应用程序处于后台状态的方式,包括:电子设备获取应用程序配置的标志位,以及应用程序的文件系统中的参数、电子设备的系统进程针对应用程序的参数和应用程序进程中的变量中的至少一个,其中,应用程序配置的标志位与应用程序的状态同步;电子设备利用应用程序配置的标志位,以及应用程序的文件系统中的参数、电子设备的系统进程针对应用程序的参数和应用程序进程中的变量中的至少一个,确定应用程序是否为后台状态;其中,应用程序配置的标志位为第一值,应用程序的文件系统中的参数、电子设备的系统进程针对应用程序的参数和应用程序进程中的变量中的至少一个,满足应用程序处于后台状态的要求,电子设备确定应用程序处于后台状态。
[0014] 在一个可能的实施方式中,电子设备判断应用程序在进行无效的后台绘制的方式,包括:电子设备判断应用程序在预定时间段内完成绘制的次数,是否达到阈值;其中,电子设备判断应用程序在预设时间段内完成绘制的次数达到阈值,则电子设备确定应用程序在进行无效的后台绘制。
[0015] 在一个可能的实施方式中,电子设备判断应用程序在进行无效的后效绘制之前,还包括:电子设备确定应用程序申请请求VSYNC信号时,屏蔽区间未开启,其中,屏蔽区间被开启,电子设备禁止应用程序在屏蔽区间指示的时间段内请求VSYNC信号。
[0016] 在一个可能的实施方式中,电子设备禁止应用程序请求VSYNC信号之后,还包括:电子设备开启屏蔽区间。
[0017] 在上述可能的实施方式中,电子设备设置屏蔽区间,电子设备开启屏蔽区间之后,可以实现应用程序在屏蔽区间内的多次请求VSYNC信号进行后台绘制,均可以被禁止。
[0018] 在一个可能的实施方式中,电子设备确定应用程序申请请求垂直同步VSYNC信号之后,还包括:电子设备判断应用程序处于后台状态、且屏蔽区间处于开启状态,则禁止应用程序请求VSYNC信号。
[0019] 在一个可能的实施方式中,电子设备禁止应用程序请求VSYNC信号之前,还包括:电子设备确定应用程序申请请求VSYNC信号的时刻,处于后台延迟区间之外。
[0020] 在上述可能的实施方式中,应用程序切到后台状态时,在一定时间内会基于一些缘由出现需要显示该应用程序的窗口的需求,不能禁止请求VSYNC信号,因此电子设备禁止应用程序请求VSYNC信号之前,需要确定应用程序申请请求VSYNC信号的时刻,处于后台延迟区间之外。
[0021] 在一个可能的实施方式中,电子设备确定应用程序申请请求垂直同步VSYNC信号之后,还包括:电子设备判断应用程序处于后台状态、且确定应用程序申请请求VSYNC信号的时刻,未处于后台延迟区间之外,电子设备切后台延迟区间预设时间,其中,电子设备切后台延时区间预设时间内,电子设备允许应用程序请求VSYNC信号。
[0022] 在一个可能的实施方式中,还包括:电子设备确定应用程序申请请求绘制;电子设备判断应用程序处于后台状态、且在进行无效的后台绘制,则禁止应用程序请求VSYNC信号。
[0023] 在上述可能的实施方式中,应用程序执行多个流程时,都可能会涉及申请请求VSYNC信号。若应用程序处于后台状态,应用程序申请请求VSYNC信号,是来自于应用程序执行的请求绘制流程,则会出现SyncBarrier一直存在的问题。SyncBarrier问题会导致应用程序从后台状态切回到前台状态时,请求绘制流程中的同步消息被阻塞,无法执行,进而应用程序无法申请VSYNC信号,导致应用程序显示于电子设备屏幕上的画面出现定屏。因此,在电子设备确定应用程序申请请求绘制时,也通过电子设备判断应用程序处于后台状态、且在进行无效的后台绘制,禁止应用程序请求VSYNC信号。
[0024] 第二方面,本申请提供了一种电子设备,包括:一个或多个处理器、存储器和显示屏;存储器和显示屏,与一个或多个处理器耦合,存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,电子设备执行如第一方面任意一项所述的绘制操作的执行方法。
[0025] 第三方面,本申请提供了一种计算机可读存储介质,用于存储计算机程序,计算机程序被执行时,具体用于实现执行如第一方面任意一项所述的绘制操作的执行方法。
[0026] 第四方面,本申请提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如第一方面中任意一项所述的绘制操作的执行方法。

附图说明

[0027] 图1为本申请实施例提供的手机配置的应用程序在前台状态和后台状态的展示图;
[0028] 图2为本申请实施例提供的电子设备的硬件结构图;
[0029] 图3为本申请实施例提供的电子设备的软件架构图;
[0030] 图4为电子设备的第三方应用程序切到前台状态时,标志位boolean isVisible的设置时序图;
[0031] 图5为电子设备的第三方应用程序切到后台状态时,标志位boolean isVisible的设置时序图;
[0032] 图6为本申请实施例提供的应用程序的状态切换与后台绘制检测的时序示意图;
[0033] 图7为本申请实施例提供的绘制操作的执行方法的流程图;
[0034] 图8为本申请实施例提供的电子设备检测应用程序是否满足后台绘制的特征识别的流程图;
[0035] 图9为本申请另一实施例提供的绘制操作的执行方法的流程图;
[0036] 图10为本申请实施例提供的后台绘制检测的时序图;
[0037] 图11为本申请另一实施例提供的绘制操作的执行方法的流程图。

具体实施方式

[0038] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本申请实施例中,“一个或多个”是指一个、两个或两个以上;“和/或”,描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
[0039] 在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0040] 本申请实施例涉及的多个,是指大于或等于两个。需要说明的是,在本申请实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
[0041] 目前,手机等电子设备配置有多个应用程序。根据应用程序是否直接与用户交互,应用程序的状态可分为前台状态和后台状态。应用程序处于前台状态,其界面对用户可见,用户可在应用程序的界面上输入操作。应用程序处于后台状态,其界面对用户不可见。
[0042] 通常情况下,若该应用程序满足下述三个条件中的任意一个,该应用程序的状态为前台状态,否则该应用程序的状态为后台状态。其中,三个条件分别为:该应用程序具有可见的活动(Activity)、该应用程序具有前台服务、以及其他前台状态的应用程序关联到该应用程序。
[0043] 示例性的,图1展示了手机配置的应用程序在前台状态和后台状态的展示图。
[0044] 图1中的(a)展示了处于前台状态的电话应用的界面。用户可以通过点击手机屏幕上的电话应用的图标、按压特定的物理按键或按键组合、输入语音、隔空手势等方式,指示手机开启电话应用。电话应用被启动之后,电话应用处于前台状态,其界面则可展示于手机屏幕上。
[0045] 在应用程序被启动之后,若用户通过在手机屏幕上输入操作,退出该应用程序。但若该应用程序的进程未并释放,该应用程序的状态则会被切换为后台状态。当然,用户也可在手机屏幕输入操作,查找手机中处于后台状态的应用程序。
[0046] 示例性的,用户如图1中的(a)所示,在手机屏幕的下边缘输入上滑操作,手机响应于用户输入的上滑操作,在屏幕上显示被启动的应用程序。被启动的应用程序可以理解成:手机运行有应用程序的进程,应用程序的进程未被释放。因此,在屏幕上显示的被启动的应用程序会包括:处于后台状态的应用程序,以及处于前台状态的应用程序。示例性的,图1中的(b)展示了手机屏幕显示的多个被启动的应用程序。用户可通过在图1中的(b)展示的多个被启动的应用程序的展示界面上输入滑动操作,以实现被启动的多个应用程序的界面的滑动显示。图1中的(b)和(c)展示的多个被启动的应用程序,电话应用处于前台状态,信息应用以及图库应用处于后台状态。
[0047] 需要说明的是,用户还可在图1中的(b)所示的多个被启动的应用程序的展示界面上,输入对应用程序的界面的点击操作,以控制手机屏幕全屏显示该应用程序的界面。当然,若手机屏幕全屏显示处于后台状态的应用程序的界面,应用程序的状态则会切换为前台状态。
[0048] 每个应用程序被启动后,当应用程序第一次需要展示可视化的界面或视图时,都会生成属于该应用程序的至少一个编舞者(Choreographer)。
[0049] 当应用程序需要刷新界面或者视图时,Choreographer会向图像合成器(Surface Flinger)请求垂直同步(VSYNC)信号。Choreographer在接收到Surface Flinger发送的VSYNC信号后,则可开始执行绘制操作。
[0050] Surface Flinger通常设置于电子设备的软件框架的系统库,用于被应用程序调用时,生成应用程序的界面或视图的图层。一些实施例中,Surface Flinger基于接收由显示驱动发送的硬件VSYNC信号,生成软件VSYNC模型。该软件VSYNC模型用于在接收到应用程序发送的请求时,按照软件VSYNC模型基于硬件VSYNC信号模拟出的VSYNC周期,产生VSYNC信号,该VSYNC信号用于控制显示画面的绘制渲染、图层合成的节奏,即控制应用程序执行绘制操作的节奏,当然也是触发应用程序执行绘制操作。
[0051] 其中,软件VSYNC模型接收多个硬件VSYNC信号,按照接收的硬件VSYNC信号的频率,模拟出VSYNC周期。
[0052] Choreographer在收到VSYNC信号后,会通过doFrame回调方法去处理应用程序的事件任务,以完成绘制操作。通常情况下,应用程序的事件任务可包括四种事件任务。其中,四种事件任务分别为CALLBACK_INPUT、CALLBACK_ANIMATION、CALLBACK_TRAVERSAL和CALLBACK_COMMIT。doFrame回调方法包括四个doCallBacks回调方法,分别用于处理上述四种事件任务。当然,Choreographer在收到VSYNC信号后,通过doFrame回调方法并不限制于去处理前述四种事件任务。
[0053] CALLBACK_INPUT为输入事件任务,其中,输入事件任务为应用程序将输入事件封装、分发到Choreographer的数据。输入事件可以为应用程序收到的用户与该应用程序的交互,例如,输入事件可以是用户点击该应用程序的某个可交互的控件、或者是用户在应用程序的界面上的滑动(上下滑动、左右滑动等)、或者是用户的语音输入等,在此不做限定。应用程序在确定输入事件后,对该输入事件进行初步处理,并生成该输入事件对应的输入事件任务,并将该输入事件任务传递给Choreographer。
[0054] CALLBACK_ANIMATION为动画事件任务,动画事件任务为应用程序计算动画(Animation)所需的数据。其中,动画可以包括:视图动画(View Animation)、帧动画(Drawable Animation)、属性动画(Property Animation)等。
[0055] CALLBACK_TRAVERSAL为布局事件任务,用于参与Choreographer计算视图或界面的绘制数据。其中,计算确定的绘制数据会被提交给应用程序的其他模块去确定视图中显示内容的宽高、位置、形状等。
[0056] CALLBACK_COMMIT为提交事件任务,用于标志Choreographer完成了某个垂直同步信号所对应的绘制操作。
[0057] 手机等电子设备不会判定请求VSYNC信号的应用程序是否真的需要进行绘制操作,电子设备的任一应用程序在向Surface Flinger请求VSYNC信号后,Surface Flinger都会为其分发VSYNC信号。并且,用户在使用电子设备时,可以开启多个应用程序。但是,受限于电子设备的屏幕的尺寸,在某一时刻,用户只能将一个或少数几个应用程序的界面展示在屏幕上,而被开启、但其界面未展示于屏幕上的应用程序,其状态会切换为后台状态。对于处于后台状态的应用程序来说,由于该应用程序的进程未释放,其仍然持有Choreographer,该应用程序在后台执行某些操作时,也会触发Choreographer进行绘制操作。
[0058] 由于处于后台状态的应用程序没有可以用来向用户展示的视图或界面,处于后台状态的应用程序执行绘制操作的结果并不会被用户感知到。并且,由于处于后台状态的应用程序的Choreographer只会被分发动画事件任务,处于后台状态的应用程序在执行绘制操作时,实际上只处理了动画事件任务。因此,可以认为处于后台状态的应用程序执行的绘制操作为无效的绘制操作。
[0059] 对于用户来说,电子设备显示应用程序的界面,该应用程序执行绘制操作去刷新界面是有必要的;而当电子设备关闭应用程序界面的显示后至电子设备再次显示该应用程序的界面前,该应用程序执行绘制操作去刷新界面浪费电子设备的系统资源,增加电子设备的发热、耗电。
[0060] 基于此,本申请实施例提供一种绘制操作的执行方法,以实现在应用程序请求绘制或VSYNC信号时,检测应用程序处于后台状态、属于第三方应用程序,且请求绘制或VSYNC信号是要进行无效的后台绘制操作,则禁止该应用程序请求VSYNC信号。
[0061] 其中,第三方应用程序区别于系统应用程序。系统应用程序,是指预先安装到电子设备的应用程序,属于电子设备系统自带的应用程序。电子设备首次开机启动,电子设备的桌面呈现有系统应用程序的图标。第三方应用程序是指第三方生产,需用户在电子设备上安装的应用程序。
[0062] 本申请实施例提供的绘制操作的执行方法,可应用于手机,平板电脑,笔记本电脑,超级移动个人计算机(Ultra‑mobile Personal Computer,UMPC),手持计算机,上网本,个人数字助理(Personal Digital Assistant,PDA),可穿戴电子设备和智能手表等电子设备。
[0063] 以下以手机为例,对本申请实施例的电子设备的硬件结构进行介绍。
[0064] 图2为本申请实施例提供的一种电子设备的组成示例。如图2所示,电子设备200可以包括处理器210,内部存储器220,显示屏230,天线1,天线2,移动通信模块240,以及无线通信模块250等。
[0065] 可以理解的是,本实施例示意的结构并不构成对电子设备200的具体限定。在另一些实施例中,电子设备200可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
[0066] 处理器210可以包括一个或多个处理单元,例如:处理器210可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,智能传感集线器(sensor hub)和/或神经网络处理器(neural‑network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
[0067] 处理器210中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器210中的存储器为高速缓冲存储器。该存储器可以保存处理器210刚用过或循环使用的指令或数据。如果处理器210需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器210的等待时间,因而提高了系统的效率。
[0068] 内部存储器220可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器210通过运行存储在内部存储器220的指令,从而执行电子设备200的各种功能应用以及数据处理。内部存储器220可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备200使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器220可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器210通过运行存储在内部存储器220的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备200的各种功能应用以及数据处理。
[0069] 一些实施例中,内部存储器220存储的是用于执行绘制操作的执行方法的指令。处理器210可以通过执行存储在内部存储器220中的指令,实现在应用程序请求绘制或VSYNC信号时,检测应用程序处于后台状态、属于第三方应用程序,且请求绘制或VSYNC信号是要进行无效的后台绘制操作,则禁止该应用程序请求VSYNC信号。
[0070] 电子设备通过GPU,显示屏230以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏230和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器210可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
[0071] 显示屏230用于显示图像,视频等。显示屏230包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light‑emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active‑matrix organic light emitting diode的,AMOLED),柔性发光二极管(flex light‑emitting diode,FLED),Miniled,MicroLed,Micro‑oled,量子点发光二极管(quantum dot light emitting diodes,QLED)等。在一些实施例中,电子设备可以包括1个或N个显示屏230,N为大于2的正整数。
[0072] 电子设备200的无线通信功能可以通过天线1,天线2,移动通信模块240,无线通信模块250,调制解调处理器以及基带处理器等实现。
[0073] 天线1和天线2用于发射和接收电磁波信号。电子设备200中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线2复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
[0074] 移动通信模块240可以提供应用在电子设备200上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块240可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块240可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块240还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块240的至少部分功能模块可以被设置于处理器210中。在一些实施例中,移动通信模块240的至少部分功能模块可以与处理器210的至少部分模块被设置在同一个器件中。
[0075] 无线通信模块250可以提供应用在电子设备200上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi‑Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块250可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块250经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器210。无线通信模块250还可以从处理器210接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
[0076] 另外,在上述部件之上,可折叠的电子设备运行有操作系统。例如iOS操作系统,Android操作系统,Windows操作系统等。在操作系统上可以安装运行应用程序。
[0077] 图3是本申请实施例的可折叠的电子设备的软件结构框图。
[0078] 分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
[0079] 应用程序层可以包括一系列应用程序包。如图3所示,应用程序包可以包括图库,地图,日历,通话,信息等应用程序。
[0080] 应用程序框架层为应用程序层的应用程序提供应用编程接口(application programming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。如图3所示,应用程序框架层可以包括窗口管理器,内容提供器,电话管理器,资源管理器,通知管理器,视图系统,Surface Flinger API等。
[0081] 窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
[0082] 内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
[0083] 电话管理器用于提供电子设备的通信功能。例如通话状态的管理(包括接通,挂断等)。
[0084] 资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
[0085] 通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
[0086] 视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
[0087] Surface Flinger API为图像合成器(Surface Flinger)的接口。应用程序层的应用,可通过Surface Flinger API调用Surface Flinger,并控制Surface Flinger运行。
[0088] Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。在本申请一些实施例中,应用冷启动会在Android runtime中运行,Android runtime由此获取到应用的优化文件状态参数,进而Android runtime可以通过优化文件状态参数判断优化文件是否因系统升级而导致过时,并将判断结果返回给应用管控模块。
[0089] 核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
[0090] 应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
[0091] 系统库可以包括多个功能模块。例如:表面管理器(surface manager),三维图形处理库(例如:OpenGL ES),二维图形引擎(例如:SGL)以及Surface Flinger等。
[0092] 表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
[0093] 三维图形处理库用于实现三维图形绘图,图像渲染、合成和图层处理等。
[0094] 二维图形引擎是2D绘图的绘图引擎。
[0095] Surface Flinger如前述内容,此处不再赘述。
[0096] 内核层是硬件和软件之间的层。内核层至少包含显示驱动等。一些实施例中,显示驱动用于控制显示屏显示图像。
[0097] 硬件层可包括前述提出的可折叠的电子设备硬件部件。示例性的,图3展示了显示屏。
[0098] 需要说明的是,本申请实施例虽然以Android系统为例进行说明,但是其基本原理同样适用于基于iOS、Windows等操作系统的电子设备。
[0099] 以下结合图4,对本申请实施例提供的绘制操作的执行方法的过程进行介绍。
[0100] 首先需要说明的是,电子设备中的第三方应用程序,均被配置有标志位boolean isVisible,用于说明电子设备的应用程序的状态。boolean isVisible=true,表示应用程序处于前台状态;boolean isVisible=false,表示应用程序处于后台状态。
[0101] 通常情况下,第三方应用程序被配置的标志位boolean isVisible可以保存于ActivityThread.java文件中。当然,第三方应用程序被配置的标志位boolean isVisible并不限制仅能保存于ActivityThread.java文件中。
[0102] 电子设备中的第三方应用程序在运行过程中,其状态会由前台状态切到后台状态,也会由后台状态切到前台状态。在第三方应用程序切到前台状态时,第三方应用程序被配置的标志位boolean isVisible会被设置为true;并且,在第三方应用程序切到后台状态时,第三方应用程序被配置的标志位boolean isVisible会被设置为false。
[0103] 以下结合图4和图5,对电子设备的一个第三方应用程序切换状态时,对标志位boolean isVisible的设置进行介绍。图4为电子设备中的一个第三方应用程序切到前台状态时,标志位boolean isVisible的设置时序图;图5为该第三方应用程序切到后台状态时,标志位boolean isVisible的设置时序图。
[0104] 用户启动电子设备中的一个第三方应用程序,控制其界面可见。电子设备会按照如图4所示的函数间的调用关系来实现该第三方应用程序切换到前台状态。起始的,电子设备利用Binder.java文件里的onTransact函数,调用电子设备中的IWindow_Stub.java文件里的dispatchAppVisibility函数。待电子设备执行到handleAppVisibility时,电子设备设置ActivityThread.java文件中标志位boolean isVisible为true。
[0105] 需要说明的是,因第三方应用程序切到前台状态,电子设备执行到handleAppVisibility之后,第三方应用程序会请求VSYNC信号。因此,电子设备在执行到handleAppVisibility时,电子设备设置ActivityThread.java文件中标志位boolean isVisible为true,可以避免因标志位boolean isVisible维持false,导致电子设备采用本申请实施例提供的绘制操作的执行方法,因标志位boolean isVisible维持false,错误的认定第三方应用程序为后台状态,以禁止请求VSYNC信号的方式管控第三方应用程序的绘制操作。
[0106] 用户输入操作控制第三方应用程序切换到后台状态,电子设备按照如图5所示的所示的函数间的调用关系来实现该第三方应用程序切换到后台状态。电子设备执行到updateProcessState时,电子设备设置ActivityThread.java文件中标志位boolean isVisible为false。一些实施例中,电子设备执行到updateProcessState时,可以延迟一段时间之后,再设置标志位boolean isVisible为false。一些实施例中,可以延迟1秒。另一些实施例中,电子设备执行到updateProcessState时,设置标志位boolean isVisible为false,但标志位被设置为false,要延迟一段时间才发挥作用。延时的一段时间也可以是1秒。
[0107] 需要说明的是,电子设备延迟一段时间,再设置标志位boolean isVisible为false,或者设置标志位boolean isVisible为false,延迟一段时间再起作用,用于规避ActivityStop附近的UI动作。第三方应用程序切到后台状态,会基于一些缘由出现需要显示该第三方应用程序的窗口的需求,例如输入法类型的第三方应用程序在后台状态时的弹dialog,第三方应用程序在后台状态时需要弹悬浮窗等。第三方应用程序切到后台状态之后,延迟一段时间再设置标志位boolean isVisible为false,可以避免因标志位boolean isVisible设置为false,认定第三方应用程序为后台状态,以禁止请求VSYNC信号的方式管控第三方应用程序的绘制操作,导致显示该第三方应用程序的窗口的操作无法实现。
[0108] 当然,电子设备中的系统应用程序切换到前台状态时,电子设备也执行如图4所示的函数间的调用关系,系统应用程序切换到后台状态时,电子设备也执行如图5所示的函数间的调用关系。本申请实施例中是以第三方应用程序为例进行介绍。
[0109] 以下对电子设备中的第三方应用程序配置标志位boolean isVisible,来标志第三方应用程序的状态的缘由进行介绍。
[0110] 电子设备中的一个第三方应用程序被用户启动,当该第三方应用程序需要刷新界面或者视图时,Choreographer会向Surface Flinger请求VSYNC信号。Choreographer在接收到Surface Flinger发送的VSYNC信号后,开始执行绘制操作。为了便于说明,以下将电子设备中申请请求VSYNC信号的第三方应用程序称之为第一应用程序。
[0111] 为了避免第一应用程序在处于后台状态时,还进行不被用户感知到的绘制操作(可简称为后台绘制),第一应用程序申请请求VSYNC信号之后,需要判断其所处的状态,是否为后台状态。
[0112] 在一些实施例中,电子设备可采用读节点的方式,来确定第一应用程序的状态。具体的,电子设备可读取第一应用程序的文件系统,该文件系统由Linux内核提供,包括:第一应用程序的进程的信息。文件系统中的参数oom_score_adj用于表示Linux进程内存资源的优先级,可以反映第一应用程序的状态。oom_score_adj的范围为‑1000至+1000,数值越小,说明该第一应用程序的进程内存资源的优先级越高。一些实施例中,oom_score_adj的数值小于等于0,可表示第一应用程序处于前台状态,oom_score_adj的数值大于0,可表示第一应用程序处于后台状态。
[0113] 需要说明的是,电子设备可沿路径/proc/self/oom_score_adj,读取oom_score_adj。
[0114] 在另一些实施例中,电子设备可读取system_server进程针对第一应用程序的oom_adj,由oom_adj的数值来确定第一应用程序的状态。oom_adj与文件系统中的参数oom_score_adj作用基本等同,也可反映第一应用程序的状态。
[0115] system_server进程的oom_adj的范围为:‑1至20。一些实施例中,system_server进程的oom_adj的数值小于等于6,可表示第一应用程序处于前台状态;system_server进程的oom_adj的数值大于6,可表示第一应用程序处于后台状态。
[0116] 在另一些实施例中,电子设备也可读取第一应用程序进程中的变量,该变量通常称之为ActivityThread.java#mLastProcessState。该变量与system_server进程的oom_adj完全保持同步,数值相同,其范围为:‑1至20。一些实施例中,ActivityThread.java#mLastProcessState的数值小于等于6,可表示第一应用程序处于前台状态;ActivityThread.java#mLastProcessState的数值大于6,可表示第一应用程序处于后台状态。
[0117] 电子设备以第一应用程序的变量ActivityThread.java#mLastProcessState,确定第一应用程序的状态,可以实现仅在第一应用程序的进程中,实现第一应用程序的状态的确定。
[0118] 需要说明的是,第一应用程序的变量ActivityThread.java#mLastProcessState,电子设备采用函数updateProcessState()来维护,即实现该变量数值的修改等操作。
[0119] 因此,电子设备可通过调用该函数updateProcessState(),来确定第一应用程序的变量ActivityThread.java#mLastProcessState是否发生变化,并在该变量发生变化时,电子设备再读取该变量的数值,以实现通过读取的该变量的数值,来实时的确定第一应用程序的状态变化。另外,电子设备也可以在确定第一应用程序发生状态变化时,即通过图4和图5的流程,来确定第一应用程序切到前台状态或后台状态,再读取第一应用程序的变量,通过该变量的数值,来确定第一应用程序的状态。
[0120] 然而,电子设备采用前述三种实施例中提供的方式,来确定电子设备的第一应用程序处于后台状态之后,禁止该第一应用程序请求VSYNC信号的方式,在实际执行时,会出现第三方应用程序无法启动的问题。
[0121] 发明人研究发现:电子设备开机启动过程中,第三方应用程序会初始化,均属于后台状态。当然,前述三种实施例中提出的文件系统中的参数oom_score_adj、system_server进程的oom_adj以及第三方应用程序进程中的变量,均会指示出第三方应用程序为后台状态。因此,电子设备禁止该第一应用程序请求VSYNC信号,会导致该第三方应用程序被用户启动要从后台状态切换到前台状态时,由于VSYNC信号被禁止请求,第三方应用程序无法完成绘制操作,即无法正常启动运行。
[0122] 因此,电子设备会对第三方应用程序配置前述内容提出的标志位boolean isVisible,并且,该标志位被初始设定为true。第三方应用程序在初始化阶段,电子设备可以通过读取第三方应用程序配置的标志位boolean isVisible,因其设定为true,电子设备则认定该第三方应用程序为前台状态,不禁止其请求VSYNC信号,避免无法正常启动的问题。
[0123] 参见图6,第三方应用程序在初始化阶段,标志位boolean isVisible设置为true,电子设备根据设置为true的标志位boolean isVisible,则可认定第三方应用程序为前台状态。基于此,电子设备则不会检测到后台绘制,即检测后台绘制的结果为false。在第三方应用程序初始化完成,被启动处于前台状态时,标志位boolean isVisible还会维持设置为true,且因为标志位boolean isVisible为true,电子设备不会检测到后台绘制,即检测后台绘制的结果为false。
[0124] 需要说明的是,在第三方应用程序切换到后台状态进行后台绘制时,因电子设备会延迟一段时间设置标志位boolean isVisible为false,如图6中的延迟1秒。因此,在第三方应用程序已经切换到后台状态时,标志位boolean isVisible还会维持设置为true,且电子设备不会检测到后台绘制,即后台绘制的检测结果为false。
[0125] 在电子设备将标志位boolean isVisibl设置为false之后,电子设备开始检测后台绘制,且后台绘制的检测一段时间之后,可检测到后台绘制,即后台绘制的检测结果为true。
[0126] 图7展示了本申请实施例提供的一种绘制操作的执行方法。如图7所示,本实施例提供的绘制操作的执行方法,包括下述步骤:
[0127] S701、电子设备的第一应用程序申请请求VSYNC信号。
[0128] 其中,第一应用程序如前述内容,为电子设备配置的多个第三方应用程序的任意一个。当然,第一应用程序也可以是电子设备配置的系统应用程序。本实施例中,以第一应用程序为第三方应用程序为例进行介绍。
[0129] 第一方应用程序被用户启动,当该第一应用程序需要刷新界面或者视图时,Choreographer会向Surface Flinger请求VSYNC信号。
[0130] 因此,本步骤中提及的第一应用程序申请请求VSYNC信号,可以理解成在第一应用程序需要刷新界面或者视图时,第一应用程序的Choreographer向Surface Flinger请求VSYNC信号,即电子设备要执行Choreographer#scheduleVsyncLocked()方法。
[0131] S702、电子设备判断第一应用程序,是否处于后台状态。
[0132] 如前述所述,第一应用程序配置有标志位boolean isVisible。电子设备可读取该标志位boolean isVisible,通过该标志位boolean isVisible来确定第一应用程序是否处于后台状态。
[0133] 一些实施例中,标志位boolean isVisible为true,电子设备判定第一应用程序处于前台状态,即未处于后台状态;标志位boolean isVisible为false,电子设备判定第一应用程序处于后台状态。
[0134] 电子设备也可以读取第一应用程序的文件系统,通过该文件系统中的参数oom_score_adj来判断第一应用程序是否处于后台状态。一些实施例中,oom_score_adj的数值小于等于0,可表示第一应用程序处于前台状态,即未处于后台状态,oom_score_adj的数值大于0,可表示第一应用程序处于后台状态。
[0135] 电子设备也可以读取system_server进程针对第一应用程序的oom_adj,由oom_adj的数值来确定第一应用程序的状态。一些实施例中,system_server进程的oom_adj的数值小于等于6,可表示第一应用程序处于前台状态,即未处于后台状态;system_server进程的oom_adj的数值大于6,可表示第一应用程序处于后台状态。
[0136] 电子设备也可以读取第一应用程序进程中的ActivityThread.java#mLastProcessState变量,由ActivityThread.java#mLastProcessState变量来判断第一应用程序是否处于后台状态。一些实施例中,ActivityThread.java#mLastProcessState的数值小于等于6,可表示第一应用程序处于前台状态,即未处于后台状态;
ActivityThread.java#mLastProcessState的数值大于6,可表示第一应用程序处于后台状态。
[0137] 需要说明的是,电子设备也可以结合标志位boolean isVisible,以及文件系统中的参数oom_score_adj、system_server进程针对第一应用程序的oom_adj和第一应用程序进程中的ActivityThread.java#mLastProcessState变量中的至少一个,来确定第一应用程序是否为后台状态。
[0138] 电子设备确定标志位boolean isVisible为false,文件系统中的参数oom_score_adj、system_server进程针对第一应用程序的oom_adj和第一应用程序进程中的ActivityThread.java#mLastProcessState变量中的至少一个满足后台状态的要求,电子设备则判断第一应用程序为后台状态。否则,电子设备则判断第一应用程序处于前台状态。
[0139] 示例性的,电子设备结合标志位boolean isVisible和第一应用程序进程中的ActivityThread.java#mLastProcessState变量,来确定第一应用程序是否处于后台状态。
[0140] 电子设备判断标志位boolean isVisible为false,第一应用程序进程中的ActivityThread.java#mLastProcessState变量大于6,则电子设备确定第一应用程序处于后台状态。
[0141] 本申请实施例中,电子设备判断第一应用程序处于后台状态,则执行下述步骤S703;若电子设备判断第一应用程序未处于后台状态,则执行下述步骤S710。
[0142] S703、电子设备判断第一应用程序,是否为第三方应用程序。
[0143] 一些实施例中,电子设备可在第一应用程序的进程是否包括参数,该参数用于说明第一应用程序为第三方应用程序。若电子设备在第一应用程序的进程包括参数,则判断第一应用程序为第三方应用程序。
[0144] 另一些实施例中,电子设备也可通过确定第一应用程序不是系统服务isSystem,也不是系统应用程序isSystemApp,来确定第一应用程序是否是第三方应用程序。当然,电子设备确定第一应用程序是系统服务,或者是系统应用程序,则可确定第一应用程序不是第三方应用程序。
[0145] 需要说明的是,电子设备可在第一应用程序的进程是否包括参数,该参数可为flag:ApplicationInfo.FLAG_SYSTEM。若电子设备在第一应用程序的进程包括参数flag:ApplicationInfo.FLAG_SYSTEM,则判断第一应用程序为系统应用程序。
[0146] 参数flag:ApplicationInfo.FLAG_SYSTEM,是在系统应用程序安装扫描阶段赋值,且在系统应用程序启动的bindApplication阶段被打包传到了系统应用程序的进程。
[0147] 还需要说明的是,系统服务预先也被配置有变量,电子设备可通过第一应用程序是否配置有用于说明是系统服务的变量,来确定第一应用程序是否为系统服务。
[0148] 本申请实施例中,电子设备判断第一应用程序为第三方应用程序,则执行下述步骤S704;若电子设备判断第一应用程序不是第三方应用程序,则执行下述步骤S710。
[0149] 还需要说明的是,图7展示了步骤S702和步骤S703的一种执行顺序。当然,步骤S702和步骤S703的执行顺序,并不限制于图7所示。一些实施例中,步骤S702和步骤S703可并行执行,或电子设备先执行步骤S703再执行步骤S702。
[0150] S704、电子设备判断是否处于屏蔽区间。
[0151] 电子设备配置有请求VSYNC信号被禁止的屏蔽区间,该屏蔽区间可被开启和关闭。在屏蔽区间开启后,发生在该屏蔽区间内的第三方应用程序对VSYNC信号的请求,会被禁止。
[0152] 屏蔽区间可以理解成是禁止第三方应用程序请求VSYNC信号的一个时间段。一些实施例中,该屏蔽区间可设置为2秒。当然,并不限制于仅设置为2秒。
[0153] 电子设备判断是否处于屏蔽区间,可以理解成,第一应用程序申请请求VSYNC信号的时刻,电子设备是否开启了屏蔽区间。
[0154] 当然,电子设备开启屏蔽区间是有条件要求的。一些实施例中,电子设备判断第一应用程序满足后台绘制的特征识别,则开启屏蔽区间。其中,电子设备判断第一应用程序满足后台绘制的特征识别的方式,可参见下述步骤S707的内容,此处不做过多说明。
[0155] 需要说明的是,电子设备设置屏蔽区间,电子设备开启屏蔽区间之后,第一应用程序申请VSYNC信号的请求,均被禁止。如此,可以保证在第一应用程序为第三方应用程序,处于后台状态,并且,请求VSYNC信号是用于进行后台绘制时,可以实现第一应用程序在屏蔽区间内的多次请求VSYNC信号进行后台绘制,均可以被禁止。
[0156] 通常情况下,第一应用程序请求VSYNC信号进行后台绘制,可能会发生多次。基本上,第一应用程序的每个UI组件都会请求VSYNC信号,并且,第一应用程序可能包括多个UI组件。因此,通过设置屏蔽区间可实现每个UI组件请求VSYNC信号均被禁止。
[0157] 本申请实施例中,电子设备判断处于屏蔽区间,则执行下述步骤S708;若电子设备判断未处于屏蔽区间,则执行下述步骤S705。
[0158] 当然,步骤S704也可以是选择性执行的步骤,在一些实施例中,电子设备判断第一应用程序为第三方应用程序之后,可不执行步骤S704,直接执行步骤S705。
[0159] S705、电子设备判断是否处于后台延时区间外。
[0160] 如前所述,电子设备的第一应用程序配置有标志位boolean isVisible。在第一应用程序切换到后台状态,电子设备延迟一段时间设置标志位boolean isVisible为false;或者,电子设备设置标志位boolean isVisible为false,但该设置为false的标志位boolean isVisible要延迟一段时间,才会发挥作用。延迟的这一段时间,可以称之为后台延时区间。
[0161] 电子设备判断是否处于后台延时区间外,可以理解成电子设备判断第一应用程序申请请求VSYNC信号的时刻,是否处于后台延迟区间之外。示例性的,后台延时区间设置为1秒,电子设备则判断第一应用程序申请请求VSYNC信号的时刻,是否是电子设备设置标志位boolean isVisible为false之后、再经过1秒之后的时刻;或者是电子设备延迟1秒之后设置标志位boolean isVisible为false之后的时刻。
[0162] 本申请实施例中,电子设备判断处于后台延时区间外,则执行下述步骤S706;若电子设备判断未处于后台延时区间外,则执行下述步骤S709。
[0163] 当然,步骤S705也可以是选择性执行的步骤,在一些实施例中,电子设备判断第一应用程序为第三方应用程序,且未处于屏蔽区间之后,电子设备可不执行步骤S705和下述步骤S709,直接执行步骤S706。另一些实施例中,电子设备判断第一应用程序为第三方应用程序之后,可不执行步骤S704、步骤S705和下述步骤S709,直接执行步骤S706。
[0164] S706、电子设备判断第一应用程序是否满足后台绘制的特征识别。
[0165] 第一应用程序进行的后台绘制可包括无效的后台绘制和有效的后台绘制,无效的后台绘制可以理解成是绘制的界面对用户不可见。有效的后台绘制,包括后台弹窗等,绘制出的界面会对用户可见。因此,电子设备判断第一应用程序是否满足后台绘制的特征识别是指,判断第一应用程序是否满足无效的后台绘制的特征识别。
[0166] 若第一应用程序处于后台状态,且一定时间内持续刷帧,则可以认定第一应用程序在进行无效的后台绘制,而不是后台弹窗等有效的后台绘制。基于此,电子设备判断第一应用程序,在一定时间段内完成绘制的次数达到阈值,则认定第一应用程序满足无效的后台绘制的特征识别。示例性的,电子设备可以设定3秒完成绘制的次数达到30次(也可称为3秒内刷新30帧),作为后台绘制的特征识别的判定标准。当然,也可以设定其他判定标准,如3秒内完成绘制的次数达到15次等,并无具体限制。
[0167] 电子设备可利用函数isVsyncFilter()在一定时间段内被调用的累加结果,来检测第一应用程序是否满足后台绘制的特征识别。可以理解的是,第一应用程序刷新一次屏幕,则可调用一次函数isVsyncFilter()。并且,函数isVsyncFilter()被调用一次,则调用结果加1。基于此,电子设备判断3秒完成绘制的次数达到30次,可以理解成:判断函数isVsyncFilter()被调用的累加结果,是否为3秒内累加了30。
[0168] 本申请实施例中,电子设备判断第一应用程序满足后台绘制的特征识别,则执行下述步骤S707;若电子设备判断第一应用程序不满足后台绘制的特征识别,则执行下述步骤S710。
[0169] 图8展示了电子设备判断第一应用程序是否满足后台绘制的特征识别的流程图。
[0170] 如图8所示,电子设备判断处于后台延时区间外,可执行步骤S801、判断是否处于特征时间内。其中,电子设备判断是否处于特征时间内,可以理解成,电子设备判断第一应用程序申请请求VSYNC信号的时刻,是否处于特征时间内,示例性的,该特征时间为3秒。
[0171] 电子设备判断处于特征时间内,电子设备执行步骤S802、判断特征帧数是否达到阈值。一些实施例中,电子设备判断特征帧数是否达到阈值可以理解成,电子设备判断第一应用程序刷新屏幕的次数是否达到阈值,示例性的,该阈值为30次。
[0172] 电子设备判断特征帧数达到阈值,则说明第一应用程序在特征时间内执行特征帧数的刷新达到阈值,则说明第一应用程序在执行无效后台绘制。因此,电子设备认定第一应用程序满足后台绘制的特征识别,可执行图7中的步骤S707。
[0173] 电子设备判断未处于特征时间内,以及判断特征帧数未达到阈值,电子设备执行步骤S803、重置特征帧数计数以及特征时间计时。当然,电子设备还可认定第一应用程序不满足后台绘制的特征识别,可执行图7中的步骤S710。
[0174] 重置特征帧数计数以及特征时间计时,可以理解成电子设备对特征帧数计数以及特征时间计时进行更新。
[0175] 电子设备对特征帧数计数进行更新是指:电子设备针对第一应用程序本次申请请求VSYNC信号而进行绘制的行为,进行特征帧数计数加1,即在上一次特征帧数反映的第一应用程序刷新屏幕的次数加1。
[0176] 电子设备对特征时间计时进行更新是指:电子设备针对第一应用程序本次申请请求VSYNC信号而进行绘制的行为,对特征时间计时延长,即在上一次特征计时反映的第一应用程序刷新屏幕的累积时间的基础上,延迟第一应用程序本次申请请求VSYNC信号的时间与第一应用程序上一次申请请求VSYNC信号的时间的时间间隔。
[0177] 需要说明的是,步骤S801和步骤S802并不限于图8展示的执行顺序,也可以并行执行,也可以是先执行步骤S802、再执行步骤S801。
[0178] 还需要说明的是,图8展示的第一应用程序是否进行后台绘制的检测方法,也可在电子设备检测出第一应用程序处于后台状态之后执行。即:电子设备检测出第一应用程序处于后台状态,则执行步骤S801至步骤S803。
[0179] S707、电子设备禁止第一应用程序请求VSYNC信号、且开启屏蔽区间2秒,屏蔽区间内的第一应用程序申请请求VSYNC信号被禁止。
[0180] 电子设备判断第一应用程序满足后台绘制的特征识别,则说明第一应用程序在执行后台绘制,是无效、浪费电子设备的系统资源,增加电子设备的发热、耗电的后台绘制。因此,电子设备禁止第一应用程序请求VSYNC信号,并且开启屏蔽区间2秒。当然,如前所述,屏蔽区间被开启之后,屏蔽区间内发生的第一应用程序申请请求VSYNC信号的行为被禁止。
[0181] 并且,电子设备开启屏蔽区间2秒是示例性的说明,电子设备并不限制于仅能开启屏蔽区间2秒,可以是其他时间段。
[0182] S708、电子设备禁止第一应用程序请求VSYNC信号。
[0183] 其中,电子设备禁止第一应用程序请求VSYNC信号可以理解成:电子设备禁止第一应用程序向Surface Flinger发送请求VSYNC信号的指令;或者说,电子设备丢弃第一应用程序生成的请求VSYNC信号的指令。
[0184] S709、电子设备切后台延时区间1秒。
[0185] 电子设备判断第一应用程序处于后台状态,且判断未处于后台延时区间外,说明第一应用程序刚被切换为后台状态,因此,需要延迟一段时间。电子设备切后台延时区间1秒可以理解成是,第一应用程序切换到后台状态,延迟1秒之后,电子设备则认定第一应用程序切换到后台状态。
[0186] 需要说明的是,电子设备切后台延时区间1秒的过程中,可执行步骤S710。因为在后天延迟区间1秒内,第一应用程序可以正常请求VSYNC信号。如此,如前述内容,可以避免电子设备因标志位boolean isVisible设置为false,认定第一应用程序为后台状态,以禁止请求VSYNC信号的方式管控第一应用程序的绘制操作,导致显示该第一应用程序的窗口的操作无法实现。
[0187] 电子设备切后台延时区间1秒,可以理解成是示例性的说明,电子设备并不限制于仅能切后台延时区间1秒,可以是其他时间段。
[0188] S710、电子设备控制第一应用程序正常请求VSYNC信号。
[0189] 电子设备控制第一应用程序正常请求VSYNC信号,可以理解成:电子设备控制第一应用程序向Surface Flinger发送请求VSYNC信号的指令。当然,Surface Flinger会按照屏幕刷新率向第一应用程序返回VSYNC信号。
[0190] 还需要说明的是,第一应用程序请求VSYNC信号进行绘制时,mFrameScheduled标志,用于保证VSYNC信号的请求和doFrame的匹配,一次VSYNC信号的请求必须对应一次doFrame。从字面意思上看,mFrameScheduled可以理解成是视频帧已经请求过了,即用于指示VSYNC信号已经请求过了,不要重复请求申请VSYNC信号。
[0191] 当第一应用程序切换到后台,且电子设备判定其满足后台绘制的特征识别的条件,意味着第一应用程序已经成功申请过VSYNC信号(因为后台绘制的特征识别的要求是,第一应用程序在后台状态持续刷帧),因此,mFrameScheduled标志会设置为true。
[0192] 而mFrameScheduled标志设置为true,电子设备则认定该第一应用程序已经请求过VSYNC信号,可不再申请VSYNC信号。因此,当第一应用程序切到前台状态,若mFrameScheduled标志未设置为false,会导致第一应用程序切到前台状态之后,第一应用程序展示于电子设备屏幕的画面定屏。
[0193] 基于此,本申请实施例中,电子设备执行步骤S709之后,需要将mFrameScheduled标志设置为false。即电子设备设置mFrameScheduled标志,能够反映出第一应用程序未成功申请VSYNC信号,以允许第一应用程序再申请请求VSYNC信号。
[0194] 还需要说明的是,第一应用程序执行多个流程时,都可能会涉及申请请求VSYNC信号。若第一应用程序处于后台状态,第一应用程序申请请求VSYNC信号,是来自于第一应用程序执行的scheduleTraversals流程(scheduleTraversals流程可以理解成是请求绘制流程),则会出现SyncBarrier一直存在的问题。SyncBarrier问题会导致第一应用程序从后台状态切回到前台状态时,scheduleTraversals流程中的MSG_DISPATCH_APP_VISIBILITY同步消息被阻塞,无法执行,进而第一应用程序无法申请VSYNC信号,导致第一应用程序显示于电子设备屏幕上的画面出现定屏。
[0195] 其中,SyncBarrier可以理解成Handler同步屏障,是指电子设备把同步消息队列拦住,先处理异步消息,让异步消息不用排队等候处理。等异步消息处理完了,电子设备继续处理同步消息。
[0196] 基于此,本申请实施例提供的绘制操作的执行方法,也可以应用于电子设备的对三方应用程序执行请求绘制流程中。
[0197] 图9展示了本申请实施例提供的一种绘制操作的执行方法。如图9所示,本实施例提供的绘制操作的执行方法,包括下述步骤:
[0198] S901、电子设备的第一应用程序申请请求绘制。
[0199] 其中,第一应用程序如前述内容,为电子设备配置的多个第三方应用程序的任意一个。同样,并不限制于第三方应用程序,也可以为系统应用程序。
[0200] 第一方应用程序被用户启动,当该第一应用程序需要刷新界面或者视图时,第一应用程序会请求绘制,即第一应用程序要执行ViewRootImpl#scheduleTraversals()方法。
[0201] S902、电子设备判断第一应用程序,是否处于后台状态。
[0202] 步骤S902的具体实施方式,可参考前述实施例中步骤S702的内容,此处不再赘述。
[0203] 本申请实施例中,电子设备判断第一应用程序处于后台状态,则执行下述步骤S903;若电子设备判断第一应用程序未处于后台状态,则执行下述步骤S910。
[0204] S903、电子设备判断第一应用程序,是否为第三方应用程序。
[0205] 步骤S903的具体实施方式,可参考前述实施例中步骤S703的内容,此处不再赘述。
[0206] 本申请实施例中,电子设备判断第一应用程序为第三方应用程序,则执行下述步骤S904;若电子设备判断第一应用程序不是第三方应用程序,则执行下述步骤S910。
[0207] 还需要说明的是,图9展示了步骤S902和步骤S903的一种执行顺序。当然,步骤S902和步骤S903的执行顺序,并不限制于图9所示。一些实施例中,步骤S902和步骤S903可并行执行,或电子设备先执行步骤S903再执行步骤S902。
[0208] S904、电子设备判断是否处于屏蔽区间。
[0209] 步骤S904的具体实施方式,可参考前述实施例中步骤S704的内容,此处不再赘述。
[0210] S905、电子设备判断是否处于后台延时区间外。
[0211] 步骤S905的具体实施方式,可参考前述实施例中步骤S705的内容,此处不再赘述。
[0212] S906、电子设备判断第一应用程序是否满足后台绘制的特征识别。
[0213] 步骤S906的具体实施方式,可参考前述实施例中步骤S706的内容,此处不再赘述。
[0214] 需要说明的是,电子设也可采用图8所示的检测应用程序是否进行后台绘制的方法,来判断第一应用程序是否满足后台绘制的特征识别。
[0215] S907、电子设备禁止第一应用程序请求VSYNC信号、且开启屏蔽区间2秒,屏蔽区间内的第一应用程序申请请求VSYNC信号被禁止。
[0216] 步骤S907的具体实施方式,可参考前述实施例中步骤S707的内容,此处不再赘述。
[0217] S908、电子设备禁止第一应用程序请求VSYNC信号。
[0218] 步骤S908的具体实施方式,可参考前述实施例中步骤S708的内容,此处不再赘述。
[0219] S909、电子设备切后台延时区间1秒。
[0220] 步骤S909的具体实施方式,可参考前述实施例中步骤S709的内容,此处不再赘述。
[0221] S910、电子设备控制第一应用程序正常请求VSYNC信号。
[0222] 步骤S910的具体实施方式,可参考前述实施例中步骤S610的内容,此处不再赘述。
[0223] 需要说明的是,如前述图7对应的实施例内容,电子设备执行步骤S908之后,也需要将mFrameScheduled标志设置为false,以允许第一应用程序再申请请求VSYNC信号。
[0224] 结合前述对应图7对应的实施例内容,以及图9对应的实施例内容,可以看出:电子设备的一个应用程序执行绘制操作的执行方法的入口有两个。
[0225] 参见图10,应用程序执行ViewRootImpl#scheduleTraversals()方法,以及执行Choreographer#scheduleVsyncLocked()方法时,电子设备可启动绘制操作的执行方法,即图10展示的isVsyncFilter。
[0226] 针对电子设备中的应用程序执行Choreographer#scheduleVsyncLocked()方法或者ViewRootImpl#scheduleTraversals()方法,而申请请求VSYNC信号的行为,电子设备需要判断该应用程序是否满足下述三个条件。如图10展示的:电子设备判断应用程序不是系统服务,即!isSystem();判断应用程序不是系统应用程序,即!isSystemApp();判断应用程序是不可见的,即!isVisible。
[0227] 再如图10所示,在前述三个条件都满足时,电子设备再通过后台刷新特征检测,来确定应用程序是否在进行无效的后台绘制。
[0228] 进一步结合图11,图11展示了电子设备执行绘制操作的执行方法的流程图。从分析电子设备执行绘制操作的执行方法的原理可以看出,电子设备执行的绘制操作的执行方法如图11所示,可以包括下述步骤:
[0229] S1101、电子设备的应用程序申请请求VSYNC信号或者申请请求绘制。
[0230] 其中,电子设备的应用程序申请请求VSYNC信号,可以理解成在该应用程序需要刷新界面或者视图时,该应用程序的Choreographer向Surface Flinger请求VSYNC信号,即电子设备要执行Choreographer#scheduleVsyncLocked()方法。
[0231] 电子设备的应用程序被用户启动,当该应用程序需要刷新界面或者视图时,该应用程序会请求绘制,即应用程序要执行ViewRootImpl#scheduleTraversals()方法。
[0232] S1102、电子设备判断应用程序是否处于后台状态。
[0233] 步骤S1102的具体实施方式,可参考前述实施例中步骤S702的内容,此处不再赘述。
[0234] S1103、电子设备判断应用程序是否为第三方应用程序。
[0235] 步骤S1103的具体实施方式,可参考前述实施例中步骤S703的内容,此处不再赘述。
[0236] 需要说明的是,本申请实施例中,电子设备要控制第三方应用程序在后台状态时,不进行无效的后台绘制,因此,需要判断应用程序是否为第三方应用程序。
[0237] 当然,电子设备也可控制电子设备所有的应用程序不进行无效的后台绘制,基于此,步骤S1103也可以是选择性执行的步骤。
[0238] S1104、电子设备判断应用程序是否进行无效的后台绘制。
[0239] 其中,电子设备判断应用程序是否进行无效的后台绘制,可指代电子设备判断应用程序是否满足后台绘制的特征识别。其实现过程可如图步骤S706的内容,此处也不再赘述。
[0240] 电子设备通过步骤S1102判断出应用程序处于后台状态,通过步骤S1103判断出应用程序为第三方应用程序,以及通过步骤S1104判断出应用程序进行无效的后台绘制,电子设备则可执行步骤S1105。电子设备执行步骤S1102、步骤S1103以及步骤S1104时,若步骤S1102、步骤S1103以及步骤S1104的三个判断条件中的任意一个条件的判断结果为否,电子设备则可执行步骤S1106。
[0241] 图11展示了步骤S1102、步骤S1103以及步骤S1104的一种执行顺序,当然,步骤S1102、步骤S1103以及步骤S1104不限制于图11展示的执行顺序。步骤S1102、步骤S1103以及步骤S1104可以并行执行,或者采用其他执行顺序。
[0242] S1105、电子设备禁止应用程序请求VSYNC信号。
[0243] 步骤S1105的具体实施方式,可参考前述实施例中步骤S708的内容,此处不再赘述。
[0244] S1106、电子设备控制应用程序正常请求VSYNC信号。
[0245] 步骤S1106的具体实施方式,可参考前述实施例中步骤S710的内容,此处不再赘述。
[0246] 本申请实施例提供的绘制操作的执行方法中,电子设备判断一个应用程序在请求绘制或请求VSYNC信号,则分别通过该应用程序是否处于后台状态,以及判断该应用程序是否在进行无效的后台绘制的方式,来确定该应用程序是否应该禁止申请VSYNC信号。在应用程序处于后台状态,且在进行无效的后台绘制时,电子设备禁止该应用程序请求VSYNC信号,避免该应用程序执行绘制操作去刷新界面浪费电子设备的系统资源,增加电子设备的发热、耗电。
[0247] 本申请另一实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
[0248] 计算机可读存储介质可以是非临时性计算机可读存储介质,例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁带、软盘和光数据存储设备等。
[0249] 本申请另一实施例还提供了一种包含指令的计算机程序产品。当该计算机程序产品在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。