手机应用程序运行状态的管理方法和系统转让专利

申请号 : CN200810217547.1

文献号 : CN101403981B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 古幼鹏王巍杨新王泽民徐立锋

申请人 : 中兴通讯股份有限公司

摘要 :

本发明提供了一种在多任务手机系统上的应用程序运行状态管理系统和方法,该系统包括窗口管理器模块,应用管理器模块,由各应用程序分别调用的客户端代理模块;在应用程序窗口状态发生变化时,应用程序调用客户端代理模块提供的窗口操作函数向窗口管理器模块发出操作请求;窗口管理器模块根据所述的操作请求,向应用管理器模块发送状态切换消息;应用管理器模块依据所述状态切换消息,向客户端代理模块发送应用程序运行状态变化的消息;客户端代理模块将应用程序运行状态变化的消息通知给调用该客户端代理模块的应用程序,以实现对应用程序窗口的管理。该系统及方法能够解决现有技术的管理方式对CPU、电量和内存不必要开销太多的技术问题。

权利要求 :

1.一种手机应用程序运行状态的管理方法,所述手机中包括窗口管理器模块,应用管理器模块,一个或多个应用程序在其中运行,每个应用程序分别调用一个客户端代理模块,其特征在于,所述方法包括如下步骤:A、应用程序调用客户端代理模块提供的窗口操作函数向窗口管理器模块发出操作请求;

B、窗口管理器模块根据所述的操作请求执行相应的操作,并根据操作结果向应用管理器模块发送状态切换消息;

C、应用管理器模块依据所述状态切换消息,向客户端代理模块发送应用程序运行状态变化的消息;

D、客户端代理模块将应用程序运行状态变化的消息通知给调用该客户端代理模块的应用程序。

2.根据权利要求1所述的方法,其特征在于,所述状态切换消息中包含改变前顶层窗口ID及所属的应用程序ID、改变后顶层窗口ID及所属的应用程序ID,若改变前顶层窗口所属的应用程序ID和改变后顶层窗口所属的应用程序ID相同,则所述状态切换消息为进程内窗口切换消息;否则,所述状态切换消息为应用程序的前后台切换消息。

3.根据权利要求2所述的方法,其特征在于,步骤B中具体包括如下步骤:

如果操作请求中改变之前和改变之后的顶层窗口不属同一进程,则向应用管理器模块发送应用程序的前后台切换消息;若属于同一进程,则向应用管理器模块发送进程内切换消息。

4.根据权利要求3所述的方法,其特征在于,所述应用管理器模块收到的所述状态切换消息为进程内切换消息时,所述步骤C具体包括如下步骤:根据所述应用程序的ID向该应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包含改变之前和改变之后顶层窗口ID。

5.根据权利要求3所述的方法,其特征在于,所述应用管理器模块收到的所述状态切换消息为应用程序的前后台切换消息时,所述步骤C具体包括如下步骤:修改所述应用管理器模块中改变前顶层窗口所属应用程序和改变后顶层窗口所属应用程序的运行状态变量;向改变前顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变前顶层窗口ID;以及,向改变后顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变后顶层窗口ID。

6.根据权利要求1至5任一所述的方法,所述运行状态包括“正在启动中”、“前台运行”、“后台运行”、“未运行”。

7.一种手机应用程序运行状态的管理系统,其特征在于,包括:

窗口管理器模块,用于管理应用程序创建的窗口,接收客户端代理模块发来的操作请求,按照该操作请求管理应用程序创建的窗口,并向应用管理器模块发送状态切换消息;

应用管理器模块,用于对窗口管理器模块发来的状态切换消息进行处理并向客户端代理模块发送应用程序运行状态变化的消息;

一个或多个客户端代理模块,用于接收应用管理器模块发来的应用程序运行状态变化的消息,并通过窗口操作函数通知其对应的应用程序运行状态变化的消息;还用于构建其对应的应用程序的运行状态操作请求,并将所述操作请求传递给窗口管理器模块。

8.根据权利要求7所述的系统,其特征在于,所述运行状态包括“正在启动中”、“前台运行”、“后台运行”、“未运行”。

9.根据权利要求7或8所述的系统,其特征在于,所述状态切换消息中包含改变前顶层窗口ID及所属的应用程序ID、改变后顶层窗口ID及所属的应用程序ID,若改变前顶层窗口所属的应用程序ID和改变后顶层窗口所属的应用程序ID相同,则所述状态切换消息为进程内窗口切换消息;否则,所述状态切换消息为应用程序的前后台切换消息。

10.根据权利要求9所述的系统,其特征在于,窗口管理器模块还用于 在操作请求中改变之前和改变之后的顶层窗口不属同一进程时,向应用管理器模块发送应用程序的前后台切换消息;在属于同一进程时,则窗口管理器向应用管理器模块发送进程内切换消息;

应用管理器模块还用于在收到应用程序的前后台切换消息时,修改所述应用管理器模块中改变前顶层窗口所属应用程序和改变后顶层窗口所属应用程序的运行状态变量,向改变前顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变前顶层窗口ID,以及,向改变后顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变后顶层窗口ID;在收到进程内切换消息时,根据所述应用程序的ID向该应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包含改变之前和改变之后顶层窗口ID。

说明书 :

手机应用程序运行状态的管理方法和系统

技术领域

[0001] 本发明涉及计算机软件技术,更具体地说,是一种手机应用程序运行状态的管理方法和系统。

背景技术

[0002] 手机是一种典型的资源受限系统,主要体现在CPU处理能力比较弱和内存容量有限,另外,手机还对功耗有很严格的要求,希望尽量提高电池的续航时间。现代的智能手机往往是一个多任务的系统,系统中会同时运行多个应用程序以完成各种任务。因此,对系统中运行着的应用程序的状态进行管理,让应用程序可以根据自己当前的运行状态决定自己执行的操作,减小在当前运行状态下不必要的操作就变得比较重要。通过对应用程序运行状态的管理,既可以减小不必要的操作对CPU处理能力的占用,也可以减小这些操作引起的相关电量消耗,另外在内存资源不足的情况下,系统还可以根据应用程序的运行状态选择可以终止的应用程序终止,以释放内存资源,保证系统的稳定。
[0003] 目前智能手机上对应用程序运行状态的管理方法主要有以下几种:
[0004] (1)只对应用程序“正在启动中”和“已经启动运行”这两种状态进行管理。这种应用程序运行状态的管理方式的缺点是,许多应用程序虽然处于“已经启动运行”状态,但很可能其实是在后台运行,由于应用程序无法知道自己到底是在前台还是在后台运行,因此会出现该应用程序虽然在后台运行却仍然在做界面更新的操作,而实际上由于这些程序不需要出现在前台,因此界面更新及相关的操作都是不必要的操作。
[0005] (2)对应用程序的状态进一步区分出“运行”、“暂停”、“恢复”和“停止”等状态并进行管理,但是这种状态管理不适应于多任务系统,在多任务系统中,很多处于后台的应用程序仍然处于正常运行状态,并没有处于“暂 停”或“停止”状态,只是从减少对系统CPU和电量消耗角度出发,不执行与用户交互的相关操作(例如更新界面、监听按键输入等)而已,但应用程序的控制流程仍然在正常运行。因此,对应用程序的“运行”、“暂停”、“恢复”和“停止”等状态进行管理,这在多任务环境下,是不能达到减小对CPU处理能力的占用和电量消耗的目的的。
[0006] (3)对应用程序的运行状态划分为“前台”、“后台”,但是现有的基于前台/后台的这种状态管理并不完善,主要体现在:a)在这种管理系统中,应用程序只能接收到其被显示出来的通知(即处于前台),但当被另一个应用程序的界面所遮盖时,无法得到自己被隐藏的通知消息(即处于后台),因此,仍然会进行界面更新及相关的操作;b)在这种管理系统中,使用广播机制来通知应用程序处于“前台”或“后台”运行状态的变化。由于手机的屏幕大小有限,一般只有一个应用程序处于前台状态,其它运行的应用程序都处在后台状态。采用广播机制会对系统中其它本来不需要到前台运行的程序进行判断,对本来不需要运行的不相关的程序进行处理,不必要地消耗系统资源;c)在这种管理系统中,所有应用程序的“前台”、“后台”状态信息没有集中保存到系统的应用管理器中。当系统的内存资源不足,应用管理器需要把不重要的应用程序终止时,可能会错误地选择正在前台运行的应用程序来终止。

发明内容

[0007] 本发明要解决的技术问题是提供了一种在多任务手机系统上的应用程序运行状态的管理系统和方法,以解决现有技术中的管理方式对CPU、电量和内存不必要开销太多这一技术问题。
[0008] 为解决上述技术问题,本发明提供一种手机应用程序运行状态的管理方法,其中,所述手机中包括窗口管理器模块,应用管理器模块,一个或多个应用程序在其中运行,每个应用程序分别调用一个客户端代理模块,所述方法包括如下步骤:
[0009] A、应用程序调用客户端代理模块提供的窗口操作函数向窗口管理器模块发出操作请求;
[0010] B、窗口管理器模块根据所述的操作请求执行相应的操作,并根据操作 结果向应用管理器模块发送状态切换消息;
[0011] C、应用管理器模块依据所述状态切换消息,向客户端代理模块发送应用程序运行状态变化的消息;
[0012] D、客户端代理模块将应用程序运行状态变化的消息通知给调用该客户端代理模块的应用程序。
[0013] 进一步地,上述方法还可具有以下特点:
[0014] 所述状态切换消息中包含改变前顶层窗口ID及所属的应用程序ID、改变后顶层窗口ID及所属的应用程序ID,若改变前顶层窗口所属的应用程序ID和改变后顶层窗口所属的应用程序ID相同,则所述状态切换消息为进程内窗口切换消息;否则,所述状态切换消息为应用程序的前后台切换消息。
[0015] 进一步地,上述方法还可具有以下特点:
[0016] 步骤B中具体包括如下步骤:
[0017] 如果操作请求中改变之前和改变之后的顶层窗口不属同一进程,则向应用管理器模块发送应用程序的前后台切换消息;若属于同一进程,则向应用管理器模块发送进程内切换消息。
[0018] 进一步地,上述方法还可具有以下特点:
[0019] 所述应用管理器模块收到的所述状态切换消息为进程内切换消息时,所述步骤C具体包括如下步骤:
[0020] 根据所述应用程序的ID向该应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包含改变之前和改变之后顶层窗口ID。
[0021] 进一步地,上述方法还可具有以下特点:
[0022] 所述应用管理器模块收到的所述状态切换消息为应用程序的前后台切换消息时,所述步骤C具体包括如下步骤:
[0023] 修改所述应用管理器模块中改变前顶层窗口所属应用程序和改变后顶层窗口所属应用程序的运行状态变量;向改变前顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变前顶层窗口ID;以及,向改变后顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变后顶层窗口ID。
[0024] 进一步地,上述方法还可具有以下特点:
[0025] 所述运行状态包括“正在启动中”、“前台运行”、“后台运行”、“未运行”。 [0026] 为了解决上述技术问题,本发明还提出一种手机应用程序运行状态的管理系统,其中:
[0027] 所述窗口管理器模块,用于管理应用程序创建的窗口,接收客户端代理模块发来的操作请求,按照该操作请求管理应用程序创建的窗口,并向应用管理器模块发送状态切换消息;
[0028] 所述应用管理器模块,用于对窗口管理器模块发来的状态切换消息进行处理并向客户端代理模块发送应用程序运行状态变化的消息;
[0029] 所述一个或多个客户端代理模块,用于接收应用管理器模块发来的应用程序运行状态变化的消息,并通过窗口操作函数通知其对应的应用程序运行状态变化的消息;还用于构建其对应的应用程序的运行状态操作请求,并将所述操作请求传递给窗口管理器模块。
[0030] 进一步地,上述系统还可具有以下特点:
[0031] 所述运行状态包括“正在启动中”、“前台运行”、“后台运行”、“未运行”。 [0032] 进一步地,上述系统还可具有以下特点:
[0033] 所述状态切换消息中包含改变前顶层窗口ID及所属的应用程序ID、改变后顶层窗口ID及所属的应用程序ID,若改变前顶层窗口所属的应用程序ID和改变后顶层窗口所属的应用程序ID相同,则所述状态切换消息为进程内窗口切换消息;否则,所述状态切换消息为应用程序的前后台切换消息。
[0034] 进一步地,上述系统还可具有以下特点:
[0035] 所述窗口管理器模块还用于在操作请求中改变之前和改变之后的顶层窗口不属同一进程时,向应用管理器模块发送应用程序的前后台切换消息;在属于同一进程时,则窗口管理器向应用管理器模块发送进程内切换消息;
[0036] 所述应用管理器模块还用于在收到应用程序的前后台切换消息时,修改所述应用管理器模块中改变前顶层窗口所属应用程序和改变后顶层窗口所属应用程序的运行状态变量,向改变前顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变前顶层窗口ID,以及,向改变后顶层窗口所属应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包括改变后顶层窗口ID;在收到进程内切换消息时,根据所述应用程序的ID向该应用程序调用的客户端代理模块发送应用程序运行状态变化的消息,该消息中包含改变之前和改变之后顶层窗口ID。 [0037] 综上所述,本发明提供了一种手机应用程序运行状态的管理方法和系统,引入了应用程序的四种运行状态的概念,把系统中所有应用程序的运行状态集中在应用管理器模块中统一管理,并采用点对点的方式通知应用程序其运行状态的变化信息。通过这些措施,降低了在多任务手机系统上后台运行的应用程序对CPU处理能力和电量及内存的不必要消耗。 附图说明
[0038] 图1是本发明的系统结构框图;
[0039] 图2是本发明的窗口管理器模块的处理流程图;
[0040] 图3是本发明的应用管理器模块的处理流程图;
[0041] 图4是本发明的客户端代理模块从应用管理器模块到应用程序的处理流程图; [0042] 图5是应用程序将窗口变化通知本发明的系统的处理流程图;
[0043] 图6是本发明的一个具体实施的结构框图。

具体实施方式

[0044] 本发明的系统中包括窗口管理器模块,应用管理器模块,由每个应用程序分别调用的客户端代理模块,在应用程序的窗口状态发生变化时,应用程序调用客户端代理模块提供的窗口操作函数向窗口管理器模块发出操作请求;窗口管理器模块根据所述的操作请求执行相应的操作,并根据操作结果向应用管理器模块发送状态切换消息;应用管理器模块依据所述状态切换消 息,向客户端代理模块发送应用程序运行状态变化的消息;客户端代理模块将应用程序运行状态变化的消息通知给调用该客户端代理模块的应用程序。从而实现对应用程序窗口的管理。下面,结合附图,对本发明的具体实施方式进行详细描述。 [0045] 如附图1所示,本发明的系统包括如下部分:
[0046] 窗口管理器模块,用于管理应用程序创建的窗口,主要包括窗口之间的显示层次顺序,即哪个窗口显示在最上面,每个窗口的下面是哪个窗口,和窗口显示在屏幕上的位置、大小等;接收客户端代理模块发来的操作请求,按照该操作请求管理应用程序创建的窗口,并向应用管理器模块发送应用程序的前后台切换消息或进程内窗口切换消息,在本专利中,这两个消息统称为状态切换消息。
[0047] 窗口管理器模块的处理流程如图2所示,分为如下步骤:
[0048] S1窗口管理器模块接收客户端代理模块发来的窗口操作的请求;
[0049] S2根据该操作请求,判断可见窗口是否发生改变,如果是则转S3,否则,转S4,流程终结;
[0050] S3判断改变之前和改变之后的顶层窗口属同一进程,如果不是,则转步骤S31,向应用管理器模块发送应用程序的前后台切换消息;如果是,转步骤S32,向应用管理器模块发送进程内窗口切换消息;
[0051] 应用管理器模块,用于对窗口管理器模块发来的状态切换消息进行处理并向客户端代理模块发送应用程序运行状态变化的消息。应用程序的运行状态主要包括“正在启动中”、“前台运行”、“后台运行”、“未运行”这四种情况,应用管理器模块负责根据应用程序的运行状态以及收到的状态切换消息,通过客户端代理模块启动/停止应用程序。 [0052] 如附图3所示,是本发明应用管理器模块的处理流程图,具体包含以下步骤: [0053] S5接收窗口管理器模块发来的状态切换消息;
[0054] S6判断状态切换消息的类型,若是进程内窗口切换消息,则转S7,向 对应的应用程序中的客户端代理模块发送应用程序运行状态在前台但窗口发生了切换的消息;若是应用程序的前后台切换消息,则转S8,根据切换消息中的进程号向对应的应用程序中的客户端代理模块发送运行状态变成“前台”或“后台”的消息。
[0055] 所述的应用程序运行状态在前台但窗口发生了切换的消息以及运行状态变成“前台”或“后台”的消息在本专利中统称为应用程序运行状态变化的消息。
[0056] 客户端代理模块,用于处理应用管理器模块发来的状态切换消息,并通过窗口操作函数通知应用程序运行状态变为“前台”、“后台”或“仍为前台但顶层窗口发生了变化”;客户端代理模块还用于接收应用程序的运行状态操作请求,这些请求包括显示、隐藏、窗口的层次变化、窗口的大小/位置改变等,并由客户端代理模块将该操作请求传递给窗口管理器模块。客户端代理模块是与应用程序编译连接在一起运行的,每个应用程序都分别调用一个客户端代理模块。其处理流程如下:
[0057] 如附图4所示,是本发明客户端代理模块从应用管理器模块到应用程序的处理流程图,具体包含以下步骤:
[0058] S10客户端代理模块接收应用管理器模块发来的消息;
[0059] S11若是运行状态变为后台的消息,则通过窗口操作函数通知应用程序运行状态变为“后台”,转S14;
[0060] S12若是运行状态变为前台的消息,则通过窗口操作函数通知应用程序运行状态变为“前台”,转S14;
[0061] S13若是顶层窗口发生了变化的消息,则通过窗口操作函数通知应用程序运行状态变为“仍为前台但顶层窗口发生了变化”,转S14;
[0062] S14流程结束。
[0063] 如附图5所示,是应用程序将窗口变化通知本发明的系统的处理流程图,具体包含以下步骤:
[0064] S15应用程序调用客户端代理模块提供的窗口操作函数使客户端代理 模块构造相应的操作请求,该操作请求包括显示窗口、隐藏窗口、窗口的层次变化、窗口的大小、位置改变等;
[0065] S16客户端代理模块把S15中的操作请求传递到窗口管理器模块。
[0066] 下面结合附图6对本发明进行详细说明,附图6是本发明在Linux上的gtk+/X11的一个实现案例,gtk+是一个用于创建图形用户界面的多平台工具,X11为一种支持Linux系统的服务器(以下简称X11 Server)。
[0067] 如图6所示,客户端代理模块在gtk+库基础上实现。其中,gtk+库提供的窗口操作函数(API)直接作为客户端代理模块的API提供给应用程序使用。另外,客户端代理模块利用gtk+库的signal机制(信号机制)向应用程序传递其运行状态变化情况,其基本原理是:在gtk+库的GtkWindow对象中增加一个信号:Run_State,这个信号在应用程序的运行状态发生变化时由客户端代理模块发出,应用程序通过把自己的回调函数连接到所有的GtkWindow对象的这个信号上,这样就可以得知并处理客户端模块发给它的各种消息。 [0068] 客户端代理模块到窗口管理器模块之间的通信通过X11Server进行转发。即客户端代理模块的窗口操作函数(即gtk+库提供的窗口操作函数)把操作请求以X协议方式发送到X11Server。窗口管理器模块通过X协议的重定向功能来向X11Server要求拦截这些窗口操作,这样,当X11Server收到客户端代理模块的操作请求时就转发给窗口管理器模块,从而实现了客户端代理模块到窗口管理器模块之间的通信。
[0069] 窗口管理器模块到应用管理器模块,应用管理器模块与客户端代理模块之间的通信采用Linux操作系统提供的本地socket通信机制来完成。
[0070] 根据图6所示的实施例,包括应用程序、客户端代理模块、X11 Server、窗口管理器模块、应用管理器模块,本系统的运作机制如下所述:
[0071] 应用程序调用客户端代理模块的窗口操作函数,即gtk+库提供的窗口操作函数,构建操作请求,请求对自己的窗口进行操作。gtk+库以X协议方式通过X11 Server最终把应用程序的操作请求发送到窗口管理器模块。窗口管理器模块收到从客户端代理模块发送来的应用程序的操作请求后,按照状 态管理策略对操作请求进行处理,如果解析出操作请求中包含了发生了顶层窗口的变化的信息,窗口管理器模块则通过与应用管理器模块之间的socket连接发送状态切换消息,该消息中包含改变前顶层窗口ID及所属的应用程序ID、改变后顶层窗口ID及所属的应用程序ID;否则,流程结束。
[0072] 应用管理器模块收到状态切换消息后,判断消息中的两个应用程序的ID。如果这两个应用程序的ID相同(表明状态切换消息为进程内窗口切换消息),就构建一条应用程序运行状态在前台但窗口发生了切换的消息,消息中包含改变之前和改变之后顶层窗口ID,应用管理器模块根据应用程序的ID找到与相应的客户端代理模块之间的socket连接,通过这个socket连接把应用程序运行状态在前台但窗口发生了切换的消息发送到相应应用程序的客户端代理模块中,相应应用程序中的客户端代理模块会从socket中收到该消息,从消息中取出改变前和改变后的窗口ID,再利用gtk+库提供的功能,由窗口ID分别得到对应的GtkWindow对象,然后这两个GtkWindow对象发出“Run_State”这个信号,这会导致应用程序连接在这些信号上的回调函数被执行,应用程序就可以在回调函数中处理客户端代理模块发给自己的状态切换消息,流程结束。
[0073] 如果应用程序的ID不相同(表明状态切换消息为应用程序的前后台切换消息),就修改自己内部记录应用程序运行状态的数据结构,通过应用程序的ID找到对应的应用程序运行状态变量进行修改,对于改变前顶层窗口对应的应用程序ID,应用管理器模块找到与相应的客户端代理模块之间的socket连接,通过这个socket连接把退到后台运行的消息(消息中包含改变前顶层窗口ID)发送到相应程序的客户端代理模块中,相应应用程序中的客户端代理模块会从socket中收到退到后台运行的消息,从消息中取出改变前的窗口ID,再利用gtk+库提供的功能,由窗口ID分别得到对应的GtkWindow对象,然后在这个GtkWindow对象上发出“Run_State”这个信号,这会导致应用程序连接在这个信号上的回调函数被执行,应用程序就可以在回调函数中处理客户端代理模块发给自己的运行状态变成后台的消息,流程结束。对于改变后顶层窗口对应的应用程序的ID,应用管理器模块找到与相应的客户端代理模块之间的socket连接,通过这个socket连接把到前台运行的消息 (消息中包含改变后顶层窗口ID)发送到相应程序的客户端代理模块中,相应应用程序中的客户端代理模块会从socket中收到前台运行的消息,从消息中取出改变后窗口ID,再利用gtk+库提供的功能,由窗口ID得到对应的GtkWindow对象,然后在这个GtkWindow对象发出“Run_State”这个信号,这会导致应用程序连接在这个信号上的回调函数被执行,应用程序就可以在回调函数中处理客户端代理模块发给自己的运行状态变成前台的消息,流程结束。