窗口管理方法、装置、设备和存储介质
技术领域
本发明涉及计算机
技术领域
,尤其涉及一种窗口管理方法、装置、设备和存储介质。背景技术
随着计算机技术的发展,为了扩展Linux系统下的应用程序(Aplication,简称APP),丰富应用环境,Linux系统上可支持运行安卓Android系统的应用程序APP。
目前,Linux APP运行时,Linux的窗口管理器会生成对应Linux APP的窗口;安卓APP运行时,安卓的窗口管理器会生成安卓APP对应的窗口。在实现本发明的过程中发明人发现:在安卓应用的窗口的状态需要变更时,安卓的窗口管理器无法获取到准确的窗口状态,从而无法准确调整安卓应用的运行状态。
发明内容
本发明提供一种窗口管理方法、装置、设备和存储介质,用以解决现有技术中窗口状态不准确,从而无法准确调整应用的运行状态的缺陷,实现窗口状态的准确更新。
本发明提供一种窗口管理方法,应用于电子设备,所述电子设备包括:第一操作系统和以容器化方式部署在第一操作系统中的第二操作系统,所述第一操作系统包括第一窗口管理器和第一应用程序APP,第二操作系统包括第二窗口管理器和第二APP,所述方法包括:
在所述第二APP的窗口的窗口状态需要变更的情况下,调整 所述第二APP的窗口在窗口栈中的位置;
根据调整后的位置,确定所述第二APP的窗口的窗口状态;
所述第一窗口管理器向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
根据本发明提供的一种窗口管理方法,所述调整所述第二APP的窗口在窗口栈中的位置,包括:
获取针对所述第二APP的第一窗口状态变更指示;
根据所述第一窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置;或,
获取针对所述第一APP的第二窗口状态变更指示;
根据所述第二窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置。
根据本发明提供的一种窗口管理方法,所述根据所述第一窗口状态变更指示,调整所述第二APP的窗口在窗口栈中的位置,包括:
在所述第一窗口状态变更指示用于指示激活第二APP的窗口的情况下,将所述第二APP的窗口在所述窗口栈中的位置调整为栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
根据所述栈顶位置,确定所述第二APP的窗口的窗口状态为活跃状态。
根据本发明提供的一种窗口管理方法,所述方法还包括:
接收第二窗口管理器发送的第二APP的窗口创建指示,所述第二APP的窗口创建指示携带所述第二APP的窗口属性信息;
将所述第二APP的窗口加入所述窗口栈的栈顶位置;
将所述第二APP的窗口的窗口状态设置为活跃状态,并将所述第二APP的窗口的活跃状态发送给所述第二窗口管理器。
根据本发明提供的一种窗口管理方法,所述根据所述第二窗口状态变更指示,调整所述第二APP的窗口在窗口栈中的位置,包括:
在所述第二窗口状态变更指示用于指示创建窗口或激活窗口的情况下,将所述第二APP的窗口在所述窗口栈中的位置调整为非栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
根据所述非栈顶位置,确定所述第二APP的窗口的窗口状态为暂停状态。
根据本发明提供的一种窗口管理方法,所述将所述第二APP的窗口在所述窗口栈中的位置调整为非栈顶位置之前,还包括:
若所述第二窗口状态变更指示用于指示创建窗口,则将所述第一APP的窗口加入所述窗口栈的栈顶位置,并将所述第一APP的窗口的窗口状态设置为活跃状态;或,
若所述第二窗口状态变更指示用于指示激活窗口,则将所述第一APP的窗口在所述窗口栈中的位置调整为栈顶位置,并将所述第一APP的窗口的窗口状态调整为活跃状态。
根据本发明提供的一种窗口管理方法,所述根据所述第二窗口状态变更指示,调整所述第二APP的窗口在窗口栈中的位置,包括:
在所述第二窗口状态变更指示用于指示销毁窗口的情况下,将所述第一APP的窗口从所述窗口栈中删除,确定所述第二APP的窗口调整后的位置为栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
确定所述第二APP的窗口的窗口状态为激活状态。
根据本发明提供的一种窗口管理方法,所述根据所述第一窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置,包括:
在所述第一窗口状态变更指示用于指示销毁窗口的情况下,将所述第二APP的窗口从所述窗口栈中删除;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
将所述第二APP的窗口的窗口状态调整为销毁状态。
根据本发明提供的一种窗口管理方法,所述方法还包括:
在接收到显示系统窗口的指示的情况下,将所述系统窗口加入所述窗口栈的栈顶位置,并将所述系统窗口的状态设置为活跃状态。
本发明还提供一种窗口管理装置,应用于电子设备,所述电子设备包括:第一操作系统和以容器化方式部署在第一操作系统中的第二操作系统,所述第一操作系统包括第一窗口管理器和第一应用程序APP,第二操作系统包括第二窗口管理器和第二APP,所述装置包括:
处理模块,用于在所述第二APP的窗口的窗口状态需要变更的情况下,调整所述第二APP的窗口在窗口栈中的位置;
所述处理模块,还用于根据调整后的位置,确定所述第二APP的窗口的窗口状态;
发送模块,用于向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述窗口管理方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述窗口管理方法的步骤。
本发明实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述窗口管理方法的步骤。
本发明提供的窗口管理方法、装置、设备和存储介质,通过在所述第二APP的窗口的窗口状态需要变更的情况下,调整第二APP的窗口在窗口栈中的位置;根据调整后的位置,确定所述第二APP的窗口的窗口状态;所述第一窗口管理器向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整所述第二APP的窗口的窗口状态,使得调整后的第二APP的窗口的窗口状态与第一窗口管理器发送的窗口状态一致,保证第二APP的窗口的窗口状态的准确性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的窗口栈示意图之一;
图2是本发明实施例提供的窗口栈示意图之二;
图3是本发明实施例提供的窗口状态转换示意图;
图4是本发明实施例提供的窗口管理方法的流程示意图;
图5是本发明实施例提供的窗口层级示意图;
图6是本发明实施例提供的窗口级别示意图;
图7是本发明实施例提供的窗口管理方法的交互流程示意图之一;
图8是本发明实施例提供的窗口管理方法的交互流程示意图之二;
图9是本发明实施例提供的窗口管理方法的交互流程示意图之三;
图10是本发明实施例提供的窗口管理方法的交互流程示意图之四;
图11是本发明实施例提供的窗口管理方法的交互流程示意图之五;
图12是本发明实施例提供的窗口管理方法的交互流程示意图之六;
图13是本发明实施例提供的窗口管理方法的交互流程示意图之七;
图14是本发明实施例提供的窗口管理方法的交互流程示意图之八;
图15是本发明实施例提供的窗口管理装置的结构示意图;
图16是本发明实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先,对本发明实施例涉及的部分词汇和应用场景进行介绍。
应用程序的窗口任务,即Task,作为一个特定宽度和高度的、应用程序的容器,显示该应用程序。每个应用程序可以创建一个或者多个窗口任务,用于显示不同的内容。本发明实施例中的窗口即指窗口任务。
应用程序的窗口栈,即Stack,是窗口任务的容器。窗口任务以线性排列的方式,按进栈的时间顺序,排列在窗口栈中。
在本发明的实施例中,第二操作系统以容器化的方式运行在第一操作系统中。如本领域技术人员所知,容器化即以Linux内核特性为基础实现的LXC,其充分利用了cgroups和 Namespace特性,隔离进程和资源,使得第二操作系统高效、轻量的实现。
在本发明的实施例中,尽管没有明确描述的,第一操作系统和第二操作系统均为基于Linux Kernel的操作系统,二者可以是相同的,例如第一操作系统和第二操作系统均为Linux OS发行版(如Ubuntu)或均为Android;二者也可以是不同的,例如第一操作系统和第二操作系统中一者为Linux OS发行版,一者为Android(安卓)。
在本发明的实施例中,尽管没有明确描述的,第一操作系统与第二操作系统之间的通讯、通知等可以通过Socket实现或通过系统层面的广播通知Broadcast或通过进程间通讯IPC等实现。
如本领域技术人员所知,Android具有多个衍生版,本发明中所称的Android(安卓)涵盖Google发行的Android OS以及AOSP和基于AOSP的各种衍生系统,如MIUI、EMUI、OneUI等。
如本领域技术人员所知,还存在多种其它的基于Linux Kernel的操作系统,如Tizen等,同样适用于本发明的技术方案。
本发明实施例中的电子设备例如包括:手机、平板电脑、笔记本电脑、计算机等终端设备。
为了说明的方便,以下以第一操作系统为Linux OS、第二操作系统为Android为例说明本发明实施例的实现过程和原理,这仅是示意性的,并不对本发明构成特别限定。
针对上述场景,如果先启动Linux OS中的 APP(应用程序) 1,再启动安卓OS中的APP,则如图1所示,安卓OS中的 APP的窗口在窗口栈的栈顶,处于窗口活跃(Active)状态。如果再启动一个Linux OS中的 APP 2,则窗口状态变为如图2所示,安卓OS中的 APP的窗口被覆盖,其状态原本应该由 Active 转为窗口暂停(Pause)状态。但在安卓OS的窗口管理器并不知道已经存在Linux APP 2的窗口覆盖了安卓 OS中的APP的窗口,造成了安卓OS中的窗口管理器所认知的窗口状态与实际应调整的窗口状态不一致,使得安卓系统无法准确调整安卓OS中的应用的运行状态。
在一实施例中,如图3所示,示出了窗口状态变化情况。
窗口状态一般包括:活跃状态、暂停状态和销毁状态。
例如,针对某个应用,启动应用则该应用的窗口的窗口状态为活跃状态;若点击Home键或启动新应用(即该应用被新应用覆盖),则由活跃状态变更为暂停状态;若通过任务管理器拉升该应用或重入该应用,则由暂停状态变更为活跃状态;若销毁该应用则变更为销毁状态。
本发明实施例的窗口管理方法的技术构思如下:
在APP的窗口的窗口状态需要变更时,确定APP的窗口在窗口栈中的位置,例如需要调整该窗口在窗口栈中的位置,并基于该位置确定APP的窗口的窗口状态;向该APP对应的窗口管理器通知该APP的窗口的窗口状态,使得该APP对应的窗口管理器能够准确调整该APP的运行状态。
下面结合图1-图14以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图4是本发明实施例提供的窗口管理方法一实施例的流程示意图。如图4所示,本实施例提供的方法,应用于电子设备,所述电子设备包括:第一操作系统和以容器化方式部署在第一操作系统中的第二操作系统,第一操作系统包括第一窗口管理器和第一应用程序APP,第二操作系统包括第二窗口管理器和第二APP,所述方法包括:
步骤101、在第二APP的窗口的窗口状态需要变更的情况下,调整第二APP的窗口在窗口栈中的位置。
例如,第二APP的窗口被其他窗口覆盖,或者第二APP的窗口在被覆盖的情况下激活该第二APP,或者销毁该第二APP的窗口等等情况下,即第二APP的窗口的窗口状态需要变更,第一窗口管理器根据针对该第二APP的变更指示(例如用户指示激活该第二APP,或新建该第二APP的窗口,或删除该第二APP的窗口)或者针对其他窗口的指示,调整该第二APP的窗口在窗口栈中的位置,例如是将该窗口的位置调整位于栈顶位置、栈底位置,或,非栈顶和栈底位置等。
可选地,针对其他窗口的指示,例如针对其他第一APP的窗口的指示,或针对系统窗口的指示,该指示会影响当前第二APP的窗口的窗口状态,例如,指示激活第一APP的窗口,则会覆盖该第二APP的窗口,使得第二APP的窗口的窗口状态需要变更。
窗口管理器一般通过创建窗口栈来管理应用的窗口,窗口在窗口栈的层级,决定于该窗口的级别,如图5所示,上层的窗口的级别一般不小于下层的窗口的级别。
其中,步骤101中的窗口栈为第一窗口管理器管理的窗口栈。
窗口级别一般分三类:应用程序级窗口、子窗口级别和系统级窗口。如图6所示,窗口级别从高到低依次为系统级窗口、子窗口、应用程序级窗口。
示例性的,应用程序级窗口,如桌面窗口,一般为层级最低的窗口,处于窗口栈的底端,其他级别窗口都可以覆盖它。
子窗口,如一个应用程序弹出的对话框窗口。
系统级窗口,如显示信号强度或时间的状态条或系统警告窗口,处于窗口栈相对高的位置,一般的应用程序级窗口不可覆盖这类窗口。
高级别窗口会覆盖低级别窗口,即在窗口栈中,高级别窗口处于低级别的上层,例如子窗口显示在应用程序级窗口的上层。
对于同级别窗口,例如先显示应用程序1的窗口,再显示应用程序2的窗口,则应用程序2的窗口处于应用程序1的窗口的上层。
步骤102、根据第二APP的窗口在窗口栈中的位置,确定第二APP的窗口的窗口状态。
具体的,在窗口栈中不同的位置,可能对应不同的窗口状态,例如,如果某个窗口处于窗口栈中的栈顶位置,则该窗口的窗口状态为活跃状态,如果某个窗口处于窗口栈中的非栈顶位置,例如被其他窗口覆盖,则该窗口的窗口状态为暂停状态。
第一窗口管理器根据该第二APP的窗口在窗口栈中的位置,确定第二APP的窗口的窗口状态。例如,若该第二APP的窗口在窗口栈中的位置为栈顶位置,则该第二APP的窗口的窗口状态为活跃状态,若该第二APP的窗口在窗口栈中的位置为非栈顶位置,则该第二APP的窗口的窗口状态为暂停状态,若该第二APP的窗口从窗口栈中删除,则该第二APP的窗口的窗口状态为销毁状态。
步骤103、第一窗口管理器向第二窗口管理器发送第二APP的窗口的窗口状态,窗口状态用于第二窗口管理器调整第二APP的窗口的窗口状态。
具体的,第一窗口管理器向第二窗口管理器发送第二APP的窗口的窗口状态,第二窗口管理器根据第二APP的窗口的窗口状态调整第二APP的窗口,使得调整后的第二APP的窗口的窗口状态与第一窗口管理器发送的窗口状态一致。
本发明实施例中,第一窗口管理器负责管理第一操作系统和第二操作系统内的应用程序的窗口的状态,通过窗口栈对各个应用程序的窗口进行管理。
在出现Linux OS中的APP和安卓OS中的APP同时运行时,安卓系统无法准确分辨安卓OS中的APP的窗口状态,本发明实施例的方法通过Linux OS的窗口管理器与安卓OS的窗口管理器之间的消息交互,以及利用窗口栈对窗口的管理,实现安卓OS中的APP在整个生命周期内窗口状态的准确性。
示例性的,如图7所示,示出了窗口状态调整的交互流程,图7中第一窗口管理器例如为Linux OS的窗口管理器,第二窗口管理器例如为安卓OS的窗口管理器,第一APP为Linux OS中的 APP,第二APP为安卓OS中的APP。
该方法包括如下步骤:
步骤1a、第一窗口管理器接收第二窗口管理器发送的针对第二APP的第一窗口状态变更指示;
在其他实施例中,第一窗口管理也可以接收第一操作系统的任务管理器发送的针对第二APP的第一窗口状态变更指示;该指示可以是基于用户的输入生成的;
步骤2a、第一窗口管理器调整窗口栈中该第二APP的窗口位置为栈顶位置;
步骤3a、第一窗口管理器将该第二APP的窗口的窗口状态调整为活跃状态;
步骤4a、第一窗口管理器向第二窗口管理器发送调整后的窗口状态,即活跃状态;
步骤5a、第二窗口管理器根据第一窗口管理器发送的活跃状态,调整该第二APP的窗口的状态,使其处于活跃状态。
例如,通知第二APP激活该第二APP的窗口。
本实施例的方法,通过在所述第二APP的窗口的窗口状态需要变更的情况下,调整第二APP的窗口在窗口栈中的位置;根据调整后的位置,确定所述第二APP的窗口的窗口状态;向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整所述第二APP的窗口的窗口状态,使得调整后的第二APP的窗口的窗口状态与第一窗口管理器发送的窗口状态一致,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,步骤102可以通过如下方式实现:
一种实现方式:
获取针对第二APP的窗口的第一窗口状态变更指示;
根据第一窗口状态变更指示,调整第二APP的窗口在窗口栈中的位置。
可选地,获取针对第二APP的第一窗口状态变更指示,可以通过如下几种方式实现:
接收第一操作系统的任务管理器发送的第一窗口状态变更指示;或,
接收第二窗口管理器发送的第一窗口状态变更指示。
其中,接收任务管理器发送的第一窗口状态变更指示,例如任务管理器接收到用户的输入,该输入用于指示激活该第二APP的窗口,或销毁该第二APP的窗口;
接收第二窗口管理器发送的第一窗口状态变更指示,例如,指示销毁该第二APP的窗口,从窗口栈中删除该第二APP的窗口。
第一窗口状态变更指示,可以携带窗口属性信息,窗口属性信息例如包括以下至少一项:窗口位置、窗口大小或窗口层级等。
根据第一窗口状态变更指示,确定该第二APP的窗口在窗口栈中的位置,例如,若第一窗口状态变更指示用于指示激活第二APP的窗口,则将该第二APP的窗口在窗口栈中的位置调整为栈顶位置。
上述实施方式中,根据针对第二APP的窗口的窗口状态变更指示,调整第二APP的窗口在窗口栈中的位置,使得能够及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
另一种实现方式:
获取针对所述第一APP的第二窗口状态变更指示;
根据所述第二窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置。
可选地,获取针对第一APP的第二窗口状态变更指示,例如接收第一操作系统的任务管理器发送的第二窗口状态变更指示。
可选地,在其他实施例中,还可以接收第二窗口管理器发送的这对其他APP或其他窗口的窗口状态变更指示。
其中,接收任务管理器发送的第二窗口状态变更指示,例如任务管理器接收到用户的输入,该输入用于指示激活该第一APP的窗口,或创建第一APP的窗口(此时第二APP的窗口会被覆盖,第二APP的窗口的窗口状态也变更),或销毁该第一APP的窗口。
第二窗口状态变更指示,可以携带窗口属性信息,窗口属性信息例如包括以下至少一项:窗口位置、窗口大小或窗口层级等。
根据第二窗口状态变更指示,确定该第二APP的窗口在窗口栈中的位置,例如,若第二窗口状态变更指示用于指示激活第一APP的窗口,假设此时第二APP的窗口为激活状态,则将该第二APP的窗口在窗口栈中的位置调整为非栈顶位置,即将第一APP的窗口的位置与该第二APP的窗口的位置进行交换,使得第一APP的窗口处于栈顶位置,第二APP的窗口的窗口状态调整为暂停状态。
例如,若第二窗口状态变更指示用于指示销毁第一APP的窗口,假设此时第一APP的窗口位于窗口栈中的栈顶位置,第二APP的窗口位于该栈顶位置的下一层,则将第一APP的窗口从窗口栈中删除,从而将该第二APP的窗口在窗口栈中的位置调整为栈顶位置,此时第二APP的窗口的窗口状态调整为激活状态。
上述实施方式中,根据针对第一APP的窗口的窗口状态变更指示,调整第二APP的窗口在窗口栈中的位置,使得能够及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,步骤101具体包括:
在第一窗口状态变更指示用于指示激活第二APP的窗口的情况下,将所述第二APP的窗口在所述窗口栈中的位置调整为栈顶位置;
步骤102包括:根据所述栈顶位置,确定所述第二APP的窗口的窗口状态为活跃状态。
具体的,在第一窗口状态变更指示用于指示激活窗口的情况下,即需要激活该第二APP的窗口,此时第二APP的窗口在窗口栈中的位置为非栈顶位置(窗口状态为暂停状态),即被其他窗口覆盖,则将第二APP的窗口在窗口栈中的位置调整为栈顶位置,将窗口状态由暂停状态调整为活跃状态,将该活跃状态发送给第二窗口管理器,第二窗口管理器根据该活跃状态调整第二APP的窗口,使得调整后的第二APP的窗口的窗口状态与第一窗口管理器发送的窗口状态一致。
示例性的,如图8所示,该方法包括如下步骤:
步骤1b、第一窗口管理器接收任务管理器发送的激活指示;该激活指示是基于用户点击第二APP的窗口生成的;
步骤2 b、第一窗口管理器确定窗口栈中该第二APP的窗口的位置;
步骤3 b、第一窗口管理器将该第二APP的窗口的置于栈顶位置;
步骤4 b、第一窗口管理器将该第二APP的窗口的窗口状态调整为活跃状态,并向第二窗口管理器通知该活跃状态;
步骤5 b、第二窗口管理器激活该第二APP的窗口。
上述实施方式中,在指示激活第二APP的窗口的情况下,将第二APP的窗口在窗口栈中的位置调整为栈顶位置;并确定第二APP的窗口的窗口状态为活跃状态,使得能够及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,该窗口管理方法还包括
接收第二窗口管理器发送的第二APP的窗口创建指示,第二APP的窗口创建指示携带所述第二APP的窗口属性信息;
将第二APP的窗口加入所述窗口栈的栈顶位置;
将第二APP的窗口的窗口状态设置为活跃状态,并将第二APP的窗口的活跃状态发送给第二窗口管理器。
具体的,窗口创建指示,用于指示创建某个第二APP的窗口,还可以携带该第二APP的窗口的窗口属性信息。
将第二APP的窗口加入窗口栈的栈顶位置,对应的窗口状态设置为活跃状态,并将该第二APP的窗口的活跃状态发送给所述第二窗口管理器,使得第二窗口管理器通知第二APP创建对应的窗口。
示例性的,如图9所示,示出了第二APP的窗口创建过程,该方法包括如下步骤:
步骤1c、第二窗口管理器接收第二APP的窗口创建指示,该窗口创建指示是基于用户的第一输入生成的;所述第一输入用于指示创建第二APP的窗口;
步骤2c、第一窗口管理器接收第二窗口管理器发送的第二APP的窗口创建指示;
步骤3c、第一窗口管理器将第二APP的窗口加入窗口栈中栈顶位置;
步骤4c、第一窗口管理器将第二APP的窗口的窗口状态设置为活跃状态;
步骤5c、第一窗口管理器向第二窗口管理器发送该第二APP的窗口的活跃状态;
步骤6c、第二窗口管理器通知该第二APP创建窗口。
上述实施方式中,在指示创建第二APP的窗口的情况下,将第二APP的窗口加入窗口栈的栈顶位置;并将第二APP的窗口的窗口状态设置为活跃状态,进而将第二APP的窗口的活跃状态发送给第二窗口管理器,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,步骤101具体包括:在第二窗口状态变更指示用于指示创建窗口或激活窗口的情况下,将第二APP的窗口在窗口栈中的位置调整为非栈顶位置;
步骤102包括:
根据非栈顶位置,确定第二APP的窗口的窗口状态为暂停状态。
具体的,第一窗口状态变更指示可以指示激活或创建其他APP的窗口,还可以指示激活或创建系统窗口。此时可能会覆盖当前第二APP的窗口。
若第二APP的窗口在窗口栈中的当前位置为栈顶位置(对应活跃状态),则将第二APP的窗口在窗口栈中的位置调整为非栈顶位置,并将第二APP的窗口的窗口状态调整为暂停状态。
在一实施例中,步骤“将第二APP的窗口在所述窗口栈中的位置调整为非栈顶位置”之前,还可以执行如下几种方案:
方案一
若第二窗口状态变更指示用于指示创建第一APP的窗口,则将第一APP的窗口加入窗口栈的栈顶位置,并将第一APP的窗口的窗口状态设置为活跃状态;
具体的,假设当前第二APP的窗口为活跃状态,在窗口栈中的位置为栈顶位置;
若接收到创建第一APP的窗口的指示,则将该第一APP的窗口加入窗口栈的栈顶位置,并将第一APP的窗口的窗口状态设置为活跃状态,此时第二APP的窗口位置变更为非栈顶位置,因此将第二APP的窗口的窗口状态调整为暂停状态。
示例性的,如图10所示,示出了第一APP的窗口创建过程,此时第二APP的窗口已创建,第一APP的窗口会覆盖第二APP的窗口,在图9的基础上,该方法包括如下步骤:
步骤1d、第一窗口管理器接收第一APP的窗口创建指示;该窗口窗口指示可以是基于用户的输入生成的;
步骤2d、第一窗口管理器将第一APP的窗口加入窗口栈中栈顶位置;
步骤3d、第一窗口管理器将第一APP的窗口的窗口状态设置为活跃状态,并将第二APP的窗口的窗口状态调整为暂停状态;
步骤4d、第一窗口管理器向第二窗口管理器通知该第二APP的窗口的暂停状态;
步骤5d、第二窗口管理器调整该第二APP的窗口的窗口状态,使其处于暂停状态。
方案二
若第二窗口状态变更指示用于指示激活第一APP的窗口,则将所述第一APP的窗口在所述窗口栈中的位置调整为栈顶位置,并将所述第一APP的窗口的窗口状态调整为活跃状态。
具体的,假设当前第二APP的窗口为活跃状态,在窗口栈中的位置为栈顶位置;
若接收到激活第一APP的窗口的指示,则将该第一APP的窗口的位置调整为栈顶位置,并将第一APP的窗口的窗口状态设置为活跃状态,此时第二APP的窗口位置变更为非栈顶位置,因此将第二APP的窗口的窗口状态调整为暂停状态。
示例性的,如图11所示,示出了第一APP的窗口激活过程,此时第二APP的窗口已创建,被其他窗口覆盖,例如被第二APP的窗口覆盖,第二APP的窗口处于激活状态,该方法包括如下步骤:
步骤1e、第一窗口管理器接收任务管理器发送的第一APP的激活指示;该激活指示例如是基于用户点击第一APP的窗口生成的;
步骤2 e、第一窗口管理器确定窗口栈中该第一APP的窗口的位置;
步骤3 e、第一窗口管理器将该第一APP的窗口的置于栈顶位置;
步骤4 e、第一窗口管理器将该第一APP的窗口的窗口状态调整为活跃状态;
步骤5 e、第一窗口管理器激活该第一APP的窗口;
步骤6 e、第一窗口管理器将该第二APP的窗口的窗口状态调整为暂停状态,并向第二窗口管理器通知该暂停状态;
步骤7e、第二窗口管理器调整该第二APP的窗口的窗口状态,使其处于暂停状态。
上述实施方式中,在指示创建或激活第一APP的窗口的情况下,将第二APP的窗口调整为非栈顶位置;并将第二APP的窗口的窗口状态设置为暂停状态,进而将第二APP的窗口的暂停状态发送给第二窗口管理器,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,步骤101具体可以包括:
在第二窗口状态变更指示用于指示销毁第一APP的窗口的情况下,将第一APP的窗口从窗口栈中删除,确定第二APP的窗口调整后的位置为栈顶位置;
步骤102包括:
确定第二APP的窗口的窗口状态为激活状态。
具体的,假设当前第二APP的窗口为暂停状态,在窗口栈中的位置为栈顶位置的下一层;
若接收到销毁第一APP的窗口的指示,则将该第一APP的窗口从窗口栈中删除,并将第一APP的窗口的窗口状态设置为销毁状态,此时第二APP的窗口位置变更为栈顶位置,因此将第二APP的窗口的窗口状态调整为活跃状态。
示例性的,如图12所示,示出了第一APP的窗口销毁过程,此时第二APP的窗口已创建,被该第一APP的窗口覆盖,第二APP的窗口处于暂停状态,该方法包括如下步骤:
步骤1f、第一窗口管理器接收来自任务管理器的第一APP的销毁指示,该销毁指示例如是基于用户的输入生成的;
步骤2f、第一窗口管理器将该第一APP的窗口从窗口栈中删除,并销毁该窗口;
步骤3f、第一窗口管理器确定该第二APP的窗口位置为栈顶位置;
步骤4f、第一窗口管理器将第二APP的窗口的窗口状态调整为活跃状态;
步骤5f、第一窗口管理器向第二窗口管理器发送该第二APP的窗口的活跃状态;
步骤6f、第一窗口管理器激活该第二APP的窗口。
上述实施方式中,在指示销毁第一APP的窗口的情况下,将第二APP的窗口调整为栈顶位置;并将第二APP的窗口的窗口状态设置为活跃状态,进而将第二APP的窗口的活跃状态发送给第二窗口管理器,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,步骤101具体包括:
在第一窗口状态变更指示用于指示删除窗口的情况下,将第二APP的窗口从窗口栈中删除;
步骤102包括:
将第二APP的窗口的窗口状态调整为销毁状态。
具体的,若用户想要关闭第二APP,例如用户通过第一操作系统的任务管理器向第一窗口管理器发送销毁指示,则在窗口栈中删除该第二APP的窗口,并将其窗口状态调整为销毁状态。
示例性的,如图13所示,示出了第二APP的窗口销毁过程,此时第二APP的窗口已创建,第二APP的窗口处于暂停状态或活跃状态,该方法包括如下步骤:
步骤1g、第一窗口管理器接收来自任务管理器的第二APP的销毁指示,该销毁指示例如是基于用户的输入生成的;
步骤2g、第一窗口管理器将该第一APP的窗口从窗口栈中删除;
步骤3g、第一窗口管理器将第二APP的窗口的窗口状态调整为销毁状态;
步骤4g、第一窗口管理器向第二窗口管理器发送该第二APP的窗口的销毁状态;
步骤5g、第一窗口管理器销毁该第二APP的窗口。
上述实施方式中,在指示销毁第二APP的窗口的情况下,将第二APP的窗口从窗口栈中删除;并将第二APP的窗口的窗口状态设置为销毁状态,进而将第二APP的窗口的销毁状态发送给第二窗口管理器,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
在一实施例中,该方法还包括:
在接收到显示系统窗口的指示的情况下,将系统窗口加入窗口栈的栈顶位置,并将系统窗口的状态设置为活跃状态。
具体的,假设此时第二APP的窗口为活跃状态,处于窗口栈的栈顶位置,系统窗口的级别高于应用程序APP的窗口,在接收到显示系统窗口的指示的情况下,将系统窗口加入窗口栈的栈顶位置,将系统窗口的窗口状态设置为活跃状态,此时第二APP的窗口位于非栈顶位置,调整第二APP的窗口的窗口状态为暂停状态。
示例性的,如图14所示,安卓系统弹出系统对话框,如,安卓APP发生应用无响应(Application No Response,ANR) 错误,安卓系统会显示ANR系统窗口,该ANR系统窗口的层级在 Linux 端的层级映射关系中也处于系统窗口层级,所以该ANR系统窗口将显示在所有应用的上层。
该方法包括如下步骤:
步骤1h、第二窗口管理器检测到第二APP出现ANR错误;
步骤2h、第二窗口管理器处理ANR;
步骤3h、第二窗口管理器销毁第二APP的窗口;
步骤4h、第二窗口管理器向第一窗口管理器发送第二APP的窗口的销毁指示,并指示显示ANR系统窗口;
步骤5h、第一窗口管理器将该第二APP的窗口从窗口栈中删除,并调整其窗口状态为销毁状态;
步骤6h、第一窗口管理器将该ANR系统窗口置于窗口栈的栈顶位置,并将其窗口状态设置为活跃状态。
上述实施方式中,在指示显示系统窗口的情况下,将系统窗口加入窗口栈的栈顶位置,并将系统窗口的状态设置为活跃状态,并将第二APP的窗口调整为非栈顶位置;并将第二APP的窗口的窗口状态设置为暂停状态,进而将第二APP的窗口的暂停状态发送给第二窗口管理器,使得第二窗口管理器可以及时获知到第二APP的窗口的窗口状态,并及时调整第二APP的窗口的窗口状态,保证第二APP的窗口的窗口状态的准确性。
下面对本发明提供的窗口管理装置进行描述,下文描述的窗口管理装置与上文描述的窗口管理方法可相互对应参照。
图15是本发明提供的窗口管理装置的结构示意图。本实施例提供的窗口管理装置,应用于电子设备,所述电子设备包括:第一操作系统和以容器化方式部署在第一操作系统中的第二操作系统,第一操作系统包括第一窗口管理器和第一应用程序APP,第二操作系统包括第二窗口管理器和第二APP,如图15所示,所述装置包括:
处理模块210,用于在所述第二APP的窗口的窗口状态需要变更的情况下,调整所述第二APP的窗口在窗口栈中的位置;
所述处理模块210,还用于根据调整后的位置,确定所述第二APP的窗口的窗口状态;
发送模块220,用于向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
可选地,所述处理模块210,具体用于:
获取针对所述第二APP的第一窗口状态变更指示;
根据所述第一窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置;或,
获取针对所述第一APP的第二窗口状态变更指示;
根据所述第二窗口状态变更指示,调整所述第二APP的窗口在所述窗口栈中的位置。
可选地,所述处理模块210,具体用于:
在所述第一窗口状态变更指示用于指示激活第二APP的窗口的情况下,将所述第二APP的窗口在所述窗口栈中的位置调整为栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
根据所述栈顶位置,确定所述第二APP的窗口的窗口状态为活跃状态。
可选地,所述接收模块220还用于:
接收第二窗口管理器发送的第二APP的窗口创建指示,所述第二APP的窗口创建指示携带所述第二APP的窗口属性信息;
所述处理模块210还用于:将所述第二APP的窗口加入所述窗口栈的栈顶位置;
将所述第二APP的窗口的窗口状态设置为活跃状态,并将所述第二APP的窗口的活跃状态发送给所述第二窗口管理器。
可选地,所述处理模块210具体用于:
在所述第二窗口状态变更指示用于指示创建窗口或激活窗口的情况下,将所述第二APP的窗口在所述窗口栈中的位置调整为非栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
根据所述非栈顶位置,确定所述第二APP的窗口的窗口状态为暂停状态。
可选地,所述处理模块210还用于:
若所述第二窗口状态变更指示用于指示创建窗口,则将所述第一APP的窗口加入所述窗口栈的栈顶位置,并将所述第一APP的窗口的窗口状态设置为活跃状态;或,
若所述第二窗口状态变更指示用于指示激活窗口,则将所述第一APP的窗口在所述窗口栈中的位置调整为栈顶位置,并将所述第一APP的窗口的窗口状态调整为活跃状态。
可选地,所述处理模块210具体用于:
在所述第二窗口状态变更指示用于指示销毁窗口的情况下,将所述第一APP的窗口从所述窗口栈中删除,确定所述第二APP的窗口调整后的位置为栈顶位置;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
确定所述第二APP的窗口的窗口状态为激活状态。
可选地,所述处理模块210具体用于:
在所述第一窗口状态变更指示用于指示销毁窗口的情况下,将所述第二APP的窗口从所述窗口栈中删除;
所述根据调整后的位置,确定所述第二APP的窗口的窗口状态,包括:
将所述第二APP的窗口的窗口状态调整为销毁状态。
可选地,所述处理模块210还用于:
在接收到显示系统窗口的指示的情况下,将所述系统窗口加入所述窗口栈的栈顶位置,并将所述系统窗口的状态设置为活跃状态。
本发明实施例的装置,其用于执行前述任一方法实施例中的方法,其实现原理和技术效果类似,此次不再赘述。
图16示例了一种电子设备的实体结构示意图,如图16所示,该电子设备可以包括:处理器(processor)810、通信接口(Communications Interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行窗口管理方法,该方法包括:在所述第二APP的窗口的窗口状态需要变更的情况下,调整所述第二APP的窗口在窗口栈中的位置;根据调整后的位置,确定所述第二APP的窗口的窗口状态;第一窗口管理器向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的窗口管理方法,该方法包括:在所述第二APP的窗口的窗口状态需要变更的情况下,调整所述第二APP的窗口在窗口栈中的位置;根据调整后的位置,确定所述第二APP的窗口的窗口状态;第一窗口管理器向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的窗口管理方法,该方法包括:在所述第二APP的窗口的窗口状态需要变更的情况下,调整所述第二APP的窗口在窗口栈中的位置;根据调整后的位置,确定所述第二APP的窗口的窗口状态;第一窗口管理器向所述第二窗口管理器发送所述第二APP的窗口的窗口状态,所述窗口状态用于所述第二窗口管理器调整所述第二APP的窗口的窗口状态。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种虚拟机迁移方法及相关设备