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程序设计有所帮助。