这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android编程实现获取系统内存、CPU使用率及状态栏高度的方法,涉及Android基于自定义类实现针对系统硬件信息的相关获取操作技巧,需要的朋友可以参考下
本文实例讲述了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程序设计有所帮助。
来源: http://www.phperz.com/article/17/0913/345690.html