HarmonyOS鸿蒙Next中如何获取系统总运存,剩余运存和APP占用内存

HarmonyOS鸿蒙Next中如何获取系统总运存,剩余运存和APP占用内存 【设备信息】Mate 60
【API版本】Api14
【DevEco Studio版本】5.0.7.200
【问题描述】 如何获取系统总运存,剩余运存和APP占用内存

4 回复

首先需要配置权限:

{
    "module": {
        "reqPermissions": [
            {
                "name": "ohos.permission.GET_RUNNING_INFO",
                "reason": "需要获取系统运行信息",
                "usedScene": {
                    "ability": ["com.example.yourapp.MainAbility"],
                    "when": "always"
                }
            }
        ]
    }
}

参考一下示例代码:

import hilog from '@ohos.hilog';
import abilityManager from '@ohos.app.ability.abilityManager';
import memoryManager from '@ohos.memory.memoryManager';

// 定义日志标签和域
const DOMAIN = 0x00001;
const TAG = 'MemoryInfo';

@Entry
@Component
struct MemoryInfoExample {
    build() {
        Column({ space: 50 }) {
            Button('获取内存信息')
              .onClick(() => {
                    this.getMemoryInfo();
                })
        }
        .width('100%')
    }

    async getMemoryInfo() {
        try {
            // 获取系统总运存和剩余运存
            const memoryInfo = await memoryManager.getSystemMemoryInfo();
            const totalMemory = memoryInfo.totalMem;
            const freeMemory = memoryInfo.availMem;
            hilog.info(DOMAIN, TAG, `系统总运存: ${totalMemory} 字节`);
            hilog.info(DOMAIN, TAG, `系统剩余运存: ${freeMemory} 字节`);

            // 获取当前 APP 占用内存
            const processInfo = await abilityManager.getProcessMemoryInfo([{
                pid: process.pid,
                uid: process.uid
            }]);
            if (processInfo.length > 0) {
                const appMemoryUsage = processInfo[0].memory;
                hilog.info(DOMAIN, TAG, `APP 占用内存: ${appMemoryUsage} 字节`);
            } else {
                hilog.error(DOMAIN, TAG, '未获取到 APP 内存信息');
            }
        } catch (error) {
            hilog.error(DOMAIN, TAG, `获取内存信息失败: ${error.message}`);
        }
    }
}

更多关于HarmonyOS鸿蒙Next中如何获取系统总运存,剩余运存和APP占用内存的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


使用hidebug,可以获取应用内存的使用情况,包括应用进程的静态堆内存(native heap)信息、应用进程内存占用PSS(Proportional Set Size)信息等;可以完成虚拟机内存切片导出,虚拟机CPU Profiling采集等操作。

获取系统内存信息:hidebug.getSystemMemInfo()

获取应用进程实际使用的物理内存大小:hidebug.getPss()

获取应用进程虚拟耗用内存大小:hidebug.getVss()

api详情请参考:@ohos.hidebug (Debug调试)-ArkTS API-Performance Analysis Kit(性能分析服务)-调测调优-系统 - 华为HarmonyOS开发者

在HarmonyOS鸿蒙Next中,获取系统总运存、剩余运存和APP占用内存可以通过SystemAbilityManagerMemoryInfo类实现。使用SystemAbilityManager获取MemoryManager服务,然后通过MemoryManager获取系统内存信息。

获取系统总运存和剩余运存的方法如下:

  1. 获取MemoryManager服务:

    const memoryManager = systemAbility.getSystemAbility('memoryManager');
    
  2. 获取系统总运存和剩余运存:

    const totalMemory = memoryManager.getTotalMemory();
    const freeMemory = memoryManager.getFreeMemory();
    

获取APP占用内存的方法如下:

  1. 获取当前应用的内存信息:
    const memoryInfo = memoryManager.getProcessMemoryInfo();
    const appMemoryUsage = memoryInfo.getPss();
    

在HarmonyOS鸿蒙Next中,可以通过SystemAbility接口获取系统总运存和剩余运存。使用MemoryInfo类可以获取内存信息,totalMem表示总运存,availMem表示剩余运存。对于APP占用内存,可以通过ProcessMemoryInfo类获取,privateDirty字段表示应用占用的私有内存。具体代码如下:

MemoryInfo memoryInfo = new MemoryInfo();
SystemAbility.getMemoryInfo(memoryInfo);
long totalMem = memoryInfo.totalMem; // 总运存
long availMem = memoryInfo.availMem; // 剩余运存

ProcessMemoryInfo processMemoryInfo = ProcessMemoryInfo.getMyProcessMemoryInfo();
long appMemoryUsage = processMemoryInfo.privateDirty; // APP占用内存

注意:实际使用中需引入相关包并处理权限。

回到顶部