CN107807847A - 应用进程的管理方法和终端设备 - Google Patents
应用进程的管理方法和终端设备 Download PDFInfo
- Publication number
- CN107807847A CN107807847A CN201610815139.0A CN201610815139A CN107807847A CN 107807847 A CN107807847 A CN 107807847A CN 201610815139 A CN201610815139 A CN 201610815139A CN 107807847 A CN107807847 A CN 107807847A
- Authority
- CN
- China
- Prior art keywords
- application
- foreground
- group
- current
- fork
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4818—Priority circuits therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/482—Application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Telephone Function (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种应用进程的管理方法和终端设备,包括:启动终端设备中的应用;当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,目标进程是应用切换至后台之后,仍满足留在前台进程组的条件的进程。本发明能够缓解前台应用的卡顿现象。
Description
技术领域
本发明涉及终端设备领域,更为具体地,涉及一种应用进程的管理方法和终端设备。
背景技术
随着终端设备上的应用种类的增多,终端设备的使用越来越普遍。终端设备的操作系统有多种,其中,基于Linux的安卓系统是终端设备最常用的一种操作系统。
安卓系统是一个多任务的操作系统,在应用从前台切换至后台的情况下,后台应用的进程仍会继续保持运行,这样就会导致后台应用的进程与前台应用的进程争抢处理器资源,从而导致前台应用经常出现卡顿的现象。
为了缓解后台应用与前台应用争抢处理资源而引起的前台应用卡顿的问题,Google提出了基于cgroup(即control group,也可称为控制组)的前后台机制。基于cgroup的前后台机制的主要思想是将前台应用的进程尽量分在前台进程组(或称fore group,简称fg),并为前台进程组中的进程分配较多的处理资源,将后台应用的进程尽量分在后台进程组(或称back group,简称bg),并为后台进程组中的进程分配较少的处理资源。例如,前台进程组中的进程可以使用全部的处理器核,并可以占用处理器的95%的使用率;后台进程组中的进程仅可以使用一个处理器核,并最多可以占用处理器的5%的使用率。通过这样的资源分配方式,可以很大程度上缓解后台应用进程抢占前台应用进程的处理资源的问题。
但是,即使采用了基于cgroup的前后台机制,在同时运行的应用较多的情况下,前台应用仍会出现卡顿的现象。
发明内容
本申请提供一种应用进程的管理方法和终端设备,以缓解前台应用的卡顿现象。
第一方面,提供一种应用进程的管理方法,包括:启动终端设备中的应用;当所述应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态,使所述应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,所述目标进程是所述应用切换至后台之后,仍满足留在前台进程组的条件的进程。
目标进程是应用切换至后台之后,仍满足留在前台进程组的条件的进程,如果沿用现有技术,目标进程就会留在前台进程组,与前台进程抢占资源,本方案中,当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,能够一定程度上减少与前台进程抢占资源的进程的数量,从而缓解系统的卡顿现象。
应用切换至后台之后,仍满足留在前台进程组的条件包括以下条件中的至少一个:是应用进程的fork子进程;具有前台服务;具有关联进程,且所述关联进程的当前分组的前一次分组为前台进程组。
应理解,应用进程的fork子进程可以指应用进程通过fork()函数创建的子进程。
应理解,当应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态可以指:以应用从前台切换至后台的事件为触发事件,更新所述应用中的进程的分组状态,换句话说,响应于应用从前台切换至后台的事件,更新所述应用中的进程的分组状态。
应理解,终端设备内部通过AMS不断更新进程的分组状态,当所述应用从前台切换至后台的事件发生时,受AMS管控的进程会进行分组状态的更新,从前一次分组更新至当前分组,当然,进程的前一次分组和当前分组可以是同一分组,也可以是不同分组。因此,关联进程的前一次分组可以指AMS最后一次更新关联进程的分组状态前,关联进程所属的分组,关联进程的当前分组可以指AMS最后一次更新关联进程的分组状态后,关联进程所属的分组,关联进程的前一次分组和当前分组可以相同,也可以不同。
结合第一方面,在第一方面的第一种实现方式中,所述目标进程包括以下进程中的至少一种:所述应用的进程的fork子进程;具有关联进程的进程,且所述关联进程的当前分组的前一次分组为前台进程组;以及被强制设置在前台的进程。
结合第一方面或其上述实现方式的任一种,在第一方面的第二种实现方式中,所述目标进程包含所述应用的进程的fork子进程,所述更新所述应用中的进程的分组状态,包括:从所述应用的多个进程中识别所述fork子进程;更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
现有技术中,AMS仅能管控zygote(zygote是用来创建进程的进程,可以称为孵化进程)创建的进程,无法管控应用进程的fork子进程,如果应用进程的fork子进程处于前台进程组,那么该fork子进程就会一直留在前台进程组,与前台应用的进程争抢资源,本方案基于fork子进程的父进程的分组状态更新fork子进程的分组状态,使fork子进程的分组状态与其父进程的分组状态保持一致,从而保证了fork子进程的分组状态能够得到实时更新,不会总是留在前台进程组,进一步地,将fork子进程与其父进程的分组状态保持一致,能够方便二者之间的资源共享。
结合第一方面的第二种实现方式,在第一方面的第三种实现方式中,所述从所述应用的多个进程中识别所述fork子进程,包括:从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
结合第一方面的第三种实现方式,在第一方面的第四种实现方式中,在所述从所述多个进程的cgroup.procs文件中查找所述fork子进程之前,所述方法还包括:根据所述应用的主进程的进程标识,确定所述应用的用户标识;根据所述应用的用户标识,查询所述多个进程的进程标识;根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
结合第一方面或其上述实现方式的任一种,在第一方面的第五种实现方式中,所述更新所述应用中的进程的分组状态,包括:确定所述应用的待分组的当前进程的关联进程;在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
现有技术中,当前进程的分组状态是基于关联进程的当前分组的前一次分组进行更新的,具体更新方式是将关联进程的前一次分组设置为当前进程的当前分组,如果按照现有技术的方式对当前进程的分组状态进行更新,会引起如下问题:假设某个应用从前台切换至后台,那么该应用中的进程的当前分组会被更新,更新的结果可能是前台进程组,也可能是后台进程组,但是,由于该应用之前位于前台,那么该应用的进程的当前分组的前一次分组均是前台进程组,这样一来,如果按照现有技术的处理方式,无论该应用进程的当前分组更新为前台进程组还是后台进程组,与该应用进程相关联的进程均会被留在前台进程组,本方案基于关联进程的当前分组更新当前进程的分组状态,使得当前进程的分组与其关联进程的当前分组保持一致,能够避免上述问题的发生,使得应用从前台切换至后台,与该应用进程相关联的进程也存在进入后台进程组的可能性。
结合第一方面或其上述实现方式的任一种,在第一方面的第六种实现方式中,所述更新所述应用中的进程的分组状态,包括:在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
现有技术中,在当前进程不包含处于可见状态或暂停状态的活动的情况下,需要根据当前进程是否具有前台服务更新当前进程的分组状态,如果当前进程具有前台服务,那么会将当前进程归入前台进程组并退出当前进程的分组状态更新流程,如果当前进程不具有前台服务,会将当前进程归入后台进程组,并继续根据当前进程是否被强制设置在前台,更新当前进程的分组状态,这样的更新方式会导致具有前台服务的进程全部留在前台进程组,与前台进程抢占资源,造成系统卡顿,本方案无需根据当前进程是否具有前台服务更新当前进程的分组状态,使得当前进程不会由于具有前台服务而留在前台进程组,一定程度上缓解了系统的卡顿现象。
第二方面,提供一种应用进程的管理方法,包括:从应用的多个进程中识别所述应用进程的fork子进程;更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
现有技术中,AMS无法管控应用进程的fork子进程,如果应用进程的fork子进程处于前台进程组,那么该fork子进程就会一直留在前台进程组,与前台应用的进程争抢资源,本方案基于fork子进程的父进程的分组状态更新fork子进程的分组状态,使fork子进程的分组状态与其父进程的分组状态保持一致,从而保证了fork子进程的分组状态能够得到实时更新,不会总是留在前台进程组,进一步地,将fork子进程与其父进程的分组状态保持一致,能够方便二者之间的资源共享。
结合第二方面,在第二方面的某些实现方式中,所述从所述应用的多个进程中识别所述fork子进程,包括:从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
结合第二方面,在第二方面的某些实现方式中,在所述从所述多个进程的cgroup.procs文件中查找所述fork子进程之前,所述方法还包括:根据所述应用的主进程的进程标识,确定所述应用的用户标识;根据所述应用的用户标识,查询所述多个进程的进程标识;根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
第三方面,提供一种应用进程的管理方法,包括:启动终端设备中的应用;当所述应用从前台切换至后台的事件发生时,确定所述应用的待分组的当前进程的关联进程;在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
现有技术中,当前进程的分组状态是基于关联进程的当前分组的前一次分组进行更新的,具体更新方式是将关联进程的前一次分组设置为当前进程的当前分组,如果按照现有技术的方式对当前进程的分组状态进行更新,会引起如下问题:假设某个应用从前台切换至后台,那么该应用中的进程的当前分组会被更新,更新的结果可能是前台进程组,也可能是后台进程组,但是,由于该应用之前位于前台,那么该应用的进程的当前分组的前一次分组均是前台进程组,这样一来,如果按照现有技术的处理方式,无论该应用进程的当前分组更为为前台进程组还是后台进程组,与该应用进程相关联的进程均会被留在前台进程组,本方案基于关联进程的当前分组更新当前进程的分组状态,使得当前进程的分组与其关联进程的当前分组保持一致,能够避免上述问题的发生,使得即使应用从前台切换至后台,与该应用进程相关联的进程也存在进入后台进程组的可能性。
第四方面,提供一种应用进程的管理方法,包括:启动终端设备中的应用;当所述应用从前台切换至后台的事件发生时,在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
现有技术中,在当前进程不包含处于可见状态或暂停状态的活动的情况下,需要根据当前进程是否具有前台服务更新当前进程的分组状态,如果当前进程具有前台服务,那么会将当前进程归入前台进程组并退出当前进程的分组状态更新流程,如果当前进程不具有前台服务,会将当前进程归入后台进程组,并继续根据当前进程是否被强制设置在前台,更新当前进程的分组状态,这样的更新方式会导致具有前台服务的进程全部留在前台进程组,与前台进程抢占资源,造成系统卡顿,本方案无需根据当前进程是否具有前台服务更新当前进程的分组状态,使得当前进程不会由于具有前台服务而留在前台进程组,一定程度上缓解了系统的卡顿现象。
第五方面,提供一种终端设备,包括用于执行第一方面至第四方面中的任一方面所描述的方法的单元。
第六方面,提供一种终端设备,包括存储器和处理器,所述存储器用于存储程序,所述处理器用于执行程序,当所述程序被执行时,所述处理器具体用于执行第一方面至第四方面中的任一方面所描述的方法。
第七方面,提供一种计算机可读介质,所述计算机可读介质用于存储程序代码,所述程序代码包含用于执行第一方面至第四方面中的任一方面所描述的方法的指令。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是现有的AMS管控流程的流程图。
图2是本发明实施例提供的终端设备的框架图。
图3是本发明实施例提供的计算机系统的框架图。
图4是本发明实施例提供的应用进程的管理方法的示意性流程图。
图5是图4中的步骤420的详细流程图。
图6是本发明实施例提供的应用进程的管理方法的示意性流程图。
图7是本发明实施例提供的终端设备的示意性结构图。
图8是本发明另一实施例提供的终端设备的示意性结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都应属于本发明保护的范围。
本发明实施例提供的应用进程的管理方法主要应用于终端设备,该终端设备也可称之为用户设备(User Equipment,简称为“UE”)、移动台(Mobile Station,简称为“MS”)、移动终端(Mobile Terminal)等,可选的,该终端可以具备经无线接入网(Radio AccessNetwork,RAN)与一个或多个核心网进行通信的能力,例如,终端可以是移动电话(或称为“蜂窝”电话)、或具有移动性质的计算机等,例如,终端还可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置。应理解的是,除了终端设备以外,本发明实施例提供的应用进程的管理方法也可以应用于其他类型的计算机系统。
请参考图1,为本发明实施例应用的终端设备的结构示意图。如图1所示,终端设备100包括存储器180、处理器150以及显示设备140。存储器180存储计算机程序,该计算机程序包括操作系统程序182和应用程序181等。处理器150用于读取存储器180中的计算机程序,然后执行计算机程序定义的方法,例如处理器150读取操作系统程序182从而在该终端设备100上运行操作系统以及实现操作系统的各种功能,或读取一种或多种应用程序181,从而在该终端设备上运行应用。
处理器150可以包括一个或多个处理器,例如,处理器150可以包括一个或多个中央处理器,或者包括一个中央处理器和一个图形处理器。当处理器150包括多个处理器时,这多个处理器可以集成在同一块芯片上,也可以各自为独立的芯片。一个处理器可以包括一个或多个处理核。
另外,存储器180还存储有除计算机程序之外的其他数据183,其他数据183可包括操作系统182或应用程序181被运行后产生的数据,该数据包括系统数据(例如操作系统的配置参数)和用户数据。
存储器180一般包括内存和外存。内存可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等。外存可以为硬盘、光盘、USB盘、软盘或磁带机等。计算机程序通常被存储在外存上,处理器在执行处理前会将计算机程序从外存加载到内存。
操作系统程序182中包含了可实现本发明实施例提供的应用进程的管理方法的计算机程序,从而使得处理器150读取到该操作系统程序182并运行该操作系统后,该操作系统可具备本发明实施例提供的应用进程的管理方法功能。
终端设备100还可以包括输入设备130,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与终端设备100的用户设置以及功能控制有关的信号输入等。具体地,本发明实施例中,该输入设备130可以包括触控面板131。触控面板131,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板131上或在触控面板131的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板131可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给该处理器150,并能接收处理器150发来的命令并加以执行。
触控面板131可以采用电阻式、电容式、红外线以及表面声波等多种类型实现。除了触控面板131,输入设备130还可以包括其他输入设备132,其他输入设备132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
终端设备100还可以包括显示设备140,显示设备140,包括显示面板141,用于显示由用户输入的信息或提供给用户的信息以及终端设备100的各种菜单界面等,在本发明实施例中主要用于处于前台的应用进程或终端设备的桌面。该显示设备140可包括显示面板141,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)或OLED(OrganicLight-Emitting Diode,有机发光二极管)等形式来配置显示面板141。在其他一些实施例中,触控面板131可覆盖显示面板141上,形成触摸显示屏。
除以上之外,终端设备100还可以包括用于给其他模块供电的电源190以及用于拍摄照片或视频的摄像头160。终端设备100还可以包括一个或多个传感器120,例如加速度传感器、光传感器等。终端设备100还可以包括无线射频(Radio Frequency,RF)电路110,用于与无线网络设备进行网络通信,还可以包括WiFi模块170,用于与其他设备进行WiFi通信。
本发明实施例提供的应用进程的管理方法可以实现在图1所示的操作系统182中。该操作系统可以为Android操作系统,下面结合图2,以Android操作系统为例,介绍本发明实施例提供的方法的实现位置。
请参阅图2,为本发明实施例提供的计算机系统200的结构示意图。该计算机系统可以是终端设备,包括应用层210和操作系统层250,该操作系统可以为Android操作系统。操作系统层250又分为框架层220、核心库层230和驱动层240。其中,图2中的操作系统层250可以认为是图1中操作系统182的一种具体实现,图2中的应用层210可以认为是图1中应用程序181的一种具体实现。驱动层240包括CPU驱动241、GPU驱动242以及显示控制器驱动243等。核心库层230是操作系统的核心部分,包括输入/输出服务231、核心服务232、图形设备接口234以及实现CPU或GPU图形处理的图形引擎(Graphics Engine)233等。图形引擎233可包括2D引擎、3D引擎、合成器(Composition)、帧缓冲区(Frame Buffer)、EGL(Embedded-System Graphics Library)等,其中EGL是一种渲染API与底层原始平台窗口系统之间的接口,API指的是应用程序编程接口(Application Programming Interface)。框架层220可包括图形服务(Graphic Service)224、系统服务(System service)221、网页服务(WebService)222和用户服务(Customer Service)223等;图形服务224中,可包括如微件(Widget)、画布(Canvas)以及视图(Views)等。应用层210可包括图库211、媒体播放器(Media Player)212以及浏览器(Browser)213等。
另外,在驱动层240之下,该计算机系统200还包括硬件层250。该计算机系统200的硬件层可以包括中央处理器(Central Processing Unit,CPU)251和图形处理器(GraphicProcessing Unit,GPU)252(相当于图1中的处理器150的一种具体实现),还可以包括存储器253(相当于图1中的存储器180),包括内存和外存,还可以包括输入设备254(相当于图1中的输入设备132)、显示设备255(相当于图1中的显示设备140),例如液晶显示器(LiquidCrystal Display,LCD)、全息成像(Holographic)、投影(Projector)等,还可以包括一个或多个传感器256(相当于图1中的传感器120)。当然除此之外,硬件层250还可以包括图1中示出的电源、摄像头、RF电路和WiFi模块,还可以包括图1中也没有示出的其他硬件模块,例如内存控制器和显示控制器等。
本发明实施例提供的应用进程的管理方法可以在图2中的操作系统执行层250中实现。
上文指出,现有技术为了缓解前台应用的卡顿现象,引入了基于cgroup的前后台机制。但是,即使引入该前后台机制,当同时运行的应用较多时,前台应用仍会出现卡顿现象,经过研究发现,这种卡顿现象是由于应用切换至后台以后,应用中的部分进程仍满足留在前台进程组的条件而造成的。也就是说,现有技术中,即使应用切换至后台,由于某些进程仍满足留在前台进程组的条件,它们就会留在前台进程组,与前台应用的进程抢占资源,从而导致前台应用出现卡顿现象。
为了便于描述,下文将“应用切换至后台之后,仍满足留在前台进程组的条件的进程”称为应用的目标进程,需要说明的是,本发明实施例对目标进程的类型不作具体限定,下面进行举例说明。
在一些实施例中,目标进程可以包括不受活动管理服务(Activity ManagerService,AMS)管控的进程,如应用进程的fork子进程。下面分析应用切换至后台之后,这种类型的进程会留在前台进程组的原因。AMS是操作系统的重要组成部分,主要提供以下主要功能:统一调度各应用的活动(Activity);内存管理;以及进程管理。AMS属于图2中的系统服务221的一部分。
基于cgroup的前后台分组机制是在AMS的管控之下进行的,即由AMS来更新进程的分组状态。但是,AMS仅能管控zygote(zygote是用来创建进程的进程,可以称为孵化进程)创建的进程,应用进程的fork子进程(即应用进程以fork方式创建的子进程,或者,应用本身通过fork()调用产生的子进程)不受AMS的管控,这样会导致应用进程的fork子进程的分组状态无法得到更新,这样就会导致某些fork子进程始终留在前台进程组。
在一些实施例中,目标进程可以包括受AMS管控的进程,如具有前台服务的进程、被强制设置在前台的进程等。
具体地,在现有的AMS管控流程中,当应用前后台切换事件发生时,AMS会基于一定的条件和逻辑更新受AMS管控的进程的分组状态。换句话说,应用前后台切换事件发生时,满足某些条件的进程会随着应用切换至后台而进入后台进程组,但满足某些条件的进程会留在前台进程组,如前文提到的具有前台服务的进程。为了便于理解,先结合图3,介绍现有的AMS管控流程。
图3是现有的AMS管控流程的流程图,AMS会基于图3所示的管控流程对受其管控的进程的分组状态进行更新。
301、确定应用从前台切换至后台。
应理解,除了应用从前台切换至后台这一事件之外,还有许多其它事件可能会触发AMS的管控流程。例如,应用启动事件、应用从后台切换至前台事件、进程接收广播事件等。
302、判断当前进程是否为前台进程或正在接收广播的进程。
如果当前进程是前台进程或正在接收广播的进程,执行步骤313,将其归入前台进程组并退出;如果当前进程不是前台进程,也不是正在接收广播的进程,执行步骤303。
应理解,在步骤301对应的事件发生时,受AMS管控的进程一般均会按照图3所示的流程进行进程组的更新,步骤302中的当前进程指终端设备中的受AMS管控的某个进程,且该进程正在通过图3的流程进行分组状态的更新。
303、将当前进程所属的进程组设置为后台进程组。
304、判断当前进程是否包含可见状态或暂停状态的活动。
安卓系统定义了四大组件,分别是活动(activity)、服务(service)、内容提供者(content provider)以及广播接收器(broadcast receiver)。
活动通常是一个单独的窗口,活动之间会通过Intent进行通信。进一步地,活动一般包括四种基本状态:激活状态或运行状态(active or running)、暂停状态(paused)、停止状态(stop)以及被杀状态(killed)。
在步骤304中,如果当前进程包含可见状态或暂停状态的活动,执行步骤313,将其归入前台进程组并退出(即结束当前进程的分组状态更新流程);如果当前进程不包含可见状态或暂停状态的活动,执行步骤305。
305、判断当前进程是否具有前台服务。
服务一般是一段生命周期长、没有用户界面的程序,该程序通常在后台运行。位于后台的服务优先级低,存在被杀掉的可能,因此,有些应用会通过startForeground函数让服务在前台运行。
如果当前进程具有前台服务,执行步骤313,将其归入前台进程组并退出;如果当前进程不具有前台服务,执行步骤306。
306、判断当前进程是否被强制设置在前台。
有些应用为了保证其某些进程不被杀掉,会通过setProcessForeground函数,将这些进程强制设置在前台。如果当前进程被强制设置在前台,执行步骤313,将其归入前台进程组并退出;如果当前进程未被强制设置在前台,执行步骤307。
307、判断当前进程是否具有Heavy Weight属性(重量级属性)。
具有Heavy Weight属性的进程即使放在后台,也不容易被杀掉。因此,在步骤307中,如果进程具有Heavy Weight属性,则执行步骤310,将其归入后台进程组;如果进程不具有Heavy Weight属性,则执行步骤308。
308、判断当前进程是否为桌面进程。
如果当前进程为桌面进程,执行步骤310,将其归入后台进程组;如果当前进程不为桌面进程,则执行步骤309。
309、判断当前进程是否为前一个处于前台的应用的进程。
如果当前进程为前一个处于前台的应用的进程,执行步骤310,将其归入后台进程组;如果当前进程不为前一个处于前台的应用的进程,则执行步骤311。应理解,根据用户的操作,处于前台的应用是在不断变化的,例如,用户首先启动应用A,则应用A处于前台,接着,用户又启动应用B,此时,应用B成为前台应用,此时,应用A成为前一个处于前台的应用;接下来,如果用户按下HOME键,使得应用B从前台切换至后台,那么应用B就变成前一个处于前台的应用。
310、将当前进程归入后台进程组。
311、确定当前进程是否具有关联进程。
具体地,可以通过判断当前进程是否有正在运行的服务或者内容提供者(通过内容提供者可以将一个应用程序的指定数据集提供给其它应用使用,即通过内容提供者可以实现应用之间的数据共享)来判断当前进程是否具有关联进程。
如果当前进程具有正在运行的服务或内容提供者,表明当前进程具有关联进程,执行步骤312;否则直接退出。
312、根据关联进程的前一次分组更新当前进程的分组状态。
具体地,假设关联进程前一次分组为前台进程组,则将当前进程归入前台进程组;假设关联进程前一次分组为后台进程组,则将当前进程归入后台进程组,即将当前进程的当前分组与关联进程的前一次分组保持一致。
应理解,终端设备内部通过AMS不断更新进程的分组状态,当所述应用从前台切换至后台的事件发生时,受AMS管控的进程会进行分组状态的更新,从前一次分组更新至当前分组,当然,进程的前一次分组和当前分组可以是同一分组,也可以是不同分组。因此,关联进程的前一次分组可以指AMS最后一次更新关联进程的分组状态前,关联进程所属的分组,关联进程的当前分组可以指AMS最后一次更新关联进程的分组状态后,关联进程所属的分组,关联进程的前一次分组和当前分组可以相同,也可以不同。
313、将当前进程归入前台进程组。
从图3的流程可以看出,应用切换至后台以后,该应用中的受AMS管控的某些进程会由于满足图3流程中的某些条件而被留在前台进程组,本发明实施例的目标进程可以包括这种类型的目标进程。例如,目标进程可以包括以下进程中的至少一种:具有关联进程的进程,且关联进程的当前分组的前一次分组为前台进程组;具有前台服务的进程;以及被强制设置在前台的进程。
为了缓解后台应用的进程与前台应用的进程抢占资源的现象,当应用从前台切换至后台的事件发生时,可以通过一定方式将目标进程中的部分或全部进程设置到后台进程组。下面结合图4,详细描述本发明实施例的应用进程的管理方法。
图4是本发明实施例的应用进程的管理方法的示意性流程图。图4的方法可以由终端设备执行,具体可以由终端设备的操作系统执行,如图2中的操作系统层250。图4的方法包括:
410、启动终端设备中的应用。
具体地,上述应用(APP)可以指终端设备中的当前正在运行的应用。例如,可以是终端设备当前打开的购物应用,音乐应用或社交网络应用等。
420、当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组。
如前文所述,目标进程是应用切换至后台之后,仍满足留在前台进程组的条件的进程,如果沿用现有技术,目标进程就会留在前台进程组,与前台进程抢占资源,本发明实施例当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,能够一定程度上缓解目标进程与前台进程抢占资源的现象。
需要说明的是,目标进程可以包括不受AMS管控的进程,如应用的进程的fork子进程;或者,目标进程可以包括受AMS管控的进程,如应用中的具有关联进程的进程,且关联进程的当前分组的前一次分组为前台进程组,应用中的具有前台服务的进程,或者应用中的被强制设置在前台的进程。不同类型的目标进程对应的步骤420的执行方式可以不同,下面结合具体的实施例进行详细描述。
可选地,在一些实施例中,目标进程包含应用的进程的fork子进程,步骤420可包括:从应用的多个进程中识别应用进程的fork子进程;将fork子进程所属的进程组设置为后台进程组。
例如,应用包括进程1、进程2、进程3和进程4,其中,进程2和进程3是识别出的fork子进程,此时,进程1和进程4可以基于AMS更新其所属的进程组,而进程2和进程3所属的进程组可以直接设置为后台进程组。
本发明实施例将识别出的fork子进程直接转移至后台进程组,操作简单,易于实现。
可选地,在另一些实施例中,如图5所示,目标进程包含应用的进程的fork子进程(分叉子进程),步骤420可包括:
422、从应用的多个进程中识别应用进程的fork子进程。
424、更新fork子进程的分组状态,使fork子进程的分组状态与fork子进程的父进程的分组状态保持一致。
本发明实施例基于fork子进程的父进程的分组状态更新fork子进程的分组状态,使fork子进程的分组状态与其父进程的分组状态保持一致,从而保证了fork子进程的分组状态能够得到实时更新,进一步地,将fork子进程与其父进程的分组状态保持一致,能够方便二者之间的资源共享。
具体地,步骤424可包括:通过AMS更新应用中的除该fork子进程之外的剩余进程的分组状态;根据该剩余进程的分组状态更新fork子进程的分组状态,使fork子进程的分组状态与fork子进程的父进程的分组状态保持一致。
需要说明的是,本发明实施例中,虽然fork子进程的分组状态的更新需要基于除fork子进程之外的剩余进程的分组状态的更新,但本实施例并不限定要将剩余进程的分组状态全部更新完毕,再去更新fork子进程的分组状态,既可以将剩余进程的分组状态全部更新完毕,再去更新fork子进程的分组状态,也可以将二者交叉进行。举例说明,假设应用包括进程1、进程2、进程3和进程4,其中,进程3和进程4是识别出的fork子进程,进程1是进程3的父进程,进程2是进程4的父进程,则进程1和进程2是除fork子进程之外的剩余进程。一种可行的更新方式:先基于AMS更新进程1和进程2的分组状态,然后更新进程3和进程4的分组状态,使其分别与进程1和进程2的分组状态保持一致;另一种可行的更新方式:先基于AMS更新进程1的分组状态,然后更新进程3的分组状态,使其与进程1的分组状态保持一致,再基于AMS更新进程2的分组状态,然后更新进程4的分组状态,使其与进程2的分组状态保持一致。
进一步地,在一些实施例中,如果某个fork子进程(下称第一fork子进程)的父进程也是fork子进程(下称第二fork子进程),且第二fork子进程的父进程是受AMS管控的进程,则可以先基于AMS更新第二fork子进程的父进程的分组状态,然后再更新第二fork子进程的分组状态,使第二fork子进程的分组状态与其父进程的分组状态保持一致,然后再更新第一fork子进程的分组状态,使第一fork子进程的分组状态与第二fork子进程的分组状态保持一致。
进一步地,将fork子进程的分组状态与其父进程的分组状态保持一致的方式有多种,例如,可以调用setProcessGroup函数调节fork子进程的进程组,使fork子进程的进程组与其父进程的进程组保持一致。
应理解,步骤422的实现方式可以有多种,可选地,作为一种实现方式,可以预先记录应用进程的fork子进程,例如,可以预先建立fork子进程的记录表,应用每fork出一个子进程,就在该记录表中记录该子进程的进程标识,需要使用时,可以查找该记录表,从而识别fork子进程。
可选地,作为另一种实现方式,步骤422可包括:从多个进程的cgroup.procs文件中查找fork子进程,其中,多个进程的cgroup.procs文件中记录了fork子进程的进程标识。
具体地,cgroup.procs文件是cgroup机制支持的一种文件类型,一个进程对应一个cgroup.procs文件,该cgroup.procs文件中记录了该进程的进程标识,以及该进程的fork子进程的进程标识。一个进程对应的cgroup.procs文件通常位于如下文件路径:/acct/uid_xxx/pid_xxx/cgroup.procs,其中,uid_xxx表示应用的用户标识,pid_xxx表示该进程的进程标识
假设应用包括进程1、进程2、进程3以及进程4,其中,进程1的cgroup.procs文件记录了进程1的进程标识和进程3的进程标识,则进程3为进程1的fork子进程;进程2的cgroup.procs文件记录了进程2的进程标识,则进程2没有fork子进程;进程3的cgroup.procs文件记录了进程3的进程标识和进程4的进程标识,则进程4为进程3的fork子进程;进程4的cgroup.procs文件记录了进程4的标识,则进程4没有fork子进程。综上可知,从以上4个进程的cgroup.procs文件中查询出的fork子进程为进程3和进程4。
需要说明的是,并不是应用的每个进程均会有fork子进程,因此,为了简化实现,步骤422可以采用如下方式进行:先查询某个进程的cgroup.procs文件中记录的进程数,如果进程数大于1,说明该进程具有fork子进程;如果进程数为1,说明该进程不具有fork子进程,继续查询下一个进程的cgroup.procs文件,直到所有进程的cgroup.procs文件均查询完毕。
在一些实施例中,可以先确定应用的多个进程的cgroup.procs文件的路径,再从中查找应用进程的fork子进程。具体地,应用的多个进程的cgroup.procs文件的路径可以通过如下方式获得:根据应用的主进程的进程标识,确定应用的用户标识;根据应用的用户标识,查询多个进程的进程标识;根据应用的用户标识,以及多个进程的进程标识,确定多个进程的cgroup.procs文件的路径。
具体地,每个应用具有一个用户标识(uid),用于唯一标识该应用。应用的用户标识的获取方式有多种,例如,可以通过查询应用的配置信息,确定该应用的用户标识;又如,可以根据应用的主进程标识,确定该应用的用户标识,例如,可以调用如下函数:process.getUidForPid(pid_main)来获取应用的用户标识,其中,pid_main表示应用的主进程标识,该函数返回的结果为应用的用户标识。
应用的多个进程的进程标识的获取方式可以有多种,例如,可以先获取应用的用户标识uid_xxx,然后在/acct/uid_xxx文件中找到该应用包含的进程的进程标识;又如,可以预先建立应用进程的进程标识记录表,应用每生成一个进程,就在该记录表中记录该进程的进程标识,需要使用时,可以通过该记录表获得应用进程的进程标识。
在一些实施例中,考虑到应用进程的fork子进程产生的延迟性,可以预先设置一个计数值以及计数值阈值,该计数值指示应用进程的fork子进程的查询次数,当应用从前台切换至后台的事件发生时,如果计数值小于计数阈值,则从应用进程的cgroup.procs文件查询应用进程的fork子进程;如果计数值大于或等于计数阈值,则认为应用的fork子进程基本保持不变,可以重复使用上一次的查询结果,以加快fork子进程的识别速度。
在一些实施例中,为了便于查询,应用进程的fork子进程可以通过表格的方式进行记录。
例如,该表格可以是键值形式的对照表,键为应用的主进程的进程标识,值为应用进程的fork子进程的进程标识列表。以表一为例,假设应用为应用A,应用A包括4个进程,该4个进程的进程标识依次为:6726,6752,6763,8092,其中,6726为主进程的进程标识,6752和6763为应用进程的fork子进程的进程标识,表一的后两列按照键值方式记录了应用的主进程与应用进程的fork子进程的对应关系
表一
上文主要描述的是应用从前台切换至后台的事件发生时,应用进程的fork子进程的分组状态的更新方式。进一步地,在一些实施例中,应用从后台切换至前台的事件发生时,可以直接将应用进程的fork子进程归入前台进程组,或者将应用进程的fork子进程的分组状态与其父进程的分组状态保持一致,具体过程与应用从前台切换至后台的过程类似,此处不再详述。
可选地,在一些实施例中,目标进程可以包括受AMS管控的进程。下面详细描述当应用从前台切换至后台的事件发生时,如何将这类目标进程中的至少部分进程设置到后台进程组。
从图3的步骤312可以看出,现有技术中,待分组的当前进程的分组状态是基于关联进程的当前分组的前一次分组进行更新的,具体更新方式是将关联进程的前一次分组设置为当前进程的当前分组,如果按照现有技术的方式对当前进程的分组状态进行更新,会引起如下问题:假设某个应用从前台切换至后台,那么该应用中的进程的当前分组会被更新,更新的结果可能是前台进程组,也可能是后台进程组,但是,由于该应用之前位于前台,那么该应用的进程的当前分组的前一次分组均是前台进程组,这样一来,如果按照现有技术的处理方式,无论该应用进程的当前分组更新为前台进程组还是后台进程组,与该应用进程相关联的进程均会被留在前台进程组,与前台进程抢占资源,造成系统卡顿。
本发明实施例中的目标进程可以包括这种因关联关系而留在前台进程组的进程。为了缓解这种类型的目标进程留在前台而引起的系统卡顿现象,可以通过如下方式实现步骤420:确定应用的待分组的当前进程的关联进程;在关联进程的当前分组为前台进程组的情况下,将当前进程归入前台进程组;在关联进程的当前分组为后台进程组的情况下,将当前进程归入后台进程组。
应理解,上述过程可以在基于AMS更新当前进程的分组状态的过程中进行。具体地,应用的待分组的当前进程是受AMS管控的进程,当应用从前台切换至后台的事件发生时,该当前进程会执行图3所示的AMS管控流程,上文描述的确定应用的当前进程与终端设备的其他进程具有关联关系可以由图3中的步骤311实现,如果当前进程执行到步骤311,说明当前进程目前属于后台进程组,接下来会通过步骤312,基于关联进程更新当前进程的分组状态。为了避免上文指出的因关联关系导致的某些后台应用的进程留在前台进程组的问题,本发明实施例将步骤312的逻辑修改为:根据关联进程的当前分组,更新当前进程的分组状态,在关联进程的当前分组为前台进程组的情况下,将当前进程归入前台进程组;在关联进程的当前分组为后台进程组的情况下,将当前进程归入后台进程组。
本发明实施例基于关联进程的当前分组更新当前进程的分组状态,使得应用从前台切换至后台之后,与该应用进程相关联的进程也存在进入后台进程组的可能性。
从图3的步骤305可以看出,现有技术中,如果当前进程具有前台服务,则当前进程会被归入前台进程组,而将进程的服务置于前台通常是通过startForeground函数实现的。换句话说,如果过多的使用startForeground函数会导致过多的后台应用的进程留在前台进程组,与前台应用抢占资源。
本发明实施例中的目标进程可以包括这种由于具有前台服务而留在前台进程组的进程。为了缓解这种类型的目标进程留在前台而引起的系统卡顿问题,可以采用如下方式实现步骤420:在应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据当前进程是否被强制设置在前台,更新当前进程的分组状态;如果当前进程被强制设置在前台,将当前进程归入前台进程组;如果当前进程未被强制设置在前台,将当前进程归入后台进程组。
应理解,上述过程可以在基于AMS更新当前进程的分组状态的过程中进行。具体地,从图3可以看出,现有技术中,如果当前进程不包含处于可见状态或暂停状态的活动,需要执行步骤305,即判断当前进程是否具有前台服务。而在本发明实施例中,如果当前进程不包含处于可见状态或暂停状态的活动,无需执行步骤305,直接执行步骤306,即根据当前进程是否被强制设置在前台,更新当前进程的分组状态。这样不但简化了AMS的进程组更新流程,而且当前进程不会因为其具有前台服务而留在前台进程组,缓解了系统的卡顿现象。
下面结合具体例子,更加详细地描述本发明实施例。应注意,图6的例子仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的图6的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。
图6是本发明实施例的AMS管控流程的流程图。
601、确定应用从前台切换至后台。
602、判断当前进程是否为前台进程或正在接收广播的进程。
603、将当前进程所属的进程组设置为后台进程组。
604、判断当前进程是否包含可见状态或暂停状态的活动。
步骤601-604与图3中的步骤301-304类似,具体参见图3的描述,此处不再详述。
605、判断当前进程是否被强制设置在前台。
对比图6和图3可以看出,在图6的实施例中,在当前进程不包含处于可见状态或暂停状态的活动的情况下,无需判断当前进程是否具有前台服务,直接根据当前进程是否被强制设置在前台,更新当前进程的分组状态。这样能够避免具有前台服务的进程留在前台,与前台应用抢占资源。
606、判断当前进程是否具有Heavy Weight属性。
607、判断当前进程是否为桌面进程。
608、判断当前进程是否为前一个处于前台的应用的进程。
609、将当前进程归入后台进程组。
610、确定当前进程是否具有关联进程。
步骤606-610与图3中的步骤307-311类似,具体参见图3的描述,此处不再详述。
611、根据关联进程的当前分组更新当前进程的分组状态。
该步骤对应于图3中的步骤312,步骤312是根据关联进程的前一次分组更新当前进程的分组状态,与步骤312不同的是,步骤611是根据关联进程的当前分组更新当前进程的分组状态。具体地,在关联进程的当前分组为前台进程组的情况下,将当前进程归入前台进程组;在关联进程的当前分组为后台进程组的情况下,将当前进程归入后台进程组。
图3描述的现有技术中,当前进程的分组状态是基于关联进程的当前分组的前一次分组进行更新的,具体更新方式是将关联进程的前一次分组设置为当前进程的当前分组,如果按照现有技术的方式对当前进程的分组状态进行更新,会引起如下问题:假设某个应用从前台切换至后台,那么该应用中的进程的当前分组会被更新,更新的结果可能是前台进程组,也可能是后台进程组,但是,由于该应用之前位于前台,那么该应用的进程的当前分组的前一次分组均是前台进程组,这样一来,如果按照现有技术的处理方式,无论该应用进程的当前分组更新为前台进程组还是后台进程组,与该应用进程相关联的进程均会被留在前台进程组,本发明实施例基于关联进程的当前分组更新当前进程的分组状态,能够避免上述问题的发生,使得应用从前台切换至后台,与该应用进程相关联的进程也存在进入后台进程组的可能性。
612、将当前进程归入前台进程组。
上文结合图1-6,详细描述了本发明的方法实施例,下文结合图7-8,详细描述本发明的装置实施例,装置实施例与方法实施例相互对应,未详细描述的部分可以参见上述方法实施例。
图7是本发明实施例的终端设备的示意性结构图。图7的终端设备700包括:
启动单元710,用于启动终端设备中的应用;
更新单元720,用于当所述应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态,使所述应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,所述目标进程是所述应用切换至后台之后,仍满足留在前台进程组的条件的进程。
目标进程是应用切换至后台之后,仍满足留在前台进程组的条件的进程,如果沿用现有技术,目标进程就会留在前台进程组,与前台进程抢占资源,本发明实施例中,当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,能够一定程度上减少与前台进程抢占资源的进程的数量,从而缓解系统的卡顿现象。
可选地,作为一个实施例,所述目标进程包括以下进程中的至少一种:所述应用的进程的fork子进程;具有关联进程的进程,且所述关联进程的当前分组的前一次分组为前台进程组;以及被强制设置在前台的进程。
可选地,作为一个实施例,所述目标进程包含所述应用的进程的fork子进程,所述更新单元720具体用于从所述应用的多个进程中识别所述fork子进程;更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
可选地,作为一个实施例,所述更新单元720具体用于从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
可选地,作为一个实施例,所述终端设备还包括:第一确定单元,用于根据所述应用的主进程的进程标识,确定所述应用的用户标识;查询单元,用于根据所述应用的用户标识,查询所述多个进程的进程标识;第二确定单元,用于根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
可选地,作为一个实施例,所述更新单元720具体用于确定所述应用的待分组的当前进程的关联进程;在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
可选地,作为一个实施例,所述更新单元720具体用于在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
图8是本发明实施例的终端设备的示意性结构图。图8的终端设备800包括:
存储器810,用于存储程序;
处理器820,用于执行存储器810中存储的程序,当所述程序被执行时,所述处理器820用于启动终端设备中的应用;当所述应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态,使所述应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,所述目标进程是所述应用切换至后台之后,仍满足留在前台进程组的条件的进程。
目标进程是应用切换至后台之后,仍满足留在前台进程组的条件的进程,如果沿用现有技术,目标进程就会留在前台进程组,与前台进程抢占资源,本发明实施例中,当应用从前台切换至后台的事件发生时,更新应用中的进程的分组状态,使应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,能够一定程度上减少与前台进程抢占资源的进程的数量,从而缓解系统的卡顿现象。
可选地,作为一个实施例,所述目标进程包括以下进程中的至少一种:所述应用的进程的fork子进程;具有关联进程的进程,且所述关联进程的当前分组的前一次分组为前台进程组;以及被强制设置在前台的进程。
可选地,作为一个实施例,所述目标进程包含所述应用的进程的fork子进程,所述处理器820具体用于从所述应用的多个进程中识别所述fork子进程;更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
可选地,作为一个实施例,所述处理器820具体用于从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
可选地,作为一个实施例,所述处理器820还用于根据所述应用的主进程的进程标识,确定所述应用的用户标识;根据所述应用的用户标识,查询所述多个进程的进程标识;根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
可选地,作为一个实施例,所述处理器820具体用于确定所述应用的待分组的当前进程的关联进程;在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
可选地,作为一个实施例,所述处理器820具体用于在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (14)
1.一种应用进程的管理方法,其特征在于,包括:
启动终端设备中的应用;
当所述应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态,使所述应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,所述目标进程是所述应用切换至后台之后,仍满足留在前台进程组的条件的进程。
2.如权利要求1所述的方法,其特征在于,所述目标进程包括以下进程中的至少一种:
所述应用的进程的fork子进程;
具有关联进程的进程,且所述关联进程的当前分组的前一次分组为前台进程组;以及
被强制设置在前台的进程。
3.如权利要求1或2所述的方法,其特征在于,所述目标进程包含所述应用的进程的fork子进程,
所述更新所述应用中的进程的分组状态,包括:
从所述应用的多个进程中识别所述fork子进程;
更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
4.如权利要求3所述的方法,其特征在于,所述从所述应用的多个进程中识别所述fork子进程,包括:
从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
5.如权利要求4所述的方法,其特征在于,在所述从所述多个进程的cgroup.procs文件中查找所述fork子进程之前,所述方法还包括:
根据所述应用的主进程的进程标识,确定所述应用的用户标识;
根据所述应用的用户标识,查询所述多个进程的进程标识;
根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
6.如权利要求1或2所述的方法,其特征在于,所述更新所述应用中的进程的分组状态,包括:
确定所述应用的待分组的当前进程的关联进程;
在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;
在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
7.如权利要求1或2所述的方法,其特征在于,所述更新所述应用中的进程的分组状态,包括:
在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;
如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;
如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
8.一种终端设备,其特征在于,包括:
启动单元,用于启动终端设备中的应用;
更新单元,用于当所述应用从前台切换至后台的事件发生时,更新所述应用中的进程的分组状态,使所述应用的目标进程中的至少部分进程从前台进程组转移至后台进程组,所述目标进程是所述应用切换至后台之后,仍满足留在前台进程组的条件的进程。
9.如权利要求8所述的终端设备,其特征在于,所述目标进程包括以下进程中的至少一种:
所述应用的进程的fork子进程;
具有关联进程的进程,且所述关联进程的当前分组的前一次分组为前台进程组;以及
被强制设置在前台的进程。
10.如权利要求8或9所述的终端设备,其特征在于,所述目标进程包含所述应用的进程的fork子进程,
所述更新单元具体用于从所述应用的多个进程中识别所述fork子进程;更新所述fork子进程的分组状态,使所述fork子进程的分组状态与所述fork子进程的父进程的分组状态保持一致。
11.如权利要求10所述的终端设备,其特征在于,所述更新单元具体用于从所述多个进程的cgroup.procs文件中查找所述fork子进程,其中,所述多个进程的cgroup.procs文件中记录了所述fork子进程的进程标识。
12.如权利要求11所述的终端设备,其特征在于,所述终端设备还包括:
第一确定单元,用于根据所述应用的主进程的进程标识,确定所述应用的用户标识;
查询单元,用于根据所述应用的用户标识,查询所述多个进程的进程标识;
第二确定单元,用于根据所述应用的用户标识,以及所述多个进程的进程标识,确定所述多个进程的cgroup.procs文件的路径。
13.如权利要求8或9所述的终端设备,其特征在于,所述更新单元具体用于确定所述应用的待分组的当前进程的关联进程;在所述关联进程的当前分组为前台进程组的情况下,将所述当前进程归入前台进程组;在所述关联进程的当前分组为后台进程组的情况下,将所述当前进程归入后台进程组。
14.如权利要求8或9所述的终端设备,其特征在于,所述更新单元具体用于在所述应用的待分组的当前进程不包含处于可见状态或暂停状态的活动的情况下,根据所述当前进程是否被强制设置在前台,更新所述当前进程的分组状态;如果所述当前进程被强制设置在前台,将所述当前进程归入前台进程组;如果所述当前进程未被强制设置在前台,将所述当前进程归入后台进程组。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610815139.0A CN107807847B (zh) | 2016-09-09 | 2016-09-09 | 应用进程的管理方法和终端设备 |
EP17848107.3A EP3506093A4 (en) | 2016-09-09 | 2017-09-05 | METHOD OF MANAGING AN APPLICATION PROCESS AND TERMINAL DEVICE |
PCT/CN2017/100444 WO2018045934A1 (zh) | 2016-09-09 | 2017-09-05 | 应用进程的管理方法和终端设备 |
US16/296,503 US20190205160A1 (en) | 2016-09-09 | 2019-03-08 | Application Process Management Method And Terminal Device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610815139.0A CN107807847B (zh) | 2016-09-09 | 2016-09-09 | 应用进程的管理方法和终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107807847A true CN107807847A (zh) | 2018-03-16 |
CN107807847B CN107807847B (zh) | 2022-04-29 |
Family
ID=61561649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610815139.0A Active CN107807847B (zh) | 2016-09-09 | 2016-09-09 | 应用进程的管理方法和终端设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20190205160A1 (zh) |
EP (1) | EP3506093A4 (zh) |
CN (1) | CN107807847B (zh) |
WO (1) | WO2018045934A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920263A (zh) * | 2018-06-08 | 2018-11-30 | 上海连尚网络科技有限公司 | 用于应用保持的方法与设备 |
CN110096348A (zh) * | 2019-03-29 | 2019-08-06 | 努比亚技术有限公司 | 后台应用控制方法、可穿戴设备及计算机可读存储介质 |
CN110806926A (zh) * | 2019-09-05 | 2020-02-18 | 华为技术有限公司 | 一种资源管控方法及设备 |
CN112506629A (zh) * | 2020-11-27 | 2021-03-16 | 努比亚技术有限公司 | 一种系统调度优化方法、终端及计算机可读存储介质 |
CN113791888A (zh) * | 2021-11-17 | 2021-12-14 | 北京鲸鲮信息系统技术有限公司 | Linux应用进程管理方法及装置 |
CN115080158A (zh) * | 2021-03-12 | 2022-09-20 | Oppo广东移动通信有限公司 | 界面显示方法、装置、终端设备及计算机可读存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107742A (zh) * | 2021-06-10 | 2023-05-12 | 荣耀终端有限公司 | 虚拟内存管理方法和电子设备 |
CN114579200A (zh) * | 2022-02-28 | 2022-06-03 | 联想(北京)有限公司 | 一种数据处理方法及装置 |
CN114968551B (zh) * | 2022-03-10 | 2023-09-19 | 中移互联网有限公司 | 一种进程管理的方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103443770A (zh) * | 2011-03-19 | 2013-12-11 | 富士通株式会社 | 终端装置、进程管理方法以及进程管理程序 |
CN104050035A (zh) * | 2014-05-14 | 2014-09-17 | 小米科技有限责任公司 | 应用程序的处理方法及装置 |
CN104252389A (zh) * | 2013-06-27 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 应用程序运行方法、系统及应用程序 |
CN105045669A (zh) * | 2015-08-26 | 2015-11-11 | 北京元心科技有限公司 | 容器系统的管理服务方法以及智能终端 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7962911B2 (en) * | 2007-02-02 | 2011-06-14 | International Business Machines Corporation | Method and apparatus for preventing undesired termination of a process in an information handling system |
CN101788926B (zh) * | 2009-12-28 | 2014-04-30 | 中兴通讯股份有限公司 | J2me应用前台切换的资源调配方法及装置 |
US8375394B2 (en) * | 2011-01-18 | 2013-02-12 | Novell, Inc. | Techniques to automatically classify processes |
TW201241640A (en) * | 2011-02-14 | 2012-10-16 | Microsoft Corp | Dormant background applications on mobile devices |
US8886976B2 (en) * | 2011-04-11 | 2014-11-11 | Microsoft Corporation | Management of background tasks |
US9952897B2 (en) * | 2011-09-12 | 2018-04-24 | Microsoft Technology Licensing, Llc | Managing processes within suspend states and execution states |
-
2016
- 2016-09-09 CN CN201610815139.0A patent/CN107807847B/zh active Active
-
2017
- 2017-09-05 WO PCT/CN2017/100444 patent/WO2018045934A1/zh unknown
- 2017-09-05 EP EP17848107.3A patent/EP3506093A4/en not_active Ceased
-
2019
- 2019-03-08 US US16/296,503 patent/US20190205160A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103443770A (zh) * | 2011-03-19 | 2013-12-11 | 富士通株式会社 | 终端装置、进程管理方法以及进程管理程序 |
CN104252389A (zh) * | 2013-06-27 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 应用程序运行方法、系统及应用程序 |
CN104050035A (zh) * | 2014-05-14 | 2014-09-17 | 小米科技有限责任公司 | 应用程序的处理方法及装置 |
CN105045669A (zh) * | 2015-08-26 | 2015-11-11 | 北京元心科技有限公司 | 容器系统的管理服务方法以及智能终端 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920263A (zh) * | 2018-06-08 | 2018-11-30 | 上海连尚网络科技有限公司 | 用于应用保持的方法与设备 |
CN110096348A (zh) * | 2019-03-29 | 2019-08-06 | 努比亚技术有限公司 | 后台应用控制方法、可穿戴设备及计算机可读存储介质 |
CN110806926A (zh) * | 2019-09-05 | 2020-02-18 | 华为技术有限公司 | 一种资源管控方法及设备 |
CN112506629A (zh) * | 2020-11-27 | 2021-03-16 | 努比亚技术有限公司 | 一种系统调度优化方法、终端及计算机可读存储介质 |
CN112506629B (zh) * | 2020-11-27 | 2023-08-22 | 努比亚技术有限公司 | 一种系统调度优化方法、终端及计算机可读存储介质 |
CN115080158A (zh) * | 2021-03-12 | 2022-09-20 | Oppo广东移动通信有限公司 | 界面显示方法、装置、终端设备及计算机可读存储介质 |
CN113791888A (zh) * | 2021-11-17 | 2021-12-14 | 北京鲸鲮信息系统技术有限公司 | Linux应用进程管理方法及装置 |
WO2023087765A1 (zh) * | 2021-11-17 | 2023-05-25 | 北京字节跳动网络技术有限公司 | Linux应用进程管理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3506093A1 (en) | 2019-07-03 |
EP3506093A4 (en) | 2019-09-04 |
CN107807847B (zh) | 2022-04-29 |
WO2018045934A1 (zh) | 2018-03-15 |
US20190205160A1 (en) | 2019-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807847A (zh) | 应用进程的管理方法和终端设备 | |
CN107766128A (zh) | 一种启动应用的方法及装置 | |
CN103797460A (zh) | 电子装置中的应用控制 | |
CN107783833B (zh) | 一种终端后台应用程序的管理方法及装置 | |
CN108009006A (zh) | I/o请求的调度方法及装置 | |
CN107885666A (zh) | 一种内存管理方法和装置 | |
CN104838360A (zh) | 基于配额的资源管理 | |
US20140359538A1 (en) | Systems and methods for moving display objects based on user gestures | |
CN110377527A (zh) | 一种内存管理的方法以及相关设备 | |
CN109992400A (zh) | 资源分配方法、装置、移动终端及计算机可读存储介质 | |
CN107220077B (zh) | 应用启动的管控方法和管控设备 | |
CN113194024B (zh) | 信息显示方法、装置和电子设备 | |
CN107340944A (zh) | 游戏界面的显示方法和装置 | |
CN112162807A (zh) | 功能执行方法及装置 | |
CN106484882A (zh) | 一种数据库连接池的管理方法和装置 | |
CN113296649A (zh) | 图标显示方法、装置及电子设备 | |
CN112148168B (zh) | 图标的移动方法、装置和电子设备 | |
CN112988185A (zh) | 云应用更新方法、装置、系统、电子设备及存储介质 | |
CN104580375A (zh) | 确定目标应用的ui样式信息的方法与设备 | |
CN113220178A (zh) | 应用程序的控制方法和装置 | |
CN105049374B (zh) | 下载任务的调度方法、装置及移动终端 | |
CN110533507A (zh) | 一种订单管理方法、移动终端以及计算机可读存储介质 | |
CN108011860A (zh) | 一种处理广播消息的方法及装置 | |
US11491404B2 (en) | Method and system for replacing player in sports game | |
CN108647059A (zh) | 应用程序预测方法、装置、存储介质及移动终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |