发明内容
本发明实施例提供一种应用于Android平台的显示窗口的方法和装置,用以实现启动Activity,以使该Activity显示窗口。
本发明实施例提供的了一种应用于Android平台的显示窗口的方法,该方法包括:
在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;
在确定该Activity的启动方式为窗口方式后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口。
采用本方案,能够实现启动Activity,使得该Activity显示窗口的目的。
较佳地,在确定该Activity的启动方式为窗口方式之后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,该方法还包括:
若确定该Activity启动时使用已打开的窗口,则确定该已打开的窗口对应的窗口标识,根据确定的窗口标识确定该已打开的窗口对应的窗口对象,获取该确定的窗口对象中记录的第二窗口属性数据,其中,所述窗口、窗口标识与窗口对象一一对应;
所述设置用于启动该Activity的消息传递对象中的第一窗口属性数据,包括:
根据获取的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
该优选方案实现了当启动Activity时,使用已打开的窗口显示进行显示。
较佳地,在确定该Activity的启动方式为窗口方式之后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,该方法还包括:
若确定该Activity启动时要打开新窗口,则为要打开的新窗口分配窗口标识,生成该新窗口对应的窗口对象,在该生成的窗口对象中记录分配的窗口标识,并设置该生成的窗口对象中的第二窗口属性数据,其中所述窗口、窗口标识与窗口对象一一对应;
所述设置用于启动该Activity的消息传递对象中的第一窗口属性数据,包括:
根据该生成的窗口对象中的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
该优选方案实现了在启动Activity,打开新窗口进行显示。
较佳地,在确定该Activity启动时是否使用已打开的窗口之后,该方法还包括:将所述窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
该方法还包括:在需要关闭Activity,且该要关闭的Activity是以窗口方式启动时,判断是否存在该要关闭的Activity的窗口关联Activity;若不存在该要关闭的Activity的窗口关联Activity,则在关闭该要关闭的Activity之后,删除该要关闭的Activity的关联窗口对象;
其中,该要关闭的Activity的窗口关联Activity为:已打开的Activity中,记录的窗口标识与该要关闭的Activity记录的窗口标识相同的其他Activity;该要关闭的Activity的关联窗口对象为:记录的窗口标识与该要关闭的Activity记录的窗口标识相同的窗口对象。
采用该优选方案,实现窗口管理,当不存在窗口中不存在Activity时,则需要删除窗口对象,保证数据准确。
较佳地,在判断是否存在该要关闭的Activity的窗口关联Activity之后,该方法还包括:
若存在该要关闭的Activity的窗口关联Activity,且该要关闭的Activity为正在显示的Activity,则在关闭该要关闭的Activity后,将该要关闭的Activity的窗口关联Activity中需要显示的Activity置为可视。
该优选方案实现了关闭窗口中的一个Activity时,显示该窗口的其他Activity。
较佳地,在确定该Activity启动时是否使用已打开的窗口之后,该方法还包括:将所述窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
该方法还包括:接收窗口修改指令,获取该指令中的指令类型、窗口属性参数和窗口标识;从记录了该获取的窗口标识的Activity中,确定需要修改的窗口中需要显示的各Activity;将获取的指令类型、窗口属性参数分别发给所述确定的需要显示的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口。
该优选方案实现了对窗口的修改。
较佳地,在获取该指令中的指令类型、窗口属性参数和窗口标识之后,还包括:
根据获取的指令类型和窗口属性参数,修改特定窗口对象中记录的第二窗口属性数据;
其中,所述特定窗口对象为:记录了所述获取的窗口标识的窗口对象。
该优选方案保证了窗口对象中的第二窗口属性数据与窗口显示方式的一致性。
本发明实施例还提供了一种应用于Android平台的显示窗口的装置,该装置包括:
判断模块,用于在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;
数据处理模块,用于在所述判断模块确定该Activity的启动方式为窗口方式后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口。
采用本方案,能够实现启动Activity,使得该Activity显示窗口的目的。
较佳地,所述判断模块还用于:在确定该Activity的启动方式为窗口方式之后,所述数据处理模块设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该Activity启动时使用已打开的窗口;
所述数据处理模块还用于:若所述判断模块确定该Activity启动时使用已打开的窗口,则设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该已打开的窗口对应的窗口标识,根据确定的窗口标识确定该已打开的窗口对应的窗口对象,获取该确定的窗口对象中记录的第二窗口属性数据,其中所述窗口、窗口标识与窗口对象一一对应;
所述数据处理模块具体用于:根据获取的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
该优选方案实现了当启动Activity时,使用已打开的窗口显示进行显示。
较佳地,所述判断模块还用于:在确定该Activity的启动方式为窗口方式之后,所述数据处理模块设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该Activity启动时要打开新窗口;
所述数据处理模块还用于:若所述判断模块确定该Activity启动时要打开新窗口,则为该要打开的新窗口分配窗口标识,生成该新窗口对应的窗口对象,在该生成的窗口对象中记录分配的窗口标识,并设置该生成的窗口对象中的第二窗口属性数据,其中所述窗口、窗口标识与窗口对象一一对应;
所述数据处理模块具体用于:根据该生成的窗口对象中的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
该优选方案实现了在启动Activity,打开新窗口进行显示。
较佳地,所述数据处理模块还用于:在所述判断模块确定该Activity启动时是否使用已打开的窗口之后,将所述窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
所述装置还包括:指令接收模块,用于接收窗口修改指令,并获取该指令中的指令类型、窗口属性参数和窗口标识;
所述数据处理模块还用于:从记录了所述指令接收模块获取的窗口标识的Activity中,确定需要修改的窗口中需要显示的各Activity;并将获取的指令类型、窗口属性参数分别发给所述确定的需要显示的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口。
该优选方案实现了对窗口的修改。
具体实施方式
本发明实施例提供一种应用于Android平台的显示窗口的方法和装置。该方法中,在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;在确定该Activity的启动方式为窗口方式后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口。采用本发明实施例提供的方法,能够实现启动Activity,使得该Activity显示窗口的目的。
在本发明实施例中,以Android平台的处理为例进行说明,但并不意味着本发明的方法仅适用于Android平台。实际上,对于任何用户终端平台,只要能设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口,则本发明实施例提供的方法也适用于该类用户终端平台。
本发明实施例中,由Activity管理层对各Activity进行管理。Activity管理层包括:Activity管理层中的上层和Activity管理层中的下层。Activity管理层中的上层向各应用提供接口,Activity管理层中的下层具体实现对各Activity的管理。需要说明的是,这里虽然提及Activity管理层中的上层和Activity管理层中的下层,但不意味着Activity管理层仅包括Activity管理层中的上层和Activity管理层中的下层,其还可包括用于实现其他功能的层或模块,只是与本发明实施例提供的方法无关,所以这里无需提及。
图2为本发明实施例提供的应用于Android平台的显示窗口方法的过程示意图。如图2所示,该方法包括:
S201:在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;
S202:若步骤S201中,确定该Activity的启动方式为窗口方式,则设置用于启动该Activity的消息传递对象(intent)中的第一窗口属性数据(winData1),以使该Activity根据winData1显示窗口。
可选地,步骤S201中,当Activity管理层中的下层收到Activity管理层中的上层发给Activity的,用于启动该Activity的intent,则认为需要启动该Activity。
可选地,Activity管理层中的下层根据收到的用于启动该Activity的intent中的窗口标识winId,确定该Activity的启动方式是否为窗口方式。比如,当winId=0时,确定启动方式为全屏方式,否则确定启动方式为窗口方式;
或者,根据intent中是否存在winId来确定Activity的启动方式,若intent中存在winId,则确定对应的Activity的启动方式为窗口方式,否则确定对应的Activity的启动方式为全屏方式。
可选地,winData1包括:窗口显示位置和大小相关的数据。
如表1中所示,winData1可包括:窗口宽度(multiwinWidth)、窗口高度(multiwinHeight)、窗口位置左边位置(multiwinLeft)、窗口位置上边位置(multiwinTop)和是否最大化(multiwinMaximize),其中,是否最大化表示是否要最大化窗口。
表1、第一窗口属性数据winData1
属性值 |
属性名称 |
值类型 |
窗口位置左边位置 |
multiwinLeft |
整型(Int) |
窗口位置上边位置 |
multiwinTop |
Int |
窗口宽度 |
multiwinWidth |
Int |
窗口高度 |
multiwinHeight |
Int |
是否最大化 |
multiwinMaximize |
布尔型(boolean) |
需要说明的是,winData1不限于表1中所列出的,只要能够使Activity根据这些数据确定如何显示窗口即可,比如,winData1可包括:窗口位置左边位置、窗口位置右边位置、窗口位置上边位置和窗口位置下边位置,通过这些数据来确定窗口的具体位置和窗口大小。
可选地,若步骤S201中确定该Activity的启动方式为窗口方式,则在步骤S201之后,步骤S202之前,该方法还包括:
若确定该Activity启动时要打开新窗口,则为要打开的新窗口分配winId,生成该新窗口对应的窗口对象(multiWinInfo),在该生成的multiWinInfo中记录分配的winId,并设置该生成的multiWinInfo中的第二窗口属性数据(winData2),其中,窗口、winId与multiWinInfo一一对应;
其中,步骤S201中设置用于启动该Activity的消息传递对象中的winData1,包括:根据该生成的multiWinInfo中的winData2设置用于启动该Activity的inent中的winData1。
可选地,Activity管理层的下层可根据收到的用于启动该Activity的intent中的winId确定是否要打开新窗口。比如:若winId=-1,则确定需要打开新窗口,若winId不等于-1也不等于0,则确定使用已打开的窗口。
其中,winData2可包括:窗口显示位置和大小相关的数据,以及是否隐藏(multiwinHide)、是否最大化(multiwinMaximize)。其中,窗口显示位置和大小相关的数据可参考winData1的定义。是否隐藏,表示是否要隐藏窗口;是否最大化,表示是否要最大化窗口。
一种可选的winData2的举例如表2所示。
表2、第二窗口属性数据winData2
属性值 |
属性名称 |
值类型 |
窗口位置左边位置 |
multiwinLeft |
Int |
窗口位置上边位置 |
multiwinTop |
Int |
窗口宽度 |
multiwinWidth |
Int |
窗口高度 |
multiwinHeight |
Int |
是否隐藏 |
multiwinHide |
boolean |
是否最大化 |
multiwinMaximize |
boolean |
是否具有焦点 |
inFocus |
boolean |
可选地,根据生成的窗口对象中记录的winData2设置用于启动该Activity的intent中的winData1,可通过如下方式实现:
在设置multiWinInfo中的winData2后,将用于启动该Activity的intent中的winData1的窗口宽度、窗口高度、窗口位置上边位置和窗口位置下边位置,分别设置为等于winData2中对应的各属性数据的值。
为了保证窗口和窗口标识的一一对应,可选地,设置一全局变量multiWinId并在终端开机时初始化为1,当新建一个窗口时首先让multiWinId自己加1,然后设置窗口标识winId等于multiWinId,这样新建窗口的winID一直在增加,这样就保证了不同窗口的winId不同,窗口与winId一一对应。由于multWinInfo中记录了窗口对应的winId,所以能够保证multWinInfo与winId一一对应。进而保证窗口、winId和multiWinInfo一一对应。
可选地,可建立一个窗口对象队列multiWinRecord,来保存各个窗口对象multiWinInfo。Activity管理层的下层可在用于启动Activity的intent中加入winId,以使该要启动的Activity记录该winId。
具体地,在启动Activity时,打开新窗口时,建立窗口对象、加入窗口队列的方法参见后面的示例一。
可选地,在步骤S201,步骤S202之前,该方法还包括:
若确定该Activity启动时使用已打开的窗口,则确定该已打开的窗口对应的winId,根据确定的winId确定该已打开的窗口对应的multiWinInfo,获取该确定的multiWinInfo中记录的winData2,其中,所述窗口、窗口标识与窗口对象一一对应;
其中,步骤S202中设置用于启动该Activity的intent中的winData1,包括:根据获取的winData2设置用于启动该Activity的intent中的winData1。
可选地,Activity管理层的下层在收到用于启动该Activity的intent后,从intent中获取winId,则确定该获取的winId为已打开的窗口对应的winId。
可选地,若采用窗口对象队列multiWinRecord的方式管理各窗口对象multiWinInfo,则根据获取的winId查找multiWinRecord中的multiWinInfo,若multiWinInfo中记录的winId与该获取的winId相等,则确定该multiWinInfo为该已打开的窗口对应的窗口对象。
可选地,根据获取的winData2设置winData1,可通过如下方式实现:
将winData1的窗口宽度、窗口高度、窗口位置上边位置和窗口位置下边位置,分别设置为等于winData2中对应的各属性数据的值。
可在用于启动Activity的intent中加入winId,以使该要启动的Activity记录该winId。
具体地,在启动Activity,使用已打开的窗口,查找窗口对象,设置winId,并在用于启动Activity的intent中加入winId的的方法参见后面的示例二。
可选地,该方法还包括:
在需要关闭Activity,且该要关闭的Activity是以窗口方式启动时,判断是否存在该要关闭的Activity的窗口关联Activity;
若不存在该要关闭的Activity的窗口关联Activity,则在关闭该要关闭的Activity之后,删除该要关闭的Activity的关联窗口对象multiWinInfo;
其中,该要关闭的Activity的窗口关联Activity为:已打开的Activity中,记录的窗口标识与该要关闭的Activity记录的窗口标识相同的其他Activity;该要关闭的Activity的关联窗口对象为:记录的窗口标识与该要关闭的Activity记录的窗口标识相同的窗口对象。
可选地,在需要关闭Activity,而该Activity是以全屏方式启动时,可采用现有的Android平台的处理方法处理,这里不再赘述。
可选地,可通过如下方式删除该Activity的关联窗口对象multiWinInfo:
根据该要关闭的Activity中记录的winId,在队列multiWinRecord中查找具有相同winId的窗口对象multiWinInfo;
将找到的窗口对象从队列multiWinRecord中删除。
具体地,在关闭Activity时,删除对应的窗口对象的方法可参见后面的示例三。
可选地,若需要关闭的Activity是以窗口方式启动的,且存在该要关闭的Activity的窗口关联Activity,则进一步判断该Activity是否为正在显示的Activity;
若是,则在关闭该要关闭的Activity后,将该要关闭的Activity的窗口关联Activity中需要显示的Activity置为可视。
可选地,可通过Activity中记录的用于指示该Activity是否可视的数据visible,来确定该Activity是否为正在显示的Activity,比如,当visible=TRUE时,确定该Activity为正在显示的Activity,否则,visible=FALSE,确定该Activity不是正在显示的Activity。
可选地,将该Activity的窗口关联Activity中需要显示的Activity置为可视,包括:
将各窗口关联Activity中,对应的页面位于对应的窗口最上层的Activity(简称:“第一Activity”,临近该最上层页面的下一层页面对应的Activity成为“第二Activity”,依次类推,下面的各页面对应的Activity分别称为“第三Activity”、“第四Activity”,……)的visible置为TRUE,若该第一Activity具有透明属性,则将该第二Activity的visible置为TRUE,依次类推,直至某一个Activity不具有透明属性,则将下一个Activity的visible置为FALSE。
可选地,若该要关闭的Activity是正在显示的Activity,但其对应的页面并不是该Activity对应的窗口各页面中处于最上层的页面,则可仅将该Activity之后的各Activity中需要显示的Activity置为可视即可。
可选地,若需要关闭的Activity是以窗口方式启动的,且存在该要关闭的Activity的窗口关联Activity,但该Activity不是正在显示的Activity时,则确定该Activity的上一层Activity是否正在显示,若该上一层Activity正在显示,且该上一层Activity具有透明属性,则需将该要关闭的Activity的下一层Activity置为可视,若该下一层Activity具有透明属性,则需将继续逐层判断,是否需要将该窗口的其他Activity置为可视,可依据如下原则进行判断:
若当前层Activity可视且具有透明属性,则下一层可视。
具体地,在关闭该Activity后,将该要关闭的Activity的窗口关联Activity中需要显示的Activity置为可视的方法可参见后面的示例四。
可选地,本发明实施例提供的方法还包括:
接收窗口修改指令,获取该指令中的指令类型、窗口属性参数和窗口标识;
从记录了该获取的窗口标识的Activity中,确定需要修改的窗口中需要显示的各Activity;
将获取的指令类型、窗口属性参数分别发给确定的确定的需要显示的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口。
其中,确定一个窗口中需要显示的各Activity的方法可参考前面的相关描述。如果该需要修改的窗口中,除了需要显示的Activity之后,还有其他Activity,则可选地,这些Activity在需要显示时,可以再将该窗口的窗口属性参数发给这些Activity,以使这些Activity根据收到的窗口属性参数显示窗口。
或者,在接收窗口修改指令,获取该指令中的指令类型、窗口属性参数和窗口标识之后,根据获取的窗口标识确定该需要修改的窗口中的所有Activity,将获取的指令类型、窗口属性参数分别发给每一个Activity,以使需要显示的Activity根据该指令类型和窗口属性参数显示窗口,无需显示的Activity记录收到的窗口属性参数,并在需要显示时,根据记录的窗口属性参数显示窗口。
表3列出了窗口操作指令,其中包括:窗口修改指令和其他窗口操作指令。其中,窗口修改指令包括:指令类型为移动和修改窗口大小(MULTIWIN_CONTROL_MOVE)和最大化/恢复窗口(MULTIWIN_CONTROL_MAXIMIZE)的窗口操作指令。其他窗口操作指令包括:指令类型为关闭窗口(MULTIWIN_CONTROL_CLOSE)、隐藏/恢复窗口(MULTIWIN_CONTROL_HIDE)和切换窗口焦点(MULTIWIN_CONTROL_FOCUS)。
其中,当收到窗口修改指令后,需要将指令类型和窗口属性参数发给Activity,以使Activity根据指令类型和窗口属性参数显示窗口;对于其他窗口操作指令,则不需要向Activity发送指令类型和窗口属性参数,而通过其他方式对窗口进行操作,具体操作方式下面将详细描述。
可选地,收到窗口操作指令后,还可根据获取的指令类型和窗口属性参数修改对应的窗口对象中记录的第二窗口属性数据winData2。以便该窗口中再启动其他Activity时,可依据修改后的winData2修改用于启动该其他Activity的intent中的第一窗口属性数据winData1,以使该其他Activity依据winData1显示窗口。
为实现简化起见,各种窗口操作指令都可包括四个窗口属性参数p1、p2、p3和p4。对于不同类型的窗口操作指令,这些参数的含义和取值不同。
可选地,窗口操作指令中携带窗口标识winId,因此,在收到窗口操作指令后,可根据其中的winId确定需要操作的窗口。
表3、窗口操作指令
接收窗口修改指令的具体处理方法可参见下面的示例五。
当窗口操作指令是关闭窗口(MULTIWIN_CONTROL_CLOSE)时,关闭该窗口对应的所有Activity(可根据指令中的winId确定要关闭的窗口和该窗口对应的各Activity),并删除该窗口对应的窗口对象multiWinInfo(可根据指令中的winId确定要删除的窗口对象)。
当窗口操作指令是隐藏/恢复窗口(MULTIWIN_CONTROL_HIDE)时,若隐藏窗口,则将该窗口置于桌面(launcher对应的页面)之下,若恢复窗口,则将该窗口置于桌面之上。具体地,当隐藏窗口时,将该窗口的各Activity对应的页面置于位于之下,可选地,在具体实现时,可从用于管理各Activity的队列historyRecord中,从下向上搜索,优先处理不显示的Activity,从而提高效率,若从上向下搜索,则在处理了上面的Activity后,还有先将下面的Activity显示出来之后,再处理下面的Activity,这样会增加处理的复杂度。
当窗口操作指令是切换焦点(MULTIWIN_CONTROL_FOCUS)时,处于操作的窗口最上层的页面对应的Activity的状态转换为激活状态。若该Activity的状态已为激活状态,则忽略该指令。切换焦点的具体处理方法可参见示例六。
当启动一个Activity打开窗口时,如果收到用户的操作指令,指定了窗口的大小,则指令指定的大小来显示。如果未指定窗口的大小,则按照默认的处理方法来显示。可选的处理方法包括:如果当前没有窗口,则新窗口占屏幕的一半,并且处于中央;如果当前已经有一个窗口,则两个窗口各占屏幕一半,一个上面一个下面;如果当前已经有两个窗口,则三个窗口最早两个占上半屏幕各一半,新建窗口占下半屏幕;如果当前已经有四个窗口,则四个窗口各占屏幕四分之一,1~4个窗口的显示效果如图10所示。此外,如果共五个以上窗口,则窗口从左上角下右下错开一定位置排列,大小一样。
可选地,当同时存在两个及以上窗口时,可通过触动两个窗口的交界将可以改变窗口大小,当一个变大时旁边的会跟着调整,总之几个窗口会占满全屏。当长按一个窗口时,将会在屏幕上出现一个系统操作栏,提供关闭、最大化、最小化、以及交换位置的功能按钮。长按一个窗口,再长按另外一个窗口,按交换按钮则两个窗口会交换位置。
示例一、启动Activity,建立新窗口显示的方法
图4为本发明示例一的流程图。如图4所示,示例一的方法包括如下步骤:
S401:确定要启动Activity;
S402:确定启动该Activity时要打开新的窗口;
S403:为该新窗口分配窗口标识winId;
S404:生成窗口对象multiWinInfo,设置multiWinInfo中的第二窗口属性数据winData2,并在multiWinInfo中记录分配的winId;
S405:将生成的multiWinInfo加入窗口队列multiWinRecord中;
S406:根据winData2设置用于启动Activity的intent中的winData1,并将分配的winId置于该intent中,以使Activity根据winData1显示窗口并记录winId。
示例二、启动Activity,建立新窗口的方法
图5为本发明示例二的流程图。如图5所示,示例二的方法包括如下步骤:
S501:确定要启动Activity;
S502:确定启动该Activity使用已打开的窗口;
S503:确定该已打开的窗口的窗口标识winId;
S504:根据确定的winId在窗口对象队列multiWinRecord中查找该已打开的窗口对应的窗口对象multiWinInfo;
S505:获取找到的窗口对象中的第二窗口属性数据winData2;
S506:根据获取的winData2设置用于启动该Activity的intent中的第一窗口属性数据winData1,并将确定的winId置于该intent中,以使该Activity根据winData1显示窗口,并记录winId。
示例三、关闭Activity,删除对应的窗口对象的方法
图6为本发明示例三的流程图。如图6所示,示例三的方法包括如下步骤:
S601:确定需要关闭Activity;
S602:确定该要关闭的Activity是以窗口方式启动的;
S603:确定不存在该要关闭的Activity的窗口关联Activity;
S604:根据该要管关闭的Activity中记录的winId,在队列multiWinRecord中查找具有相同winId的窗口对象multiWinInfo;
S605:将找到的窗口对象multiWinInfo从队列multiWinRecord中删除。
示例四、在关闭该Activity后,将该Activity的窗口关联Activity中需要显示的Activity置为可视的方法。
图7是本发明示例四的流程图。如图7所示,示例四的方法包括如下步骤:
S701:确定需要关闭Activity;
S702:确定该要关闭的Activity是以窗口方式启动的;
S703:确定存在该要关闭的Activity的窗口关联Activity;
S704:确定该要关闭的Activity为正在显示的Activity;
S705:关闭该Activity,将该Activity的窗口关联Activity中需要显示的Activity置为可视。
现有的方案中,当前的页面都是全屏显示,队列historyRecord中各Activity的先后顺序就是Activity的调度顺序,最后启动的Activity排在队列的最前面,当队列historyRecord中最前的Activity关闭后,下一个Activity对应的页面将显示出来。
通过采用示例四的方法,可实现同时有多个窗口独立显示,互不干扰。如图3所示,同时存在两个窗口,当关闭一个窗口中的Activity时,仅影响该窗口的显示,不影响另一个窗口的显示。图3中队列historyRecord中各Activity的位置顺序依据就是Activity后面的编号,即Activity 1排在队列historyRecord中的最前面,后面依次是Activity 2至Activity 8。采用示例四的方法,当关闭Activity 1时,可实现在窗口1中显示Activity 3对应的页面,即实现了各窗口独立显示,互不影响。而如果采用现有的Android平台中的方法,则会显示Activity 2。
示例五、窗口修改指令的处理方法
图8是本发明示例五的流程图。如图8所示,示例五的方法包括如下步骤:
S801:接收窗口修改指令;
S802:获取指令类型、窗口属性参数和窗口标识winId;
S803:根据获取的winId确定需要修改的窗口中的需要显示的各Activity;
S804:将获取的指令类型、窗口属性参数分别发给确定的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口
示例六、切换焦点的方法
图9是本发明示例流的流程图。如图9所示,示例六的方法包括如下步骤:
S901:接收窗口操作指令;
S902:确定指令类型为切换焦点,获取窗口标识winId;
S903:根据winId将确定需要修改的窗口最上层页面对应的Activity是否处于激活状态;若是,则执行步骤S904,否则,执行步骤S905;
S904:无需处理;
S905:将该Activity转为激活状态。
基于同一发明构思,本发明实施例中还提供了一种应用于Android平台的显示窗口的装置,由于该显示窗口的装置解决问题的原理与本发明实施例的显示窗口的方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
图11为本发明实施例提供的应用于Android平台的显示窗口的装置的结构示意图。该装置具体包括:
判断模块1101,用于在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;
数据处理模块1102,用于在判断模块1101确定该Activity的启动方式为窗口方式后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口。
可选地,判断模块1101还用于:在确定该Activity的启动方式为窗口方式之后,数据处理模块1102设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该Activity启动时使用已打开的窗口;
数据处理模块1102还用于:若判断模块1101确定该Activity启动时使用已打开的窗口,则在设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该已打开的窗口对应的窗口标识,根据确定的窗口标识确定该已打开的窗口对应的窗口对象,获取该确定的窗口对象中记录的第二窗口属性数据,其中窗口、窗口标识与窗口对象一一对应;
数据处理模块1102具体用于:根据获取的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
可选地,判断模块1101还用于:在确定该Activity的启动方式为窗口方式之后,数据处理模块设1102置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,确定该Activity启动时要打开新窗口;
数据处理模块1102还用于:若判断模块1101确定该Activity启动时要打开新窗口,则为要打开的新窗口分配窗口标识,生成该新窗口对应的窗口对象,在该生成的窗口对象中记录分配的窗口标识,并设置该生成的窗口对象中的第二窗口属性数据,其中窗口、窗口标识与窗口对象一一对应;
数据处理模块1102具体用于:根据该生成的窗口对象中的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
可选地,数据处理模块1102还用于:在判断模块1101确定该Activity启动时是否使用已打开的窗口之后,将窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
判断模块1101还用于:在需要关闭Activity,且该要关闭的Activity以窗口方式启动时,判断是否存在该要关闭的Activity的窗口关联Activity;
数据处理模块1102还用于:若判断模块1101确定不存在该要关闭的Activity的窗口关联Activity,则在关闭该要关闭的Activity之后,删除该要关闭的Activity的关联的窗口对象;
其中,该要关闭的Activity的窗口关联Activity为:已打开的Activity中,记录的窗口标识与该要关闭的Activity记录的窗口标识相同的其他Activity;该要关闭的Activity的关联窗口对象为:记录的窗口标识与该要关闭的Activity记录的窗口标识相同的窗口对象。
可选地,数据处理模块1102还用于:
若判断模块1101确定存在该Activity的窗口关联Activity,且该要关闭的Activity为正在显示的Activity,则在关闭该要关闭的Activity后,将该要关闭的Activity的窗口关联Activity中需要显示的Activity置为可视。
可选地,数据处理模块1102还用于:在判断模块1101确定该Activity启动时是否使用已打开的窗口之后,将窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
该装置还包括:指令接收模块,用于接收窗口修改指令,并获取该指令中的指令类型、窗口属性参数和窗口标识;
数据处理模块1102还用于:从记录了指令接收模块获取的窗口标识的Activity中,确定需要修改的窗口中需要显示的各Activity;并将获取的指令类型、窗口属性参数分别发给确定的需要显示的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口。
可选地,数据处理模块1102还用于:
根据指令接收模块获取的指令类型和窗口属性参数,修改特定窗口对象中记录的第二窗口属性数据;
其中,特定窗口对象为:记录了获取的窗口标识的窗口对象。
图12为本发明实施例提供的Android终端结构示意图。如图12所示,该终端包括:
存储器1201,用于存储显示窗口的程序;
处理器1202,通过运行存储器1201存储的程序,用于在启动活动Activity时,确定该Activity的启动方式是否为窗口方式;在确定该Activity的启动方式为窗口方式后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据,以使该Activity根据该第一窗口属性数据显示窗口。
其中,在图12中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器1202代表的一个或多个处理器和存储器1201代表的存储器的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发机1203可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元。针对不同的用户设备,用户接口1204还可以是能够外接内接需要设备的接口,连接的设备包括但不限于小键盘、显示器、扬声器、麦克风、操纵杆等。
可选地,处理器1202具体用于:
在确定该Activity的启动方式为窗口方式之后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,若确定该Activity启动时使用已打开的窗口;则确定该已打开的窗口对应的窗口标识,根据确定的窗口标识确定该已打开的窗口对应的窗口对象,获取该确定的窗口对象中记录的第二窗口属性数据,其中,窗口、窗口标识与窗口对象一一对应;
在设置用于启动该Activity的消息传递对象中的第一窗口属性数据时,根据获取的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
可选地,处理器1202还用于:在确定该Activity的启动方式为窗口方式之后,设置用于启动该Activity的消息传递对象中的第一窗口属性数据之前,若确定该Activity启动时使用已打开的窗口之后,则为要打开的新窗口分配窗口标识,生成该新窗口对应的窗口对象,在该生成的窗口对象中记录分配的窗口标识,并设置该生成的窗口对象中的第二窗口属性数据,其中窗口、窗口标识与窗口对象一一对应;
处理器1202在设置用于启动该Activity的消息传递对象中的第一窗口属性数据时,具体用于:根据该生成的窗口对象中的第二窗口属性数据设置用于启动该Activity的消息传递对象中的第一窗口属性数据。
可选地,处理器1202还用于:在确定该Activity启动时是否使用已打开的窗口之后,将窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
处理器1202还用于:在需要关闭Activity,且该要关闭的Activity是以窗口方式启动时,判断是否存在该要关闭的Activity的窗口关联Activity;若不存在该要关闭的Activity的窗口关联Activity,则在关闭该要关闭的Activity之后,删除该要关闭的Activity的关联窗口对象;
其中,该要关闭的Activity的窗口关联Activity为:已打开的Activity中,记录的窗口标识与该要关闭的Activity记录的窗口标识相同的其他Activity;该要关闭的Activity的关联窗口对象为:记录的窗口标识与该要关闭的Activity记录的窗口标识相同的窗口对象。
可选地,处理器1202还用于:
在判断是否存在该要关闭的Activity的窗口关联Activity之后,若存在该要关闭的Activity的窗口关联Activity,且该要关闭的Activity为正在显示的Activity,则在关闭该要关闭的Activity后,将该要关闭的Activity的窗口关联Activity中需要显示的Activity置为可视。
可选地,处理器1202还用于:在确定该Activity启动时是否使用已打开的窗口之后,将窗口标识置于用于启动该Activity的消息传递对象中,以使该Activity记录该窗口标识;
处理器1202还用于:接收窗口修改指令,获取该指令中的指令类型、窗口属性参数和窗口标识;从记录了该获取的窗口标识的Activity中,确定需要修改的窗口中需要显示的各Activity;将获取的指令类型、窗口属性参数分别发给确定的需要显示的各Activity,以使每一个Activity根据该指令类型和窗口属性参数显示窗口。
可选地,处理器1202还用于:
在获取该指令中的指令类型、窗口属性参数和窗口标识之后,根据获取的指令类型和窗口属性参数,修改特定窗口对象中记录的第二窗口属性数据;
其中,特定窗口对象为:记录了获取的窗口标识的窗口对象。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。