
本文实例讲述了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程序设计有所帮助。
总结以上是内存溢出为你收集整理的Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例全部内容,希望文章能够帮你解决Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)