美文网首页
CPU占用率与内存使用情况

CPU占用率与内存使用情况

作者: 简单Liml | 来源:发表于2017-05-15 10:09 被阅读34次

    1.内存使用情况,代码如下:

    package com.lml.ratetest;

    import java.io.BufferedReader;

    import java.io.FileReader;

    import java.io.IOException;

    import android.app.Activity;

    import android.app.ActivityManager;

    import android.app.ActivityManager.MemoryInfo;

    import android.content.Context;

    import android.os.Bundle;

    import android.os.Handler;

    import android.os.Message;

    import android.text.format.Formatter;

    import android.util.Log;

    import android.widget.TextView;

    public class MemoryActivity extends Activity {

    TextView tvMemory;

    Handler handler;

    UpdateThread thread;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.tvactivity);

    tvMemory = (TextView) findViewById(R.id.tvRate);

    handler = new Handler() {

    @Override

    public void handleMessage(Message msg) {

    if (msg.what == 2) {

    tvMemory.setText("RAM一共: " + getTotalMemory() + ", "

    + "可用: " + getAvailMemory()+", 已用:"+getUsed());

    }

    }

    };

    thread = new UpdateThread();

    thread.start();

    }

    public class UpdateThread extends Thread {

    public void run() {

    while (!Thread.currentThread().isInterrupted()) {

    Message msg = new Message();

    msg.what = 2;

    handler.sendMessage(msg);

    try {

    Thread.sleep(1000);

    } catch (InterruptedException e) {

    Thread.currentThread().interrupt();

    }

    }

    }

    }

    @Override

    protected void onDestroy() {

    super.onDestroy();

    thread.interrupt();

    }

    public String getAvailMemory() {

    return Formatter.formatFileSize(getBaseContext(), getAvailMemoryByByte());

    }

    public long getAvailMemoryByByte(){

    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

    MemoryInfo mi = new MemoryInfo();

    am.getMemoryInfo(mi);

    return mi.availMem;

    }

    public long getTotalMemoryByByte(){

    String str1 = "/proc/meminfo";// 系统内存信息文件

    String str2;

    String[] arrayOfString;

    long initial_memory = 0;

    try {

    FileReader localFileReader = new FileReader(str1);

    BufferedReader localBufferedReader = new BufferedReader(

    localFileReader, 8192);

    str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小

    arrayOfString = str2.split("\\s+");

    for (String num : arrayOfString) {

    Log.i(str2, num + "\t");

    }

    initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte

    localBufferedReader.close();

    } catch (IOException e) {

    return 0;

    }

    return initial_memory;

    }

    public String getTotalMemory() {

    return Formatter.formatFileSize(getBaseContext(), getTotalMemoryByByte());// Byte转换为KB或者MB,内存大小规格化

    }

    public long getUsedByByte(){

    long used = getTotalMemoryByByte()-getAvailMemoryByByte();

    return used;

    }

    public String getUsed(){

    return Formatter.formatFileSize(getBaseContext(), getUsedByByte());

    }

    }

    2.cpu占用率,代码如下:

    package com.lml.ratetest;

    import java.io.BufferedReader;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import android.app.Activity;

    import android.os.Bundle;

    import android.os.Handler;

    import android.os.Message;

    import android.widget.TextView;

    public class CpuActivity extends Activity {

    TextView tvCpu;

    long total = 0;

    long idle = 0;

    double usage = 0;

    UpdateThread thread;

    Handler handler;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.tvactivity);

    tvCpu = (TextView) findViewById(R.id.tvRate);

    handler = new Handler() {

    @Override

    public void handleMessage(Message msg) {

    if (msg.what == 3) {

    tvCpu.setText("cpu 占用率 : "+Math.round((Double)msg.obj));

    }

    }

    };

    thread = new UpdateThread();

    thread.start();

    }

    @Override

    protected void onDestroy() {

    super.onDestroy();

    thread.interrupt();

    }

    public class UpdateThread extends Thread {

    public void run() {

    while (!Thread.currentThread().isInterrupted()) {

    Message msg = new Message();

    msg.what = 3;

    msg.obj=readUsage();

    handler.sendMessage(msg);

    try {

    Thread.sleep(1000);

    } catch (InterruptedException e) {

    Thread.currentThread().interrupt();

    }

    }

    }

    }

    public double readUsage() {

    try {

    BufferedReader reader = new BufferedReader(new InputStreamReader(

    new FileInputStream("/proc/stat")), 1000);

    String load = reader.readLine();

    reader.close();

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

    long currTotal = Long.parseLong(toks[2]) + Long.parseLong(toks[3])

    + Long.parseLong(toks[4]);

    long currIdle = Long.parseLong(toks[5]);

    if ((currTotal - total) * 100.0f

    / (currTotal - total + currIdle - idle) >= 0) {

    this.usage = (currTotal - total) * 100.0f

    / (currTotal - total + currIdle - idle);

    } else {

    this.usage = 0;

    }

    this.total = currTotal;

    this.idle = currIdle;

    } catch (IOException ex) {

    return 0.0;

    }

    return usage;

    }

    }

    相关文章

      网友评论

          本文标题:CPU占用率与内存使用情况

          本文链接:https://www.haomeiwen.com/subject/jlocxxtx.html