鸿蒙5.0 APP性能优化——分析内存占用问题

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)

✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

✏️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

✏️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

✏️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

✏️ 记录一场鸿蒙开发岗位面试经历~

✏️ 持续更新中……


随着时代的发展,应用越来越复杂,占用的内存也在不断膨胀,而内存作为系统的稀缺资源比较有限,因此,主动减少应用内存的占用对于整个系统至关重要。当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应用程序的性能下降,甚至出现崩溃和卡顿的情况。通过减少应用内存的占用,可以有效提高应用的性能和响应速度,节省系统资源,让设备的运行效率更高,延长设备的续航时间。开发者应该在应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。DevEco Profiler提供了基础内存分析:Allocation分析和内存泄露分析:Snapshot分析能力

HiDumper查看内存信息

开发者可以通过以下步骤,获取到当前应用的内存信息。

  1. 打开示例应用,运行 hdc shell “hidumper -s WindowManagerService -a ‘-a’” 获取到当前应用的pid。

  1. 输入 hdc shell “hidumper --mem [Pid]” ,并将命令中的 [Pid] 换成当前应用的Pid,就可以获取到示例应用的内存信息了

一般情况下,开发者只需要关注PSS (Proportional Set Size,实际使用物理内存)Total一列的数据,即示例应用实际使用的物理内存。如下图所示,应用总共占用了26279KB的内存,主要包括ark ts heap(ArkTS堆内存)的4712KB以及native heap的13164KB。

使用onMemoryLevel监听内存变化

onMemoryLevel是HarmonyOS提供监听系统内存变化的接口,开发者可以通过onMemoryLevel监听内存变化,从而调整应用的内存。onMemoryLevel回调包括三种方式,分别为AbilityStage、UIAbility、EnvironmentCallback。

  • AbilityStage:当HAP中的代码首次被加载到进程中的时候,系统会先创建AbilityStage实例,系统决定调整内存时,再回调AbilityStage实例的onMemoryLevel方法。

  • UIAbility:Ability是UIAbility的基类,在Ability中,提供系统内存变化的回调方法。

  • EnvironmentCallback:EnvironmentCallback模块提供应用上下文ApplicationContext对系统环境变化监听回调的能力。

MemoryLevel分为MEMORY_LEVEL_MODERATE、MEMORY_LEVEL_LOW和MEMORY_LEVEL_CRITICAL三种。其中,MEMORY_LEVEL_MODERATE代表当前系统内存压力适中,应用可以正常运行而不会受到太大影响,MEMORY_LEVEL_LOW代表当前系统的内存已经比较低了,应用应该释放不必要的内存资源,避免造成系统卡顿,MEMORY_LEVEL_CRITICAL代表当前所剩的系统内存非常紧张,应用应该尽可能释放更多的资源,以确保系统的稳定性和性能。开发人员应该根据不同的内存级别来采取相应的措施,如释放资源、优化内存使用等,以确保应用在不同内存状态下都能正常运行。MemoryLevel具体等级定义如下所示:

表1onMemoryLevel等级定义

等级说明
MEMORY_LEVEL_MODERATE0系统内存适中。系统可能会开始根据LRU缓存规则杀死进程。
MEMORY_LEVEL_LOW1系统内存比较低。此时应该去释放掉一些不必要的资源以提升系统的性能。
MEMORY_LEVEL_CRITICAL2系统内存很低。此时应当尽可能地去释放任何不必要的资源,因为系统可能会杀掉所有缓存中的进程,并且开始杀掉应当保持运行的进程,比如后台运行的服务。

说明
后台已冻结的应用,AbilityStage、UIAbility、EnvironmentCallback的onMemoryLevel都不可以进行回调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值