欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

程序员文章站 2023-12-09 14:22:45
本文实例讲述了android编程实现获取系统内存、cpu使用率及状态栏高度的方法。分享给大家供大家参考,具体如下: deviceinfomanage类用于获取系统的内存,...

本文实例讲述了android编程实现获取系统内存、cpu使用率及状态栏高度的方法。分享给大家供大家参考,具体如下:

deviceinfomanage类用于获取系统的内存,cpu的信息,以及状态栏的高度

import java.io.bufferedreader;
import java.io.fileinputstream;
import java.io.filereader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.lang.reflect.field;
import java.util.list;
import android.app.activitymanager;
import android.app.activitymanager.runningtaskinfo;
import android.content.context;
public class deviceinfomanager {
// private static final string tag = "deviceinfomanager";
  private static activitymanager mactivitymanager;
  public synchronized static activitymanager getactivitymanager(context context) {
    if (mactivitymanager == null) {
      mactivitymanager = (activitymanager) context.getsystemservice(context.activity_service);
    }
    return mactivitymanager;
  }
  /**
   * 用于获取状态栏的高度。
   *
   * @return 返回状态栏高度的像素值。
   */
  public static int getstatusbarheight(context context) {
    int statusbarheight = 0;
    try {
      class<?> c = class.forname("com.android.internal.r$dimen");
      object o = c.newinstance();
      field field = c.getfield("status_bar_height");
      int x = (integer) field.get(o);
      statusbarheight = context.getresources().getdimensionpixelsize(x);
    } catch (exception e) {
      e.printstacktrace();
    }
    return statusbarheight;
  }
  /**
   * 计算已使用内存的百分比,并返回。
   *
   * @param context
   *      可传入应用程序上下文。
   * @return 已使用内存的百分比,以字符串形式返回。
   */
  public static string getusedpercentvalue(context context) {
    long totalmemorysize = gettotalmemory();
    long availablesize = getavailablememory(context) / 1024;
    int percent = (int) ((totalmemorysize - availablesize) / (float) totalmemorysize * 100);
    return percent + "%";
  }
  /**
   * 获取当前可用内存,返回数据以字节为单位。
   *
   * @param context 可传入应用程序上下文。
   * @return 当前可用内存。
   */
  public static long getavailablememory(context context) {
    activitymanager.memoryinfo mi = new activitymanager.memoryinfo();
    getactivitymanager(context).getmemoryinfo(mi);
    return mi.availmem;
  }
  /**
   * 获取系统总内存,返回字节单位为kb
   * @return 系统总内存
   */
  public static long gettotalmemory() {
    long totalmemorysize = 0;
    string dir = "/proc/meminfo";
    try {
      filereader fr = new filereader(dir);
      bufferedreader br = new bufferedreader(fr, 2048);
      string memoryline = br.readline();
      string submemoryline = memoryline.substring(memoryline.indexof("memtotal:"));
      br.close();
      //将非数字的字符替换为空
      totalmemorysize = integer.parseint(submemoryline.replaceall("\\d+", ""));
    } catch (ioexception e) {
      e.printstacktrace();
    }
    return totalmemorysize;
  }
  /**
   * 获取顶层activity的包名
   * @param context
   * @return activity的包名
   */
  public static string gettopactivitypackagename(context context) {
    activitymanager activitymanager = getactivitymanager(context);
    list<runningtaskinfo> runningtasks = activitymanager.getrunningtasks(1);
    return runningtasks.get(0).topactivity.getpackagename();
  }
  /**
   * 获取当前进程的cpu使用率
   * @return cpu的使用率
   */
  public static float getcurprocesscpurate()
  {
    float totalcputime1 = gettotalcputime();
    float processcputime1 = getappcputime();
    try
    {
      thread.sleep(360);
    }
    catch (exception e)
    {
    }
    float totalcputime2 = gettotalcputime();
    float processcputime2 = getappcputime();
    float cpurate = 100 * (processcputime2 - processcputime1)
        / (totalcputime2 - totalcputime1);
    return cpurate;
  }
  /**
   * 获取总的cpu使用率
   * @return cpu使用率
   */
  public static float gettotalcpurate() {
    float totalcputime1 = gettotalcputime();
    float totalusedcputime1 = totalcputime1 - sstatus.idletime;
    try {
      thread.sleep(360);
    } catch (interruptedexception e) {
      e.printstacktrace();
    }
    float totalcputime2 = gettotalcputime();
    float totalusedcputime2 = totalcputime2 - sstatus.idletime;
    float cpurate = 100 * (totalusedcputime2 - totalusedcputime1)
        / (totalcputime2 - totalcputime1);
    return cpurate;
  }
  /**
   * 获取系统总cpu使用时间
   * @return 系统cpu总的使用时间
   */
  public static long gettotalcputime()
  {
    string[] cpuinfos = null;
    try
    {
      bufferedreader reader = new bufferedreader(new inputstreamreader(
          new fileinputstream("/proc/stat")), 1000);
      string load = reader.readline();
      reader.close();
      cpuinfos = load.split(" ");
    }
    catch (ioexception ex)
    {
      ex.printstacktrace();
    }
//   long totalcpu = long.parselong(cpuinfos[2])
//       + long.parselong(cpuinfos[3]) + long.parselong(cpuinfos[4])
//       + long.parselong(cpuinfos[6]) + long.parselong(cpuinfos[5])
//       + long.parselong(cpuinfos[7]) + long.parselong(cpuinfos[8]);
    sstatus.usertime = long.parselong(cpuinfos[2]);
    sstatus.nicetime = long.parselong(cpuinfos[3]);
    sstatus.systemtime = long.parselong(cpuinfos[4]);
    sstatus.idletime = long.parselong(cpuinfos[5]);
    sstatus.iowaittime = long.parselong(cpuinfos[6]);
    sstatus.irqtime = long.parselong(cpuinfos[7]);
    sstatus.softirqtime = long.parselong(cpuinfos[8]);
    return sstatus.gettotaltime();
  }
  /**
   * 获取当前进程的cpu使用时间
   * @return 当前进程的cpu使用时间
   */
  public static long getappcputime()
  {
    // 获取应用占用的cpu时间
    string[] cpuinfos = null;
    try
    {
      int pid = android.os.process.mypid();
      bufferedreader reader = new bufferedreader(new inputstreamreader(
          new fileinputstream("/proc/" + pid + "/stat")), 1000);
      string load = reader.readline();
      reader.close();
      cpuinfos = load.split(" ");
    }
    catch (ioexception ex)
    {
      ex.printstacktrace();
    }
    long appcputime = long.parselong(cpuinfos[13])
        + long.parselong(cpuinfos[14]) + long.parselong(cpuinfos[15])
        + long.parselong(cpuinfos[16]);
    return appcputime;
  }
  static status sstatus = new status();
  static class status {
    public long usertime;
    public long nicetime;
    public long systemtime;
    public long idletime;
    public long iowaittime;
    public long irqtime;
    public long softirqtime;
    public long gettotaltime() {
      return (usertime + nicetime + systemtime + idletime + iowaittime
          + irqtime + softirqtime);
    }
  }
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android资源操作技巧汇总》、《android视图view技巧总结》、《android操作xml数据技巧总结》、《android编程之activity操作技巧总结》、《android文件操作技巧汇总》、《android操作json格式数据技巧总结》、《android开发入门与进阶教程》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。