Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例
本文实例讲述了Android编程实现获取系统内存、CPU使用率及状态栏高度的方法。分享给大家供大家参考,具体如下:
DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度
importjava.io.BufferedReader;
importjava.io.FileInputStream;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.lang.reflect.Field;
importjava.util.List;
importandroid.app.ActivityManager;
importandroid.app.ActivityManager.RunningTaskInfo;
importandroid.content.Context;
publicclassDeviceInfoManager{
//privatestaticfinalStringTAG="DeviceInfoManager";
privatestaticActivityManagermActivityManager;
publicsynchronizedstaticActivityManagergetActivityManager(Contextcontext){
if(mActivityManager==null){
mActivityManager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
}
returnmActivityManager;
}
/**
*用于获取状态栏的高度。
*
*@return返回状态栏高度的像素值。
*/
publicstaticintgetStatusBarHeight(Contextcontext){
intstatusBarHeight=0;
try{
Class>c=Class.forName("com.android.internal.R$dimen");
Objecto=c.newInstance();
Fieldfield=c.getField("status_bar_height");
intx=(Integer)field.get(o);
statusBarHeight=context.getResources().getDimensionPixelSize(x);
}catch(Exceptione){
e.printStackTrace();
}
returnstatusBarHeight;
}
/**
*计算已使用内存的百分比,并返回。
*
*@paramcontext
*可传入应用程序上下文。
*@return已使用内存的百分比,以字符串形式返回。
*/
publicstaticStringgetUsedPercentValue(Contextcontext){
longtotalMemorySize=getTotalMemory();
longavailableSize=getAvailableMemory(context)/1024;
intpercent=(int)((totalMemorySize-availableSize)/(float)totalMemorySize*100);
returnpercent+"%";
}
/**
*获取当前可用内存,返回数据以字节为单位。
*
*@paramcontext可传入应用程序上下文。
*@return当前可用内存。
*/
publicstaticlonggetAvailableMemory(Contextcontext){
ActivityManager.MemoryInfomi=newActivityManager.MemoryInfo();
getActivityManager(context).getMemoryInfo(mi);
returnmi.availMem;
}
/**
*获取系统总内存,返回字节单位为KB
*@return系统总内存
*/
publicstaticlonggetTotalMemory(){
longtotalMemorySize=0;
Stringdir="/proc/meminfo";
try{
FileReaderfr=newFileReader(dir);
BufferedReaderbr=newBufferedReader(fr,2048);
StringmemoryLine=br.readLine();
StringsubMemoryLine=memoryLine.substring(memoryLine.indexOf("MemTotal:"));
br.close();
//将非数字的字符替换为空
totalMemorySize=Integer.parseInt(subMemoryLine.replaceAll("\\D+",""));
}catch(IOExceptione){
e.printStackTrace();
}
returntotalMemorySize;
}
/**
*获取顶层activity的包名
*@paramcontext
*@returnactivity的包名
*/
publicstaticStringgetTopActivityPackageName(Contextcontext){
ActivityManageractivityManager=getActivityManager(context);
ListrunningTasks=activityManager.getRunningTasks(1);
returnrunningTasks.get(0).topActivity.getPackageName();
}
/**
*获取当前进程的CPU使用率
*@returnCPU的使用率
*/
publicstaticfloatgetCurProcessCpuRate()
{
floattotalCpuTime1=getTotalCpuTime();
floatprocessCpuTime1=getAppCpuTime();
try
{
Thread.sleep(360);
}
catch(Exceptione)
{
}
floattotalCpuTime2=getTotalCpuTime();
floatprocessCpuTime2=getAppCpuTime();
floatcpuRate=100*(processCpuTime2-processCpuTime1)
/(totalCpuTime2-totalCpuTime1);
returncpuRate;
}
/**
*获取总的CPU使用率
*@returnCPU使用率
*/
publicstaticfloatgetTotalCpuRate(){
floattotalCpuTime1=getTotalCpuTime();
floattotalUsedCpuTime1=totalCpuTime1-sStatus.idletime;
try{
Thread.sleep(360);
}catch(InterruptedExceptione){
e.printStackTrace();
}
floattotalCpuTime2=getTotalCpuTime();
floattotalUsedCpuTime2=totalCpuTime2-sStatus.idletime;
floatcpuRate=100*(totalUsedCpuTime2-totalUsedCpuTime1)
/(totalCpuTime2-totalCpuTime1);
returncpuRate;
}
/**
*获取系统总CPU使用时间
*@return系统CPU总的使用时间
*/
publicstaticlonggetTotalCpuTime()
{
String[]cpuInfos=null;
try
{
BufferedReaderreader=newBufferedReader(newInputStreamReader(
newFileInputStream("/proc/stat")),1000);
Stringload=reader.readLine();
reader.close();
cpuInfos=load.split("");
}
catch(IOExceptionex)
{
ex.printStackTrace();
}
//longtotalCpu=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]);
returnsStatus.getTotalTime();
}
/**
*获取当前进程的CPU使用时间
*@return当前进程的CPU使用时间
*/
publicstaticlonggetAppCpuTime()
{
//获取应用占用的CPU时间
String[]cpuInfos=null;
try
{
intpid=android.os.Process.myPid();
BufferedReaderreader=newBufferedReader(newInputStreamReader(
newFileInputStream("/proc/"+pid+"/stat")),1000);
Stringload=reader.readLine();
reader.close();
cpuInfos=load.split("");
}
catch(IOExceptionex)
{
ex.printStackTrace();
}
longappCpuTime=Long.parseLong(cpuInfos[13])
+Long.parseLong(cpuInfos[14])+Long.parseLong(cpuInfos[15])
+Long.parseLong(cpuInfos[16]);
returnappCpuTime;
}
staticStatussStatus=newStatus();
staticclassStatus{
publiclongusertime;
publiclongnicetime;
publiclongsystemtime;
publiclongidletime;
publiclongiowaittime;
publiclongirqtime;
publiclongsoftirqtime;
publiclonggetTotalTime(){
return(usertime+nicetime+systemtime+idletime+iowaittime
+irqtime+softirqtime);
}
}
}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android资源操作技巧汇总》、《Android视图View技巧总结》、《Android操作XML数据技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android操作json格式数据技巧总结》、《Android开发入门与进阶教程》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。