android之cpu使用率


获取当前系统的cpu使用率和进程使用率,主要是通过使用时间计算;

安卓原生类:
/frameworks/base/core/java/com/android/internal/os/ProcessCpuTracker.java

//获取一瞬间的系统cpu时间
public float getTotalCpuTime() {
    final long[] sysCpu = mSystemCpuData;
    if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT,null, sysCpu, null)){
    
    
    //当前系统的cpu 关键字段,可以在adb shell下,/proc/stat中查看
    // Total user time is user + nice time.
    final long usertime = (sysCpu[0]+sysCpu[1]) * mJiffyMillis;
    
    // Total system time is simply system time.
    final long systemtime = sysCpu[2] * mJiffyMillis;
    
    // Total idle time is simply idle time.
    final long idletime = sysCpu[3] * mJiffyMillis;
    
    // Total irq time is iowait + irq + softirq time.
    final long iowaittime = sysCpu[4] * mJiffyMillis;
    final long irqtime = sysCpu[5] * mJiffyMillis;
    final long softirqtime = sysCpu[6] * mJiffyMillis;
    
    return usertime + systemtime + idletime + iowaittime + irqtime + softirqtime;
    }else{
        return 0f;
    }
}

/**
 * 原生方法,获取一瞬间的pid的cpu时间
 * Returns the total time (in milliseconds) spent executing in
 * both user and system code.  Safe to call without lock held.
 */
public long getCpuTimeForPid(int pid) {
    synchronized (mSinglePidStatsData) {
        final String statFile = "/proc/" + pid + "/stat";
        final long[] statsData = mSinglePidStatsData;
        if (Process.readProcFile(statFile, PROCESS_STATS_FORMAT,
                null, statsData, null)) {
            long time = statsData[PROCESS_STAT_UTIME]
                    + statsData[PROCESS_STAT_STIME];
            return time * mJiffyMillis;
        }
        return 0;
    }
}

进程cpu使用率计算公式: 两次进程cpu时间差/两次系统cpu时间差

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值