一种启动应用的方法及装置转让专利

申请号 : CN201610680862.2

文献号 : CN107766128B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈秋林文白林陈熙彩

申请人 : 华为技术有限公司

摘要 :

一种启动应用的方法及装置,涉及无线通信技术领域,用以提高用户的体验,其中,该方法包括:终端在空闲内存的大小大于预设阈值时,获取目标应用列表,该目标应用列表用于存储最近一次释放内存的应用的标识,其中,该应用的标识用于唯一标识该应用;并在后台启动该目标应用列表中的至少一个标识所标识的应用的进程。这种技术方案由于终端在空闲内存的大小大于预设阈值时,根据目标应用列表在后台启动应用的进程,避免了终端在不能满足后台运行应用的内存时在后台启动造成的反复在后台重启和关闭应用的进程,从而提升了用户的体验。

权利要求 :

1.一种启动应用的方法,其特征在于,包括:

终端当检测到触发对当前运行在前台的应用的新的操作后,若确定执行新的操作需要申请的内存大于空闲内存的大小时,释放运行在后台的应用所占用的部分或全部内存;

所述终端将释放内存的至少一个应用的标识存储到目标应用列表中;所述应用的标识用于唯一标识所述应用;

所述终端在空闲内存的大小大于预设阈值时,获取所述目标应用列表;

所述终端在后台启动所述目标应用列表中的至少一个标识所标识的应用的进程;

所述终端在后台启动所述目标应用列表中的至少一个标识所标识的应用的Activity;

所述终端在后台启动所述目标应用列表中的至少一个标识所标识的应用的Activity,包括:所述终端针对所述至少一个标识中一个标识所标识的应用,创建一个新的任务Task;

所述终端若确定用于存储桌面Stack和应用Stack的栈Stack中除包括桌面Stack以外不包括应用Stack,则将创建一个应用Stack,将所述新的Task存储到创建的应用Stack中,其中,所述创建的应用Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈底,所述桌面Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈顶;

所述终端若确定所述用于存储桌面Stack和应用Stack的Stack中除包括所述桌面Stack以外还包括存储除所述目标应用列表中存储的标识所标识的所有应用以外的其它应用的Task的应用Stack,则将所述新的Task存储到所述存储有所述其它应用的Task的应用Stack中,其中,所述存储有所述其它应用的Task的应用Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈顶,所述桌面Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈底,所述新的Task存储的位置在所述存储有所述其它应用的Task的应用Stack中位于靠近栈底的位置。

2.如权利要求1所述的方法,其特征在于,启动的所述应用占用的内存的大小不大于空闲内存的大小,且所述启动的所述应用的优先级在所述目标应用列表中存储的标识所标识的应用的优先级中排在前n位,其中,n大于0。

3.如权利要求1所述的方法,其特征在于,启动的所述应用占用的内存的大小不大于空闲内存的大小,且启动的所述应用的使用次数不小于预设次数。

4.如权利要求2或3所述的方法,其特征在于,还包括:

所述终端在后台启动关联应用的进程,所述关联应用为与所述启动的应用关联的应用。

5.一种启动应用的装置,其特征在于,包括:

读取模块,用于在存储器中空闲内存的大小大于预设阈值时,获取目标应用列表,其中,所述目标应用列表用于存储最近一次释放内存的应用的标识,所述最近一次释放内存的应用包括最近一次释放部分或全部内存的应用,其中,所述装置是当前检测触发对当前运行在前台的应用的新的操作后,若确定执行新的操作需要申请的内存大于空闲内存的大小时,释放运行在后台的应用的部分或全部内存的;所述应用的标识用于唯一标识所述应用;

进程启动模块,用于在后台启动所述目标应用列表中的至少一个标识所标识的应用的进程;

界面启动模块,用于在后台启动所述目标应用列表中的至少一个标识所标识的应用的Activity;

所述界面启动模块,具体用于:

针对所述至少一个标识中一个标识所标识的应用,创建一个新的任务Task;

若确定用于存储桌面Stack和应用Stack的栈Stack中除包括桌面Stack以外不包括应用Stack,则将创建一个应用Stack,将所述新的Task存储到创建的应用Stack中,其中,所述创建的应用Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈底,所述桌面Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈顶;

若确定所述用于存储桌面Stack和应用Stack的Stack中除包括所述桌面Stack以外还包括存储除所述目标应用列表中存储的标识所标识的所有应用以外的其它应用的Task的应用Stack,则将所述新的Task存储到所述存储有所述其它应用的Task的应用Stack中,其中,所述存储有所述其它应用的Task的应用Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈顶,所述桌面Stack位于所述用于存储桌面Stack和应用Stack的Stack的栈底,所述新的Task存储的位置在所述存储有所述其它应用的Task的应用Stack中位于靠近栈底的位置。

6.如权利要求5所述的装置,其特征在于,启动的所述应用占用的内存的大小不大于空闲内存的大小,且启动的所述应用的优先级在所述目标应用列表中存储的标识所标识的应用的优先级中的排在前n位,其中,n大于0。

7.如权利要求5所述的装置,其特征在于,启动的所述应用占用的内存的大小不大于空闲内存的大小,且启动的所述应用至少一个标识所标识的应用的使用次数不小于预设次数。

8.如权利要求6或7所述的装置,其特征在于,所述进程启动模块,还用于:

在后台启动关联应用的进程,所述关联应用为与所述启动的应用关联的应用。

说明书 :

一种启动应用的方法及装置

技术领域

[0001] 本发明涉及无线通信技术领域,特别涉及一种启动应用的方法及装置。

背景技术

[0002] 在Android(安卓)终端(如手机、平板以及机顶盒等)上,启动或运行应用时,如果系统空闲内存不够,终端基于LMK(Low Memory Killer,低内存管理)机制,则会Kill运行在后台的应用或服务来回收内存,进而保证前台应用的运行。例如,某Android手机在使用相机之前,用户启动了聊天、游戏、新闻、地图、视频等应用。用户打开相机后,由于所需内存大,导致在后台运行的应用全部退出,从而使得一些对于用户较为重要的应用关闭,造成使用的不便,此外,对于退出的应用再次重新启动时,需要重启的时间较长。
[0003] 为避免关闭一些对于用户来说较为重要的应用,现有技术中,采用在终端中预先设置一个白名单,其中,白名单中存储应用的标识,在需要关闭应用来释放内存时,不关闭白名单中存储的应用的标识所标识的应用,但是这种通过白名单的形式来避免应用不被Kill,但是当遇到大内存的应用运行时,白名单中存储的应用的标识对应的应用也会被Kill,因此,为使得用户在应用再次重新启动时,降低应用重启的时长,终端在静置或开机时,重新启动白名单中应用的标识所标识的应用的进程。
[0004] 但是,白名单中应用的标识是固定不变的,而且当终端在静置或开机时,终端不能满足运行应用所需的内存,会造成后台应用反复被杀或重启,严重影响系统的性能,从而影响用户体验。

发明内容

[0005] 本发明实施例提供一种启动应用的方法及装置,用以提升终端系统的性能,同时在一定程度上避免终端后台应用反复重启和被杀的现象。
[0006] 下面首先介绍一下本发明实施例中出现的术语。
[0007] 空闲内存:所有内存中除被当前正在运行的应用程序及其他数据占用的内存以外剩余的内存。
[0008] 应用的进程:是程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
[0009] Activity:是一个应用程序组件,提供一个屏幕或界面,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
[0010] 任务Task:一个Task中包括多个Activity,具体的,一个Task就是用户体验上的一个“应用”。它将相关的Activity组合在一起,以Stack的方式管理。
[0011] 第一方面,本发明实施例提供一种启动应用的方法,该方法包括终端在空闲内存的大小大于预设阈值时,获取目标应用列表,并在在后台启动所述目标应用列表中的至少一个标识所标识的应用的进程,其中,目标应用列表用于存储最近一次释放内存的应用的标识,该应用的标识用于唯一标识所述应用。例如,该应用标识可以为包名,以应用为短信为例,该应用程序的包名为com.android.mms。
[0012] 由于终端在空闲内存的大小大于预设阈值时,触发在后台启动最近一次释放内存的应用(例如被关闭的应用),这样就做到了在内存充足的时候将之前关闭的应用自动重启,由此一定程度上避免了现有技术中终端在空闲内存较小时,在后台自动重启应用的进程,而后又由于空闲内存不足以运行应用的进程而关闭应用,在关闭应用后由于释放了内存,又在后台重启应用的进程,反复重启和关闭应用的现象;并且由于目标应用列表中存储的应用的标识是最近一次释放内存的应用的标识,目标应用列表中存储的应用的标识能够随着释放内存的应用的不同而动态变化的,而本发明实施例中的终端是根据目标应用列表在后台启动应用的进程,与现有技术中终端根据白名单中设置的应用的标识启动应用的进程相比,终端能够针对释放内存的应用在后台启动应用的进程,提高了启动用户所需求的应用的进程可能性,从而在一定程度上提升了用户体验。
[0013] 基于第一方面,在第一种实现方式中,终端在后台启动至少一个标识所标识的应用的Activity,这样使得用户在前台需要打开在后台启动了Activity的应用时,与仅在后台启动了应用的进程的应用相比,大大降低了在前台打开该应用所需的时长,从而在一定程度上提高了用户的体验。
[0014] 需要说明的是,终端可以在后台启动目标应用列表中的至少一个标识所标识的应用的进程之后,在后台启动至少一个标识所标识的应用的Activity;也可以同时在后台启动至少一个标识所标识的应用的进程和Activity。对二者的启动顺序,本发明实施例不做限定。
[0015] 基于第一方面的第一种实现方式,在第二种实现方式中,终端在后台启动目标应用列表中的至少一个标识所标识的应用的Activity的具体方式:终端针对至少一个标识中一个标识所标识的应用,创建一个新的任务Task;若确定用于存储Task的栈Stack中除包括桌面Stack以外不包括应用Stack,则将创建一个应用Stack,将新的Task存储到创建的应用Stack中,其中,创建的应用Stack位于Stack的栈底,桌面Stack位于Stack的栈顶;若确定Stack中除包括桌面Stack以外还包括存储除至少一个标识所标识的应用以外的其它应用的Task的应用Stack,则将新的Task存储到存储有其它应用的Task的应用Stack中,其中,存储有其它应用的Task的应用Stack位于Stack的栈顶,桌面Stack位于Stack的栈底,新的Task存储的位置在存储有其它应用的Task的应用Stack中位于靠近栈底的位置。由于终端能够将创建的新的Task,存储到位于其他Task下面的存储位置上,因此实现了在后台启动应用的Activity。
[0016] 基于第一方面至第一方面的第二种实现方式中任一实现方式,在第三种实现方式中,终端在后台启动进程的应用为目标应用列表中的至少一个标识所标识的、且优先级在目标应用列表中排在前n位的应用,并且启动的应用占用的内存的大小不大于空闲内存的大小。其中n大于0。这样使得能够优先启动优先级较高的应用,避免影响用户的体验,例如,终端关闭WiFi(Wireless Fidelity,无线保真),该应用的优先级较高,如不优先在后台启动该应用的进程,就可能会影响用户的上网,降低用户的体验。
[0017] 应理解,应用的优先级可以存储到目标应用列表中,或者,在单独设置的列表中存储,在终端需要读取应用的优先级时,从相应的列表中读取应用的优先级。
[0018] 由于空闲内存的大小有限,基于第一方面至第一方面的第二种实现方式中任一实现方式,在第四种实现方式中,终端在后台启动进程的应用为目标应用列表中的至少一个标识所标识的、且在目标应用列表中使用次数不下于预设阈值的应用,并且启动的应用占用的内存的大小不大于空闲内存的大小。这样使得能够在有限的空闲内存下优先启动用户使用频率较高的应用,能够大大降低用户在前台启动这些应用所需的时长,从而提高了用户的体验。具体的,使用次数可以通过该应用的耗电量、点击显示屏上该应用图标的次数等来衡量。
[0019] 应理解,在第四种实现方式中,应用的使用频率应存储到目标应用列表中,或者,在单独设置的列表中存储应用的使用频率,在终端需要读取应用的使用频率时,从存储的列表中读取应用的使用频率。
[0020] 基于第三方面或第四方面的实现方式,在第五种实现方式中,在空闲内存大小允许的情况下,终端在后台启动关联应用的进程,关联应用为目标应用列表存储的标识所标识的应用中至少一个标识所标识的应用关联的应用。例如,标识的应用为相机应用,与相机关联的应用为图库应用(或称之为照片应用),在空闲内存的大小允许的情况下,在后台启动相机的进程的同时,启动图库应用的进程,这样使得用户在使用相机需要打开照片查看时,能够通过相机更快的打开照片,进一步提高了用户的体验。
[0021] 需要说明的是,在第五种实现方式中,不限定启动关联应用和目标应用列表中至少一个标识所标识的应用的顺序,具体的,终端可以先在后台启动目标应用列表中至少一个标识所标识的应用的进程,然后在后台启动关联应用的进程;或者,终端先在后台启动关联应用的进程,再在后台启动目标应用列表中至少一个标识所标识的应用的进程。
[0022] 基于第一方面至第一方面的第五种实现方式的任一实现方式,终端可以在退出或杀掉(kill)某一应用、或退出某一应用的某一操作、或开机启动时,触发空闲内存大小是否大于预设阈值的判断。
[0023] 此外,当终端在后台启动应用的进程和Activity时,分别记录每个应用占用的内存的大小,当记录的所有启动的应用占用空闲内存的大小小于(或者说远小于)空闲内存的大小时,若目标应用列表中还存在需要在后台启动的应用,可以继续在后台启动应用的进程和Activity。而当记录的所有启动的应用占用空闲内存的大小等于(或接近)空闲内存的大小时,终端则停止在后台启动应用的进程和Activity。
[0024] 应理解,此处记录和监控后台启动的应用占用的内存大小是为了避免终端内存占用过大,影响终端运行速度,具体内存的监控方式本发明不做限定。另外,应用的进程和Activity占用的内存大小可以记录在目标应用列表中,也可以记录在设置的单独的列表中。
[0025] 第二方面,本发明实施例还提供一种启动应用的装置,包括可实现第一方面或上述第一方面的任意一种实现方式的一个或多个模块,每个模块可执行一个或多个步骤。
[0026] 第三方面,本发明实施例还提供一种终端设备,该终端设备包括处理器和存储器,所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序并实现第一方面或上述第一方面的任意一种实现方式提供的方法。
[0027] 第四方面,本发明实施例中还提供一种计算机存储介质,该存储介质可以是非易失性的,即断电后内容不丢失。该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现第一方面或上述第一方面的任意一种实现方式提供的方法。

附图说明

[0028] 图1为本发明实施例终端的硬件结构示意图;
[0029] 图2为本发明实施例启动应用的方法的流程示意图;
[0030] 图3为本发明实施例在后台启动Activity的方法的流程示意图;
[0031] 图4a和图4b分别为本发明实施例用于存储Task的Stack的示意图;
[0032] 图5a为本发明实施例Android操作系统的示意图;
[0033] 图5b为本发明实施例框架层的示意图;
[0034] 图6为本发明实施例启动应用的方法的流程示意图;
[0035] 图7a和图7b分别为本发明实施例启动应用的装置的结构示意图。

具体实施方式

[0036] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0037] 应理解,本发明实施例启动应用的方法主要应用于终端,该终端也可称之为UE(User Equipment,用户设备)、MS(Mobile Station,移动台)、移动终端(Mobile Terminal)等,可选的,该终端可以为手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑、机顶盒等。
[0038] 本发明实施例启动应用的方法,由于终端在空闲内存的大小大于预设阈值时,触发在后台启动最近一次释放内存的应用(例如被关闭的应用),在一定程度上避免了现有技术中终端不对空闲内存大小进行判断,使得终端有可能在空闲内存较小时,在后台自动重启应用的进程,造成的反复重启和关闭应用的现象;并且由于目标应用列表中存储的应用的标识是最近一次释放内存的应用的标识,目标应用列表中存储的应用的标识是随着释放内存的应用的不同而动态变化的,与现有技术中在终端预先设置的不能指示释放内存的应用动态变化的白名单相比,终端在启动应用的进程时更具有针对性,在一定程度上提高了启动用户所需求的应用的进程可能性。
[0039] 请参考图1,为本发明实施例应用的终端的硬件结构示意图。如图1所示,终端100包括显示设备140、处理器150以及存储器180。存储器180一般包括内存和外存,内存可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等。外存可以为硬盘、光盘、USB盘、软盘或磁带机等。存储器180用于存储计算机程序和其他数据183,该计算机程序包括操作系统程序182和应用程序181等,其他数据183可包括操作系统182或应用程序181被运行后产生的数据,该数据包括系统数据(例如操作系统的配置参数)和用户数据,例如用户拍摄的一张照片就是典型的用户数据,而本发明实施例中的目标应用列表是运行应用程序后产生的数据。计算机程序和其他数据通常被存储到外存上,处理器在执行处理或调用数据前会将计算机程序或其他数据从外存加载到内存。本发明实施例中的目标应用列表可以存储在外存或内存上,当存储在外存上时,处理器在需要获取目标应用列表时,需要将该目标应用列表先从外存加载到内存。
[0040] 处理器150用于读取计算机程序,然后执行计算机程序定义的方法,例如处理器150读取操作系统程序182从而在该终端100上运行操作系统以及实现操作系统的各种功能,或处理器150读取一种或多种应用程序181,从而在该终端100上运行应用。处理器150可以包括一个或多个通用处理器,还可包括一个或多个DSP(Digital Signal Processor,数字信号处理器),用于执行相关操作,以实现本发明实施例所提供的技术方案。
[0041] 操作系统程序182中包含了可实现本发明实施例提供的启动应用方法的计算机程序,从而使得处理器150读取到该操作系统程序182并运行该操作系统后,该操作系统可具备本发明实施例提供的在后台启动应用的进程的功能。具体的,该操作系统可以向上层的应用开放在后台启动应用的进程的调用接口,处理器150从存储器180中读取应用程序181并在后台运行该应用的进程。
[0042] 终端100还可以包括输入设备130,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与终端100的用户设置以及功能控制有关的信号输入等。具体地,本发明实施例中,该输入设备130可以包括触控面板131。触控面板131,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板131上或在触控面板131的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板131可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器150,并能接收处理器150发来的命令并加以执行。例如,用户在触控面板131上用手指单击一张图片,触摸检测装置检测到此次单击带来的这个信号,然后将该信号传送给触摸控制器,触摸控制器再将这个信号转换成坐标发送给处理器150,处理器150根据该坐标和该信号的类型(单击或双击)确定对该图片所执行的操作(如图片放大、图片全屏显示),然后,确定执行该操作所需要占用的内存空间,若需要占用的内存空间小于空闲内存,则将该图片全屏显示在显示面板141上,从而实现“打开”图片。若需要占用的内存空间大于空闲内存,则通过Kill后台运行的应用或冻结后台运行的应用,释放部分内存,以使得终端能够将该图片全屏显示在显示面板141上。
[0043] 触控面板131可以采用电阻式、电容式、红外线以及表面声波等多种类型实现。除了触控面板131,输入设备130还可以包括其他输入设备132,其他输入设备132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
[0044] 终端100还可以包括显示设备140,显示设备140,包括显示面板141,用于显示由用户输入的信息或提供给用户的信息以及终端设备100的各种菜单界面等,在本发明实施例中主要用于显示终端100中安装的应用的图标。该显示设备140可包括显示面板141,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)或OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板141。在其他一些实施例中,触控面板131可覆盖显示面板141上,形成触摸显示屏。
[0045] 除以上之外,终端100还可以包括用于给其他模块供电的电源190以及用于拍摄照片或视频的摄像头160。终端100还可以包括一个或多个传感器120,例如加速度传感器、光传感器等。终端100还可以包括无线射频(Radio Frequency,RF)电路110,用于与无线网络设备进行网络通信,还可以包括WiFi模块170,用于与其他设备进行WiFi通信。
[0046] 本发明实施例提供的启动应用的方法可以实现在图1所示的操作系统程序182中。具体的,如图2所示,本发明实施例启动应用的方法,包括:
[0047] 步骤200,终端在空闲内存的大小大于预设阈值时,获取目标应用列表,其中,目标应用列表用于存储最近一次释放内存的应用的标识,该应用的标识用于唯一标识该应用。
[0048] 步骤201,终端在后台启动目标应用列表中的至少一个标识所标识的应用的进程。
[0049] 应理解,在本发明实施例中空闲内存指的是终端所有内存中除被当前正在运行的应用程序及其他数据占用的内存以外剩余的内存。例如终端内存的总大小为2G,假设被当前正在运行的应用及其他数据占用的内存的大小为1.2G,则空闲内存的大小为0.8G。
[0050] 应理解,在本发明实施例中的预设阈值可根据实际情况进行设定。
[0051] 其中,当退出当前前台运行的应用、或者退出当前前台的操作、或者其他能够使空闲内存大于预设阈值的事件(如亮屏事件)时,终端确定空闲内存大于预设阈值。
[0052] 应理解,在本发明实施例中的应用的进程指的是应用的主进程和服务进程。
[0053] 具体的,在本发明实施例中目标应用列表可以在下述过程中生成:
[0054] 终端当检测到触发启动新应用时,确定运行上述过程需要申请的内存大小,若需要申请的内存的大小大于空闲内存的大小,则根据预先设置的当前占用内存的除新应用以外的其它应用的优先级从低到高的顺序,依次释放其它应用中的至少一个应用占用的全部或部分内存,直至终端确定释放的内存与空闲内存之和不小于运行新任务需要申请的内存大小;将释放内存的应用的标识存储到目标应用列表中。
[0055] 此外,终端当检测到触发对当前运行在前台的应用的新的操作后,若确定执行新的操作需要申请的内存大于空闲内存的大小时,需要通过释放运行在后台的应用所占用的部分或全部内存来运行新的操作,此时,终端将释放内存的应用的标识存储到目标应用列表中。
[0056] 其中应用的标识可以为应用程序的包名,例如应用为短信时,该应用程序的包名为com.android.mms,应用为联系人时,该应用程序的包名为com.android.contacts。应理解,本发明实施例中,应用的标识还可以为预先设置的应用的标识,例如阿拉伯数字、应用的名称(如短信、联系人)等。
[0057] 在本发明实施例中,终端针对至少一个应用中的一个应用,若应用的冷启动时长大于预设时长,则通过冻结应用的进程和压缩应用占用的内存来释放应用占用的部分内存;若确定应用的冷启动时长不大于预设时长,则通过退出应用,即Kill该应用来释放应用占用的全部内存。其中,其中,压缩应用占用的内存指的是将应用占用的内存压缩到压缩内存中,压缩内存可以为ZRAM(ZIPRAM,内存压缩)或者ZSwap(Zip Swap,交换分区压缩)。
[0058] 具体的冷启动时长指的是终端在从应用处于完全关闭的状态启动应用所需的时长。
[0059] 一种将预先设置应用的优先级的方式:以应用为短信为例,预先将应用的优先级存储到终端的外存中,例如优先级通过数字1到9来衡量,其中数字1表示优先级最高,然后优先级依次降低,数字9优先级最低,当在终端安装应用微信时,终端在显示屏弹出选择短信优先级选择的窗口,用户若选择数字5,则终端在存储器中存储的短信的优先级为5。在实现时,还可以在终端的应用中设置优先级重新设置的选项,然后,后续终端根据用户的需要,重新选择新的优先级,还可以在实现时,仅能够在安装时设置应用的优先级,一旦设置则不能再改变。
[0060] 另一种将预先设置应用的优先级的方式:预先设定应用的优先级,开发人员直接在开发应用时将应用的优先级预先设定好。
[0061] 需要说明的是,预设时长可根据实际情况进行相应的设定。
[0062] 例如,终端在后台运行着应用应用A、应用B、应用C、应用D和应用E;假设占用了1.8G的内存,空闲内存为0.2G,其中,应用A、应用B的优先级为5,应用C的优先级为6,应用D的优先级为3,应用E的优先级为4,其中,数字越大代表应用的优先级越低,当终端在检测到用户点击相机的客户端时,触发启动相机时,假设运行相机需要占用的内存0.5G,由于终端运行相机占用的内存大于空闲内存的大小,则终端按照应用A、应用B、应用C、应用D和应用E的优先级从低到高的顺序,释放内存,具体的,由于在后台运行的内存中应用C的优先级最低,则若应用C的冷启动时长大于预设时长,则通过进程冻结管理器冻结应用的进程和并将运行应用C的程序和数据压缩到压缩内存中。若应用C的冷启动时长不大于预设时长,则退出应用C,即Kill应用C,释放终端运行应用C的全部内存。
[0063] 若通过释放应用C所占的部分或全部内存之后,空闲内存与释放内存之和为0.8G,大于运行相机需要申请的内存0.5G,则不再继续释放内存,终端为相机分配0.5G的内存,然后运行相机,然后将应用C的标识存储到目标应用列表中。
[0064] 若通过释放应用C所占的部分或全部内存之后,空闲内存与释放内存之和为0.45G,小于运行小计需要占用的内存0.5G,则继续释放应用A和应用B中其中一个的内存,其释放内存的方式与释放应用消消乐内存的方式类似,在此不再赘述,直至终端确定空闲内存与释放内存之和不小于运行相机需要申请的内存。然后将释放内存的全部应用的标识存储到目标应用列表中。
[0065] 可选的,在本发明实施例中,终端在若在当前占用内存的其它应用在全部释放占用的全部内存后,释放的内存与空闲内存之和小于需要申请的内存大小时,则在终端的显示设备提示需要申请的内存过大的提示信息。
[0066] 此外,现有技术中其他能够释放内存的方式,也可以将释放内存的应用存储到目标应用列表中,在此不再一一赘述。
[0067] 具体的,在本发明实施例中,为进一步降低重启应用的启动时长,可选的,终端在启动目标应用列表中的至少一个标识所标识的应用的进程之后,在后台启动目标应用列表中至少一个标识所标识的应用的Activity。
[0068] 具体的,应用的Activity指示的与应用的显示界面相关的资源信息,本发明实施例中应用的Activity指的是应用的主进程的Activity。
[0069] 由于现有技术中所提到的在后台启动应用,指的是启动应用主进程和服务进程,并未启动主进程中的Activity,而在本发明实施例中启动应用的进程之后,还在后台启动了应用的Activity,从而进一步降低了重启应用时所需的启动时长。
[0070] 具体的,终端在后台启动Activity的方式为:
[0071] 终端针对至少一个标识中一个标识所标识的应用,创建一个新的任务Task;
[0072] 终端若确定用于存储Task的栈Stack中除包括桌面Stack以外不包括应用Stack,则将创建一个应用Stack,将新的Task存储到创建的应用Stack中,其中,创建的应用Stack位于Stack的栈底,桌面Stack位于Stack的栈顶;
[0073] 终端若确定Stack中除包括桌面Stack以外还包括存储除目标应用列表中存储的标识所标识的所有应用以外的其它应用的Task的应用Stack,则将新的Task存储到存储有其它应用的Task的应用Stack中,其中,应用Stack位于Stack的栈顶,桌面Stack位于Stack的栈底,新的Task存储的位置在应用Stack中位于靠近栈底的位置。
[0074] 其中,一个Task可以包括多个Activity,桌面Stack中存储的是与桌面相关的Task。
[0075] 具体的,如图3所示,本发明实施例在后台启动应用Activity的方法,包括:
[0076] 步骤300,终端的应用层通过AMS(Activity Manager Service,作业管理服务)组件入口向框架层发送参数,该参数用于指示启动应用的方式;
[0077] 例如,在本发明实施例的技术方案中启动应用的方式为后台启动,假设参数为1时,用于指示启动应用的方式为后台启动,参数为0,用于指示启动应用的方式为前台启动。
[0078] 步骤301,终端在确定参数指示的启动应用的方式为后台启动后,则将后台起动标志设置为True,然后,终端针对目标应用列表中存储的一个标识所标识的应用,创建一个新的Task。
[0079] 步骤302,终端判断用于存储Task的Stack中是否包括除桌面Stack以外的应用Stack,若是,则执行步骤303,否则执行步骤304。
[0080] 步骤303,终端将新的Task存储到应用Stack中,其中,桌面Stack位于Stack的栈底,应用Stack位于Stack的栈顶,新的Task存储的位置在应用Stack中位于靠近栈底的位置。
[0081] 如图4a所示,Stack400中包括应用Stack410和桌面Stack420,其中应用Stack410用于存储其他应用的Task,桌面Sack420用于存储桌面的Task,其中桌面Stack420位于栈底,应用Stack410位于栈顶。假设应用Stack410中包括应用E的Task和应用F的Task,在该种情况下,终端的显示设备上显示应用E的界面,若需要存储应用A的Task和应用B的Task,则将创建的应用A的Task和创建的应用B的Task存储到应用Stack410中应用E的Task的下方。具体的应用A的Task和应用B的Task的顺序不进行限制。
[0082] 步骤304,终端将创建一个应用Stack,将新的Task存储到应用Stack中,其中,应用Stack位于Stack的栈底,桌面Stack位于Stack的栈顶。
[0083] 如图4b所示,Stack400中仅包括桌面Stack420,桌面Stack420中存储桌面的Task,则终端的显示设备上显示的是桌面。若需要存储应用A的Task和应用B的Task,则在Stack400中创建一个应用Stack430,应用Stack430位于栈底,桌面Stack420位于栈顶,然后将应用A的Task和应用B的Task存储到应用Stack430中。这样使得应用能够在后台启动Activity。
[0084] 步骤305,终端禁止在后台启动的应用前后台切换。
[0085] 具体的,终端不调用启动的应用前后台切换函数。
[0086] 步骤306,终端禁止状态栏的刷新。
[0087] 具体的,终端不调用状态栏刷新的函数。其中,终端禁止通过窗口管理服务的addWindow函数调用mPolicy.updateSystemUiColorLw(win)实现状态栏的刷新。
[0088] 其中步骤301至步骤306可以在操作系统的框架层完成。
[0089] 具体的,本发明实施例还提供了几种可选的在后台启动对应的应用的进程的方法:
[0090] 第一种:终端在后台启动与目标应用列表中的每个标识分别所标识应用的进程,其中,运行与目标应用列表中的每个标识分别所标识的应用的进程所占用的内存不大于空闲内存的大小。
[0091] 具体的,终端的处理器在确定存储器的空闲内存的大小之后,在后台启动与目标应用列表中的每个标识分别所标识的应用的进程。
[0092] 例如:目标应用列表中存储了应用A、应用B、应用C、应用D的标识,则在后台运行应用A、应用B、应用C和应用D的进程,但是在后台运行应用A、应用B、应用C和应用D的进程占用的内存的大小不大于空闲内存的大小。
[0093] 若在后台启动目标应用列表中全部标识分别所标识的应用的进程,运行这些应用占用的内存大于空闲内存的大小时,终端按照不同的策略有不同的具体实现方式,例如,由于运行这些应用占用的内存大于空闲内存的大小,则终端选择目标应用列表中的部分标识,然后在后台启动选择的部分标识所标识的应用的进程;或者,终端在运行这些应用占用的内存大于空闲内存的大小时,则不在后台启动目标应用列表中的标识所标识的应用的进程。
[0094] 第二种:终端在后台启动与目标应用列表中的至少一个标识所标识的应用的进程,其中,启动的至少一个标识所标识的应用的进程占用的内存的大小不大于空闲内存的大小,且至少一个标识所标识的应用的优先级在目标应用列表中存储的标识所标识的应用的优先级中的排在前n位,其中,n大于0。
[0095] 其中,n的取值根据用户的需要进行设置,具体的当n取值为1时,假设目标应用列表中存储了应用A、应用B、应用C、应用D的标识,且应用A的优先级为5,应用B的优先级为6,应用C的优先级为5,应用D的优先级为6,其中,数字越大表示优先级越低,则在后台启动优先级排在第1位的应用A和应用C的进程,其中运行应用A和应用C的进程占用的内存不大于空闲内存的大小。
[0096] 若在后台启动应用A和应用C的进程后,还剩余的充足的空闲内存,可以按照应用优先级的从高到低顺序,依次在后台启动,直至空闲内存不能够支持在后台运行应用的进程。
[0097] 第三种:终端在后台启动与目标应用列表中的至少一个标识所标识的应用的进程,其中,启动的至少一个标识所标识的应用的进程占用的内存的大小不大于空闲内存的大小,且至少一个标识所标识的应用的使用次数不小于预设次数。
[0098] 需要说明的是,预设次数根据实际情况的需要进行设定,其中,针对一个应用使用的次数越多,则用户接下来最有可能使用该应用,为使得用户在使用该应用时,能够较快的进入该应用,避免在再启动该应用时需要较长的时间,则在后台提前启动该应用。
[0099] 其中,在本方实施例中,当应用的使用次数大于预设次数时,则该应用即为用户接下来最有可能使用的应用。其他判断目标应用列表中的标识所标识的应用是否为用户接下来最有可能使用的应用的方法也在本发明的保护范围之内,例如按照使用终端统计的每个应用的耗电量,其中将耗电量排名靠前的几个应用作为用户接下来最有可能使用的应用。
[0100] 第四种,终端在后台启动关联应用的进程,其中,关联应用为目标应用列表存储的标识所标识的应用中至少一个标识所标识的应用关联的应用。
[0101] 其中,关联应用为通过标识所标识的应用能够打开的应用,例如,应用为相机,通过相机能够打开应用的为图片,则图片为相机的关联应用,又叫做“一键可达”的应用。
[0102] 此外,通过上述四种方式启动应用的进程的同时,还可以在后台启动应用的Activity。
[0103] 在本发明实施例中,由于在后台启动应用的进程的同时,启动了应用的Activity,从而降低了在前台重新启动应用的所需的时长。
[0104] 如表1所示,以应用A、应用B、应用C、应用D和应用E为例的冷启动时长、在后台启动进程后在前台的启动时长1、在后台启动应用的进程和Activity后在前台的启动时长2:
[0105] 表1
[0106]
[0107] 以上主要介绍了本发明实施例提供的方法的具体流程,下面结合图5将以Android操作系统为例,介绍本发明实施例提供的方法的实现位置和运行时状态,更具体的方法流程可参考前述实施例所述。
[0108] 请参阅图5a,为本发明实施例提供的计算机系统500的结构示意图。该计算机系统500可以是终端,也可以是其他类型的计算机设备。该计算机系统包括应用层510和操作系统层550,该操作系统可以为Android操作系统。操作系统层550又分为框架层520、核心库层
530和驱动层540。其中,图5a中的操作系统层550可以认为是图1中操作系统182的一种具体实现,图5a中的应用层510可以认为是图1中应用程序181的一种具体实现。驱动层540包括CPU驱动541、GPU驱动542以及显示控制器驱动543等。核心库层530是操作系统的核心部分,包括输入/输出服务531、核心服务532、图形设备接口534以及实现CPU或GPU图形处理的图形引擎(Graphics Engine)533等。框架层520可包括AMS(Activity Manager Service,,作业管理服务)521、Activity Manager522(活动管理)、内存管控523、事件收发器524、应用恢复525、应用管控526、配置管理527等等。应用层510可包括图库511、媒体播放器(Media Player)512以及浏览器(Browser)513等。
[0109] 另外,在驱动层540之下,该计算机系统500还包括硬件层。该计算机系统500的硬件层可以包括中央处理器(Central Processing Unit,CPU)和图形处理器(Graphic Processing Unit,GPU)(相当于图1中的处理器150的一种具体实现),还可以包括存储器(相当于图1中的存储器180),包括内存和外存,还可以包括输入设备(相当于图1中的输入设备132)、显示设备(相当于图1中的显示设备140),例如液晶显示器(Liquid Crystal Display,LCD)、全息成像(Holographic)、投影(Projector)等,还可以包括一个或多个传感器(相当于图1中的传感器120)。当然除此之外,硬件层还可以包括图1中示出的电源、摄像头、RF电路和WiFi模块,还可以包括图1中也没有示出的其他硬件模块,例如内存控制器和显示控制器等。
[0110] 本发明前述任意一个实施例提供的方法均可以实现在图5a所示的框架层中。
[0111] 具体的,本发明实施例框架层如图5b所示,结合图5b所示的框图,在后台重启应用的流程图如图6所示。
[0112] 如图5b所示,终端的框架层520包括内存管控523、配置管理527、事件收发器524、应用恢复525、应用管控526、配置管理527、AMS521,其中,AMS用于采集应用被杀、退出和应用退到后台事件,上报给事件收发器524;事件收发器524用于提供事件分发通道;应用管控526用于提供待恢复应用列表,待恢复应用列表为用户常用应用列表(如用户使用频率较高的应用列表、优先级较高的应用列表)等,以及智能预测用户行为,发起应用请求;内存管控
523用于提供目标应用列表;配置管理527用于提供读取XML(Extensible MarkupLanguage,可扩展标记语言)文件接口。此外,在本发明实施例中终端还可以通过NMS(Notification Manager Service,通知管理服务)或WMS(WindowsManager Service,窗口管理服务)采集应用被杀、退出和应用退到后台的事件。
[0113] 应理解,如图5a所示的框架层中的Activity Manager522用于在后台启动Activity。
[0114] 具体的,如图6所示,本发明实施例启动应用的流程包括:
[0115] 步骤600,应用恢复525从配置管理527读取配置信息,其中该配置信息为配置的空闲内存预设阈值,若应用恢复确定空闲内存的实际大小大于预设阈值,则执行步骤601。
[0116] 步骤601,AMS521向事件收发器524上报事件,其中,该事件为在后台启动应用的请求。
[0117] 步骤602,事件收发器524在接收到上报的事件后,向应用恢复525分发后台启动应用的请求消息。
[0118] 步骤603,应用恢复525在接收到后台启动应用的请求消息后,从内存管理523中读取目标应用列表,该目标应用列表中存储的为最近一次释放内存的应用的标识。
[0119] 步骤604,应用恢复525从应用管控526中获取恢复应用列表,恢复应用列表中存储的为用户使用频率较高的应用的标识、或优先级较高的应用的标识。
[0120] 步骤605,应用恢复525从目标应用列表中获取与恢复应用列表中存储的应用标识相同的应用标识。
[0121] 步骤606,应用恢复525获取需要运行的进程数。
[0122] 步骤607,应用恢复525调用与需要运行的进程数相应的空闲内存。
[0123] 步骤608,应用恢复525向AMS521发送后台静默启动应用的请求,具体的,终端通过AMS521将应用请求发送到应用层510,然后执行后台静默启动应用,其中后台静默启动的应用为目标应用列表中与恢复应用列表中存储的应用标识相同的应用标识对应的应用。
[0124] 其中,步骤603、步骤604没有必然的先后顺序。
[0125] 基于同一发明构思,本发明实施例中还提供了一种具有本发明实施例启动应用功能的终端,由于本发明实施例中的终端对应的方法为本发明实施例启动应用的方法,因此本发明实施例终端的实施可以参见该方法的实施,重复之处不再赘述。
[0126] 请参阅图7a,为本发明实施例提供的装置700的结构示意图。
[0127] 该启动应用的装置包括:读取模块710,用于在存储器800中空闲内存的大小大于预设阈值时,获取存储器800中的目标应用列表,其中,目标应用列表用于存储最近一次释放内存的应用的标识,应用的标识用于唯一标识应用;进程启动模块720,用于在后台启动目标应用列表中的至少一个标识所标识的应用的进程。
[0128] 进一步的,如图7b所示,该启动应用的装置还包括界面启动模块730;该界面启动模块730用于在后台启动目标应用列表中的至少一个标识所标识的应用的Activity。
[0129] 更进一步的,界面启动模块730,具体用于针对至少一个标识中一个标识所标识的应用,创建一个新的任务Task;若确定用于存储Task的栈Stack中除包括桌面Stack以外不包括应用Stack,则将创建一个应用Stack,将新的Task存储到创建的应用Stack中,其中,创建的应用Stack位于Stack的栈底,桌面Stack位于Stack的栈顶;若确定Stack中除包括桌面Stack以外还包括存储除目标应用列表中存储的标识所标识的所有应用以外的其它应用的Task的应用Stack,则将新的Task存储到存储有其它应用的Task的应用Stack中,其中,存储有其它应用的Task的应用Stack位于Stack的栈顶,桌面Stack位于Stack的栈底,新的Task存储的位置在存储有其它应用的Task的应用Stack中位于靠近栈底的位置。
[0130] 进一步的,进程启动模块720,具体用于在后台启动目标应用列表中的至少一个标识所标识的应用的进程,其中,启动的应用占用的内存的大小不大于空闲内存的大小,且至少一个标识所标识的应用的优先级在目标应用列表中存储的标识所标识的应用的优先级中的排在前n位,其中,n大于0。
[0131] 进一步的,进程启动模块720,具体用于在后台启动目标应用列表中的至少一个标识所标识的应用的进程,其中,启动的至少一个标识所标识的应用占用的内存的大小不大于空闲内存的大小,且至少一个标识所标识的应用的使用次数不小于预设次数。
[0132] 更进一步的,进程启动模块720,还用于在后台启动关联应用的进程,关联应用为目标应用列表存储的标识所标识的应用中至少一个标识所标识的应用关联的应用。
[0133] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0134] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明实施例所述的绘图装置可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。
[0135] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。