安卓系统的内存管理方法和系统、电子设备、存储介质与流程

文档序号:33141249发布日期:2023-02-03 20:18阅读:123来源:国知局
安卓系统的内存管理方法和系统、电子设备、存储介质与流程

1.本公开涉及内存管理技术领域,尤其涉及一种安卓系统的内存管理方法和系统、电子设备、存储介质。


背景技术:

2.目前,基于安卓系统的终端设备通常在后台保存开启的应用,以便在下次快速启动该应用。但是,由于后台保存的应用需占用一定的内存,因此,若后台保存的应用过多,将拖慢终端设备的运行速度。
3.为了提升终端设备的运行速度,安卓系统设置有低内存管理(low memory killer,lm killer)功能,在当前空闲内存的大小小于某个阈值时,以该阈值对应的优先级为基准,遍历各个应用,计算每个应用占用内存的大小,找出优先级大于基准优先级的应用,并将优先级最大的应用杀死。但由于该方法每次仅杀死一个应用,导致释放内存的速度过慢而不能充分利用内存达到提升驻留,无法满足应用对内存的需求,降低使用体验。


技术实现要素:

4.本公开提供一种安卓系统的内存管理方法和系统、电子设备、存储介质,以解决相关技术的不足。
5.根据本公开实施例的第一方面,提供一种安卓系统的内存管理系统,所述安卓系统包括框架层、本地层和核心层;所述内存管理系统包括设置在所述框架层的服务模块、设置在所述本地层的内存管理模块和设置在所述核心层的回收接口模块;所述服务模块分别与所述内存管理模块和所述回收接口模块通信;
6.所述内存管理模块,用于获取内存回收路径上钩点的内存压力信息确定内存事件,并将所述内存事件上报给所述服务模块;
7.所述服务模块,用于在所述内存事件为基于进程回收内存事件时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。
8.可选地,所述内存管理模块,用于获取内存回收路径上钩点的内存压力信息确定内存事件,包括:
9.根据内存压力上报内存回收事件;
10.判断是否满足第一预设条件,若满足所述第一预设条件则根据内存压力上报关闭进程事件;所述第一预设条件包括以下至少一种:当前使用内存的对象连续进入直接回收次数超过预设次数阈值、连续中等压力超过预设中等压力阈值和内核线程kswapd连续水线进入低水位;
11.若不满足所述第一预设条件,则判断是否满足第二预设条件,若满足所述第二预设条件则继续监听内存回收路径压力;所述第二预设条件是指内存压力等级小于紧急内存压力等级、内核线程kswapd和直接回收率正常、文件页波动小于预设波动阈值且回收路径不存在内存规整;若不满足所述第二预设条件,则判断是否内存压缩利用率达到预设利用
率阈值,若达到所述预设利用率阈值则根据内存压力上报关闭进程事件;
12.若未达到所述预设利用率阈值,则判断是否可用内存小于预设可用阈值,若可用内存小于预设可用阈值则根据内存压力上报关闭进程事件,若可用内存超过预设可用阈值则继续监听内存回收路径压力。
13.可选地,所述核心层还包括内存回收接口模块;所述内存回收接口模块与所述服务模块通信;
14.所述服务模块还用于在接收充电信号和/或锁屏信号时调用所述内存回收接口模块,由所述内存回收接口模块为用户态的进程提供主动回收匿名页内存。
15.可选地,所述服务模块还用于在接收到电源断开信号和/亮屏信号时停止调用所述内存回收接口模块以停止内存回收。
16.可选地,所述框架层还包括系统压力控制模块;所述系统压力控制模块与所述服务模块通信;
17.所述服务模块还用于在所述内存事件为关闭进程事件时向所述系统压力控制模块发送第一通知消息;
18.所述系统压力控制模块用于响应于所述第一通知消息根据进程的活跃度关闭进程。
19.可选地,所述系统压力控制模块用于响应于所述第一通知消息根据进程的活跃度关闭进程,包括:
20.响应于接收到所述第一通知消息,获取进程列表中各个进程的优先级;
21.当各个进程的优先级均超过预设优先级阈值时,根据各个应用的使用频次计算使用等级,以及根据各个应用占用内存的大小计算内存等级;
22.根据各个应用的使用等级、内存等级和优先级计算活跃度;
23.从活跃度最高的子进程开始,关闭子进程直至关闭子进程释放内存的大小超过设定释放阈值为止。
24.可选地,所述框架层还包括活动管理服务模块;所述活动管理服务模块与所述回收接口模块通信;
25.所述活动管理服务模块用于在检测到应用切换到后台时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。
26.可选地,所述活动管理服务模块还与所述核心层中的内存回收接口模块通信;
27.所述活动管理服务模块用于在检测到从应用切换到桌面时调用所述内存回收接口模块,由所述内存回收接口模块为用户态的进程提供主动回收匿名页内存。
28.可选地,所述活动管理服务模块还与所述框架层中的系统压力控制模块通信;
29.所述活动管理服务模块用于在检测到当前运行的目标应用切换到后台时向所述系统压力控制模块发送第二通知消息;
30.所述系统压力控制模块用于响应于接收到所述第二通知消息关闭占用内存超过预设占用阈值的目标应用。
31.可选地,所述系统压力控制模块用于响应于接收到通知消息关闭占用内存超过预设占用阈值的目标应用,包括:
32.响应于接收到所述第二通知消息,获取所述目标应用切换到后台的时长;
33.当所述时长超过预设时长时,获取所述目标应用的子进程;
34.分别计算所述目标应用的子进程和主进程所占用的内存;
35.当所述目标应用占用的总内存超过预设占用内存阈值时,关闭所述目标应用;
36.否则判断所述目标应用的子进程所占用的内存是否超过子进程阈值;
37.若超过所述子进程阈值则关闭所述目标应用的子进程,若未超过所述子进程阈值则判断所述目标应用实际使用内存是否超过实际内存阈值;
38.若超过所述实际内存阈值则压缩进程,若未超过所述实际内存阈值则结束。
39.可选地,所述活动管理服务模块还包括优先级调整单元;所述优先级调整单元用于调整满足第三预设条件的当前应用的优先级,所述当前应用是指调用指定应用时需要指定应用切换到前台的应用,所述第三预设条件是指调用指定应用时切换到后台。
40.根据本公开实施例的第二方面,提供一种安卓系统的内存管理方法,适用于基于安卓系统设置的内存管理系统,所述安卓系统包括框架层、本地层和核心层;所述内存管理系统包括设置在所述框架层的服务模块、设置在所述本地层的内存管理模块和设置在所述核心层的回收接口模块;所述服务模块分别与所述内存管理模块和所述回收接口模块通信;所述方法包括:
41.所述内存管理模块获取内存回收路径上钩点的内存压力信息确定内存事件,并将所述内存事件上报给所述服务模块;
42.所述服务模块在所述内存事件为基于进程回收内存事件时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。
43.可选地,所述内存管理模块获取内存回收路径上钩点的内存压力信息确定内存事件,包括:
44.根据内存压力上报内存回收事件;
45.判断是否满足第一预设条件,若满足所述第一预设条件则根据内存压力上报关闭进程事件;所述第一预设条件包括以下至少一种:当前使用内存的对象连续进入直接回收次数超过预设次数阈值、连续中等压力超过预设中等压力阈值和内核线程kswapd连续水线进入低水位;
46.若不满足所述第一预设条件,则判断是否满足第二预设条件,若满足所述第二预设条件则继续监听内存回收路径压力;所述第二预设条件是指内存压力等级小于紧急内存压力等级、内核线程kswapd和直接回收率正常、文件页波动小于预设波动阈值且回收路径不存在内存规整;若不满足所述第二预设条件,则判断是否内存压缩利用率达到预设利用率阈值,若达到所述预设利用率阈值则根据内存压力上报关闭进程事件;
47.若未达到所述预设利用率阈值,则判断是否可用内存小于预设可用阈值,若可用内存小于预设可用阈值则根据内存压力上报关闭进程事件,若可用内存超过预设可用阈值则继续监听内存回收路径压力。
48.可选地,所述核心层还包括内存回收接口模块;所述内存回收接口模块与所述服务模块通信;所述方法还包括:
49.所述服务模块在接收充电信号和/或锁屏信号时调用所述内存回收接口模块,由所述内存回收接口模块为用户态的进程提供主动回收匿名页内存。
50.可选地,所述方法还包括:
51.所述服务模块在接收到电源断开信号和/亮屏信号时停止调用所述内存回收接口模块以停止内存回收。
52.可选地,所述框架层还包括系统压力控制模块;所述系统压力控制模块与所述服务模块通信;所述方法还包括:
53.所述服务模块在所述内存事件为关闭进程事件时向所述系统压力控制模块发送第一通知消息;
54.所述系统压力控制模块响应于所述第一通知消息根据进程的活跃度关闭进程。
55.可选地,所述方法压力控制模块响应于所述第一通知消息根据进程的活跃度关闭进程,包括:
56.响应于接收到所述第一通知消息,获取进程列表中各个进程的优先级;
57.当各个进程的优先级均超过预设优先级阈值时,根据各个应用的使用频次计算使用等级,以及根据各个应用占用内存的大小计算内存等级;
58.根据各个应用的使用等级、内存等级和优先级计算活跃度;
59.从活跃度最高的子进程开始,关闭子进程直至关闭子进程释放内存的大小超过设定释放阈值为止。
60.可选地,所述框架层还包括活动管理服务模块;所述活动管理服务模块与所述回收接口模块通信;所述方法还包括:
61.所述活动管理服务模块在检测到应用切换到后台时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。
62.可选地,所述活动管理服务模块还与所述核心层中的内存回收接口模块通信;所述方法还包括:
63.所述活动管理服务模块在检测到从应用切换到桌面时调用所述内存回收接口模块,由所述内存回收接口模块为用户态的进程提供主动回收匿名页内存。
64.可选地,所述活动管理服务模块还与所述框架层中的系统压力控制模块通信;所述方法还包括:
65.所述活动管理服务模块在检测到当前运行的目标应用切换到后台时向所述系统压力控制模块发送第二通知消息;
66.所述系统压力控制模块响应于接收到所述第二通知消息关闭占用内存超过预设占用阈值的目标应用。
67.可选地,所述系统压力控制模块用于响应于接收到所述第二通知消息关闭占用内存超过预设占用阈值的目标应用,包括:
68.响应于接收到所述第二通知消息,获取所述目标应用切换到后台的时长;
69.当所述时长超过预设时长时,获取所述目标应用的子进程;
70.分别计算所述目标应用的子进程和主进程所占用的内存;
71.当所述应用占用的总内存超过预设占用内存阈值时,关闭所述目标应用;
72.否则判断所述目标应用的子进程所占用的内存是否超过子进程阈值;
73.若超过所述子进程阈值则关闭所述目标应用的子进程,若未超过所述子进程阈值则判断所述应用实际使用内存是否超过实际内存阈值;
74.若超过所述实际内存阈值则压缩进程,若未超过所述实际内存阈值则结束。
75.可选地,所述活动管理服务模块还包括优先级调整单元;所述方法还包括:
76.所述优先级调整单元调整满足第三预设条件的当前应用的优先级,所述当前应用是指调用指定应用时需要指定应用切换到前台的应用,所述第三预设条件是指调用指定应用时切换到后台。
77.根据本公开实施例的第三方面,提供一种电子设备,包括:
78.处理器;
79.用于存储所述处理器可执行的计算机程序的存储器;
80.其中,所述处理器被配置为执行所述存储器中的计算机程序,以实现如上述任一项所述的方法。
81.根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现如上述任一项所述的方法。
82.本公开的实施例提供的技术方案可以包括以下有益效果:
83.由上述实施例可知,本公开实施例提供的方案中,内存管理系统包括设置在所述框架层的服务模块、设置在所述本地层的内存管理模块和设置在所述核心层的回收接口模块;所述服务模块分别与所述内存管理模块和所述回收接口模块通信;所述内存管理模块,用于获取内存回收路径上钩点的内存压力信息确定内存事件,并将所述内存事件上报给所述服务模块;所述服务模块,用于在所述内存事件为基于进程回收内存事件时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。这样,本实施例中可以获取内存回收路径上的内存压力信息,可以整体角度来考虑内存压力情况并主动关闭进程和有效组织回收,从而缓解系统内存压力,有利于提高系统流畅度和提高应用驻留,从而提供更好的用户体验。
84.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
85.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
86.图1是根据一示例性实施例示出的一种安卓系统的内存管理系统的框图。
87.图2是根据一示例性实施例示出的获取内存事件类型的流程图。
88.图3是根据一示例性实施例示出的获取内存压力事件的流程图。
89.图4是根据一示例性实施例示出的关闭子进程的流程图。
90.图5是根据一示例性实施例示出的活跃度关闭内存的流程图。
91.图6是根据一示例性实施例示出的一种安卓系统的内存管理方法的流程图。
92.图7是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
93.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性所描述的实施例并不代表与本公开相一致的所有实施例。相反,它们仅是与如所附权利要求书中
所详述的、本公开的一些方面相一致的装置例子。需要说明的是,在不冲突的情况下,下述的实施例及实施方式中的特征可以相互组合。
94.为解决上述技术问题,本公开实施例提供了一种安卓系统的内存管理系统,可以应用于配置有安卓(android)系统的电子设备,例如平板电脑、智能手机、个人计算机、智能电视等设备,图1是根据一示例性实施例示出的一种图安卓系统的内存管理系统的框图。可理解的是,图1中仅示出了本公开各实施例的方案相关的各个模块和安卓系统的各个层级,对于保证安卓系统正常运行的其他模块(或者层级)则未示出。
95.参见图1,安卓系统包括框架层(framework)、本地层(native)和核心层(linux kernel)。在此基础上,一种内存管理系统包括设置在框架层的服务模块(miuimemoryservice)、设置在本地层的内存管理模块(mi memory manager)和设置在核心层的回收接口模块(reclaim);服务模块(miuimemoryservice)分别与内存管理模块(mi memory manager)和回收接口模块(reclaim)通信。其中,
96.内存管理模块(mi memory manager),用于获取内存回收路径上钩点(hook)的内存压力信息确定内存事件,并将内存事件上报给服务模块(miuimemoryservice);服务模块(miuimemoryservice),用于在内存事件为基于进程回收内存事件时调用回收接口模块(reclaim),由回收接口模块(reclaim)关闭对应的进程接口。例如,回收接口模块(reclaim)可以提供内核文件节点/proc/pid/reclaim。服务模块可以获取回收事件类型,参见图2,当确定为基于进程回收内存事件时,服务模块(miuimemoryservice)可以调用该回收接口模块(reclaim)即用户态写此节点,回收接口模块(reclaim)可以遍历进程vma(virtual memory area)回收内存。这样,本实施例中可以获取内存回收路径上的内存压力信息,可以整体角度来考虑内存压力情况并主动关闭进程(也可以称之为杀进程),从而缓解系统内存压力,有利于提高系统流畅度和提高应用驻留,从而提供更好的用户体验。
97.在一实施例中,参见图1,本地层(native)中包括用于监听内存压力信息模块(pressure stall information,psi)中内存压力事件的低内存关闭进程守护进程(low memory killer daemon,lmkd),低内存关闭进程守护进程可以通过epoll方式获取系统cpu利用率,从而获得内存压力信息。另外,该低内存关闭进程守护进程还可以通过socket方式将内存压力信息上报给服务模块。本实施例中,可以在内存回收路径添加钩点(hook)来获取所在位置的内存压力,即内存管理模块(mi memory manager)可以通过钩点(hook)获取内存回收路径的内存压力信息,并根据内存压力信息来确定内存事件,参见图3,包括:
98.(1)根据内存压力上报内存回收事件。例如,根据内存压力划分压力等级,例如,低等内存压力、中等内存压力、紧急内存压力等等级,可以根据具体场景划分压力等级的数量和取值范围,在此不作限定。可理解的是,不同内存压力对应的内存回收事件等级不一样,因此,内存回收事件等级越高则回收级别越高;或者说,在需要内存回收时,先关闭内存回收事件等级较高的事件所对应的应用或者线程。
99.(2)判断是否满足第一预设条件,其中第一预设条件包括以下至少一种:当前使用内存的对象连续进入直接回收次数超过预设次数阈值、连续中等压力超过预设中等压力阈值和内核线程kswapd连续水线进入低水位,若满足第一预设条件则根据内存压力上报关闭进程事件。其中上述对象是指应用或者系统进程。
100.(3)若不满足第一预设条件,则继续判断是否满足第二预设条件,第二预设条件是
指内存压力等级小于紧急内存压力等级、内核线程kswapd和直接回收率正常、文件页波动小于预设波动阈值且回收路径不存在内存规整,若满足第二预设条件则继续监听内存回收路径压力。
101.(4)若不满足第二预设条件,则继续判断是否内存压缩(zram)利用率达到预设利用率阈值,若利用率达到预设利用率阈值则根据内存压力上报关闭进程事件。
102.(5)若利用率未达到预设利用率阈值,则判断是否可用内存小于预设可用阈值,若可用内存小于预设可用阈值则根据内存压力上报关闭进程事件,若可用内存超过预设可用阈值则继续监听内存回收路径压力。
103.这样,本实施例中通过设置内存管理模块(mi memory manager),可以根据内存压力信息生成内存回收事件和关闭进程事件,并上报给服务模块(miuimemoryservice),达到主动管理系统内存的效果。
104.在一实施例中,继续参见图1,核心层还包括内存回收接口模块(mi memory reclaim)。该内存回收接口模块(mi memory reclaim)与服务模块(miuimemoryservice)通信。其中,服务模块(miuimemoryservice)还用于在接收充电信号和/或锁屏信号时调用内存回收接口模块(mi memory reclaim),由该内存回收接口模块(mi memory reclaim)为用户态的进程提供主动回收匿名页内存。例如,内存回收接口模块(mi memory reclaim)可以提供内核文件节点/sys/kernel/mi_reclaim/event,当服务模块(miuimemoryservice)调用内存回收接口模块(mi memory reclaim)即用户态写此节点时,可以由内存回收接口模块(mi memory reclaim)内的回收线程调用安卓系统内核(kernel)提供的全局回收内存接口回收内存。
105.在一实施例中,服务模块(miuimemoryservice)还可以在接收到电源断开信号和/亮屏信号时停止调用所述内存回收接口模块(mi memory reclaim),从而可以停止内存回收。
106.这样,本实施例中通过设置内存回收接口模块(mi memory reclaim),可以在一些设定场景(例如充电场景和锁屏场景)下全局回收内存,达到主动管理系统内存的效果,缓解系统内存压力,有利于提高系统流畅度和提高应用驻留,从而提供更好的用户体验。
107.在一实施例中,继续参见图1,框架层(framework)还包括系统压力控制模块(systempressurecontroller)。系统压力控制模块(systempressurecontroller)可以与服务模块(miuimemoryservice)通信。其中,服务模块(miuimemoryservice)还用于在内存事件为关闭进程事件时向系统压力控制模块(systempressurecontroller)发送第一通知消息。系统压力控制模块(systempressurecontroller)用于响应于第一通知消息根据进程的活跃度关闭进程。
108.参见图4,系统压力控制模块(systempressurecontroller)用于响应于第一通知消息根据进程的活跃度关闭进程,可以包括:
109.(1)响应于接收到所述第一通知消息,获取进程列表中各个进程的优先级(adj)。
110.(2)当各个进程的优先级均超过预设优先级阈值(如取值为200)时,根据各个应用的使用频次计算使用等级。其中,使用频次可以根据各个应用的历史使用记录统计得到,例如一个月、一周或者一天内使用各个应用的次数,根据预设的次数和使用等级的对应关系,可以计算出各个应用的使用等级。以及可以根据各个应用占用内存的大小计算内存等级。
例如,根据预设的内存大小和内存等级的对应关系,在确定各个应用所占用内存的大小后即可根据上述对应关系确定出内存等级。
111.(3)根据各个应用的使用等级、内存等级和优先级计算活跃度。例如,使用等级可以乘以对应的权重,内存等级可以乘以对应的权重,优先级可以乘以对应的权重,然后将各个乘积求和,该和值作为应用的活跃度。
112.(4)从活跃度最高的子进程开始,关闭子进程直至关闭子进程释放内存的大小超过设定释放阈值(如50mb)为止。
113.这样,本实施例中通过设置系统压力控制模块(systempressurecontroller),可以根据活跃度来关闭应用以释放其占用内存,达到主动管理系统内存的效果,有利于提高系统流畅度和提高应用驻留,从而提供更好的用户体验。
114.在一实施例中,继续参见图1,框架层(framework)还包括活动管理服务模块(activitymanagerservice,ams)。该活动管理服务模块(activitymanagerservice,ams)可以与核心层中的回收接口模块(reclaim)通信。其中,活动管理服务模块(activitymanagerservice,ams)用于在检测到应用切换到后台时调用回收接口模块(reclaim),由回收接口模块关闭对应的进程接口即可以基于进程回收匿名页所占用的内存,达到释放匿名页所占用的内存的效果,有利于缓解系统内存压力,提高系统流畅度和提高应用驻留。
115.在一实施例中,继续参见图1,该活动管理服务模块(activitymanagerservice,ams)还可以与核心层中的内存回收接口模块(mi memory reclaim)通信。其中,活动管理服务模块(activitymanagerservice,ams)用于在检测到从应用切换到桌面时调用内存回收接口模块(mi memory reclaim),由内存回收接口模块(mi memory reclaim)为用户态的进程提供主动回收匿名页内存。内存回收接口模块的工作原理已经在之前实施例中描述,在此不再赘述。
116.在一实施例中,继续参见图1,活动管理服务模块(activitymanagerservice,ams)还可以与所述框架层(framework)中的系统压力控制模块(systempressurecontroller)通信。其中,活动管理服务模块(activitymanagerservice,ams)可以在检测到当前运行的目标应用切换到后台时向系统压力控制模块(systempressurecontroller)发送第二通知消息。系统压力控制模块(systempressurecontroller)可以响应于接收到第二通知消息关闭占用内存超过预设占用阈值的目标应用。
117.参见图5,系统压力控制模块(systempressurecontroller)可以响应于接收到第二通知消息关闭占用内存超过预设占用阈值的目标应用,包括:
118.响应于接收到第二通知消息,获取目标应用切换到后台的时长;当时长超过预设时长(如5s)时,获取目标应用的子进程;分别计算目标应用的子进程和主进程所占用的内存;当目标应用占用的总内存超过预设占用内存阈值时,关闭目标应用;否则判断目标应用的子进程所占用的内存是否超过子进程阈值;若超过子进程阈值则关闭目标应用的子进程,若未超过子进程阈值则判断目标应用实际使用内存是否超过实际内存阈值;若超过实际内存阈值则压缩进程,若未超过实际内存阈值否则结束。
119.这样,本实施例中通过设置系统压力控制模块(systempressurecontroller),可以关闭切换到后台且占用内存较大的目标应用来释放其占用内存,达到主动管理系统内存
的效果,有利于提高系统流畅度和提高应用驻留,从而提供更好的用户体验。
120.在一实施例中,继续参见图1,活动管理服务模块(activitymanagerservice,ams)还包括优先级调整单元(miprocessoomadjuster)。该优先级调整单元(miprocessoomadjuster)用于调整满足第三预设条件的当前应用的优先级,该当前应用是指调用指定应用时需要指定应用切换到前台的应用,第三预设条件是指调用指定应用时切换到后台。上述指定应用可以包括但不限于相机应用、语音应用、相册应用等。这样,本实施例中,当前应用在调用指定应用且指定应用切换到前台而当前应用切换到后台时,虽然当前应用在后面会被按照已有策略降低优先级,但通过上述优先级调整单元可以在降低到目标优先级时再调整其优先级,如恢复原有的优先级并保持一段时长(如2分钟),从而保证当前应用不会被关闭,提高使用体验。
121.在上述一种内存管理系统的基础上,本公开实施例还提供了一种安卓系统的内存管理方法,适用于基于安卓系统设置的内存管理系统,所述安卓系统包括框架层(framework)、本地层(native)和核心层(linux kernel);所述内存管理系统包括设置在所述框架层的服务模块(miuimemoryservice)、设置在所述本地层的内存管理模块(mi memory manager)和设置在所述核心层的回收接口模块(reclaim);所述服务模块(miuimemoryservice)分别与所述内存管理模块(mi memory manager)和所述回收接口模块(reclaim)通信;参见图6,所述方法包括:
122.在步骤61中,所述内存管理模块(mi memory manager)获取内存回收路径上钩点(hook)的内存压力信息确定内存事件,并将所述内存事件上报给所述服务模块(miuimemoryservice);
123.在步骤62中,所述服务模块(miuimemoryservice)在所述内存事件为基于进程回收内存事件时调用所述回收接口模块,由所述回收接口模块关闭对应的进程接口。
124.在一实施例中,所述内存管理模块(mi memory manager)获取内存回收路径上钩点(hook)的内存压力信息确定内存事件,包括:
125.根据内存压力上报内存回收事件;
126.判断是否满足第一预设条件,若满足所述第一预设条件则根据内存压力上报关闭进程事件;所述第一预设条件包括以下至少一种:当前使用内存的对象连续进入直接回收次数超过预设次数阈值、连续中等压力超过预设中等压力阈值和内核线程kswapd连续水线进入低水位;
127.若不满足所述第一预设条件,则判断是否满足第二预设条件,若满足所述第二预设条件则继续监听内存回收路径压力;所述第二预设条件是指内存压力等级小于紧急内存压力等级、内核线程kswapd和直接回收率正常、文件页波动小于预设波动阈值且回收路径不存在内存规整;若不满足所述第二预设条件,则判断是否内存压缩(zram)利用率达到预设利用率阈值,若达到所述预设利用率阈值则根据内存压力上报关闭进程事件;
128.若未达到所述预设利用率阈值,则判断是否可用内存小于预设可用阈值,若可用内存小于预设可用阈值则根据内存压力上报关闭进程事件,若可用内存超过预设可用阈值则继续监听内存回收路径压力。
129.在一实施例中,所述核心层还包括内存回收接口模块(mi memory reclaim);所述内存回收接口模块(mi memory reclaim)与所述服务模块(miuimemoryservice)通信;所述
方法还包括:
130.所述服务模块(miuimemoryservice)在接收充电信号和/或锁屏信号时调用所述内存回收接口模块(mi memory reclaim),由所述内存回收接口模块(mi memory reclaim)为用户态的进程提供主动回收匿名页内存。
131.在一实施例中,所述方法还包括:
132.所述服务模块(miuimemoryservice)在接收到电源断开信号和/亮屏信号时停止调用所述内存回收接口模块(mi memory reclaim)以停止内存回收。
133.在一实施例中,所述框架层(framework)还包括系统压力控制模块(systempressurecontroller);所述系统压力控制模块(systempressurecontroller)与所述服务模块(miuimemoryservice)通信;所述方法还包括:
134.所述服务模块(miuimemoryservice)在所述内存事件为关闭进程事件时向所述系统压力控制模块(systempressurecontroller)发送第一通知消息;
135.所述系统压力控制模块(systempressurecontroller)响应于所述第一通知消息根据进程的活跃度关闭进程。
136.在一实施例中,所述方法压力控制模块(systempressurecontroller)响应于所述第一通知消息根据进程的活跃度关闭进程,包括:
137.响应于接收到所述第一通知消息,获取进程列表中各个进程的优先级;
138.当各个进程的优先级均超过预设优先级阈值时,根据各个应用的使用频次计算使用等级,以及根据各个应用占用内存的大小计算内存等级;
139.根据各个应用的使用等级、内存等级和优先级计算活跃度;
140.从活跃度最高的子进程开始,关闭子进程直至关闭子进程释放内存的大小超过设定释放阈值为止。
141.在一实施例中,所述框架层(framework)还包括活动管理服务模块(activitymanagerservice,ams);所述活动管理服务模块(activitymanagerservice,ams)与所述回收接口模块(reclaim)通信;所述方法还包括:
142.所述活动管理服务模块(activitymanagerservice,ams)在检测到应用切换到后台时调用所述回收接口模块(reclaim),由所述回收接口模块关闭对应的进程接口。
143.在一实施例中,所述活动管理服务模块(activitymanagerservice,ams)还与所述核心层中的内存回收接口模块(mi memory reclaim)通信;所述方法还包括:
144.所述活动管理服务模块(activitymanagerservice,ams)在检测到从应用切换到桌面时调用所述内存回收接口模块(mi memory reclaim),由所述内存回收接口模块(mi memory reclaim)为用户态的进程提供主动回收匿名页内存。
145.在一实施例中,所述活动管理服务模块(activitymanagerservice,ams)还与所述框架层(framework)中的系统压力控制模块(systempressurecontroller)通信;所述方法还包括:
146.所述活动管理服务模块(activitymanagerservice,ams)在检测到当前运行的目标应用切换到后台时向所述系统压力控制模块(systempressurecontroller)发送第二通知消息;
147.所述系统压力控制模块(systempressurecontroller)响应于接收到所述第二通
知消息关闭占用内存超过预设占用阈值的目标应用。
148.在一实施例中,所述系统压力控制模块(systempressurecontroller)用于响应于接收到所述第二通知消息关闭占用内存超过预设占用阈值的目标应用,包括:
149.响应于接收到所述第二通知消息,获取所述目标应用切换到后台的时长;
150.当所述时长超过预设时长时,获取所述目标应用的子进程;
151.分别计算所述目标应用的子进程和主进程所占用的内存;
152.当所述应用占用的总内存超过预设占用内存阈值时,关闭所述目标应用;
153.否则判断所述目标应用的子进程所占用的内存是否超过子进程阈值;
154.若超过所述子进程阈值则关闭所述目标应用的子进程,若未超过所述子进程阈值则判断所述应用实际使用内存是否超过实际内存阈值;
155.若超过所述实际内存阈值则压缩进程,若未超过所述实际内存阈值则结束。
156.在一实施例中,所述活动管理服务模块(activitymanagerservice,ams)还包括优先级调整单元(miprocessoomadjuster);所述方法还包括:
157.所述优先级调整单元(miprocessoomadjuster)调整满足第三预设条件的当前应用的优先级,所述当前应用是指调用指定应用时需要指定应用切换到前台的应用,所述第三预设条件是指调用指定应用时切换到后台。
158.需要说明的是,本实施例中示出的方法与图1所示系统实施例的内容相匹配,可以参考上述方法实施例的内容,在此不再赘述。
159.图7是根据一示例性实施例示出的一种电子设备的框图。例如,电子设备700可以是智能手机,计算机,数字广播终端,平板设备,医疗设备,健身设备,个人数字助理等。
160.参照图7,电子设备700可以包括以下一个或多个组件:处理组件702,存储器704,电源组件706,多媒体组件708,音频组件710,输入/输出(i/o)的接口712,传感器组件714,通信组件716,图像采集组件718,以及上述壳体。
161.处理组件702通常控制电子设备700的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件702可以包括一个或多个处理器720来执行计算机程序。此外,处理组件702可以包括一个或多个模块,便于处理组件702和其他组件之间的交互。例如,处理组件702可以包括多媒体模块,以方便多媒体组件708和处理组件702之间的交互。
162.存储器704被配置为存储各种类型的数据以支持在电子设备700的操作。这些数据的示例包括用于在电子设备700上操作的任何应用程序或方法的计算机程序,联系人数据,电话簿数据,消息,图片,视频等。存储器704可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
163.电源组件706为电子设备700的各种组件提供电力。电源组件706可以包括电源管理系统,一个或多个电源,及其他与为电子设备700生成、管理和分配电力相关联的组件。电源组件706可以包括电源芯片,控制器可以电源芯片通信,从而控制电源芯片导通或者断开开关器件,使电池向主板电路供电或者不供电。
164.多媒体组件708包括在电子设备700和目标对象之间的提供一个输出接口的屏幕。
在一些实施例中,屏幕可以包括液晶显示屏(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自目标对象的输入信息。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
165.音频组件710被配置为输出和/或输入音频文件信息。例如,音频组件710包括一个麦克风(mic),当电子设备700处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频文件信息。所接收的音频文件信息可以被进一步存储在存储器704或经由通信组件716发送。在一些实施例中,音频组件710还包括一个扬声器,用于输出音频文件信息。
166.i/o接口712为处理组件702和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。
167.传感器组件714包括一个或多个传感器,用于为电子设备700提供各个方面的状态评估。例如,传感器组件714可以检测到电子设备700的打开/关闭状态,组件的相对定位,例如组件为电子设备700的显示屏和小键盘,传感器组件714还可以检测电子设备700或一个组件的位置改变,目标对象与电子设备700接触的存在或不存在,电子设备700方位或加速/减速和电子设备700的温度变化。本示例中,传感器组件714可以包括磁力传感器、陀螺仪和磁场传感器,其中磁场传感器包括以下至少一种:霍尔传感器、薄膜磁致电阻传感器、磁性液体加速度传感器。
168.通信组件716被配置为便于电子设备700和其他设备之间有线或无线方式的通信。电子设备700可以接入基于通信标准的无线网络,如wifi,2g、3g、4g、5g,或它们的组合。在一个示例性实施例中,通信组件716经由广播信道接收来自外部广播管理系统的广播信息或广播相关信息。在一个示例性实施例中,通信组件716还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
169.在示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(asic)、数字信息处理器(dsp)、数字信息处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现。
170.在示例性实施例中,还提供了一种包括可执行的计算机程序的非临时性可读存储介质,例如包括指令的存储器704,上述可执行的计算机程序可由处理器执行。其中,可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
171.本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
172.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1