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