Translate

[Android] CPU 사용량 측정하기





    public CpuResource getResource(long updatePeriod) {

        try {
            RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
            String load = reader.readLine();

            String[] toks = load.split("[ ]+");

            float userMode1 = Float.parseFloat(toks[1]);
            float niceMode1 = Float.parseFloat(toks[2]);
            float systemMode1 = Float.parseFloat(toks[3]);
            float idleMode1 = Float.parseFloat(toks[4]);

            try {
                Thread.sleep(updatePeriod);
            } catch (Exception e) {}

            reader.seek(0);
            load = reader.readLine();
            reader.close();

            toks = load.split("[ ]+");

            float userMode2 = Float.parseFloat(toks[1]);
            float niceMode2 = Float.parseFloat(toks[2]);
            float systemMode2 = Float.parseFloat(toks[3]);
            float idleMode2 = Float.parseFloat(toks[4]);

            float userMode = userMode2 - userMode1;
            float niceMode = niceMode2 - niceMode1;
            float systemMode = systemMode2 - systemMode1;
            float idleMode = idleMode2 - idleMode1;

            float total = userMode + niceMode + systemMode + idleMode;

            float user = (userMode / total) * 100;
            float system = (systemMode / total) * 100;

        } catch (IOException e) {
            Log.e(LOG_NAME, e.getMessage());
        } catch (Exception e) {
            Log.e(LOG_NAME, e.getMessage());
        }

        return user+system;
    }



/proc/stat 파일을 읽어서 첫줄을 파싱처리를 해서 보여준다.

user사용량 = (user / total) * 100
system사용량 = (system / total) * 100


단 해당 수치는 시스템 부팅 후 누적 값 이므로 순간 사용량을 구하기 위해서는 두번 값을 읽어와서 늘어난 만큼의 수치값으로 계산을 해야 한다.






참조 사이트:
http://stackoverflow.com/questions/9756353/how-to-get-memory-usage-and-cpu-usage-by-application
http://www.dreamy.pe.kr/zbxe/CodeClip/163339
http://forum.falinux.com/zbxe/?document_srl=554222&mid=lecture_tip&page=7
https://kldp.org/node/129143



댓글