Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例
发布时间 - 2026-01-11 02:58:49 点击率:次本文实例讲述了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占用率的问题
# Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86区别)
# Python获取android设备cpu和内存占用情况
# 浅析AndroidStudio3.0最新 Android Profiler分析器(cpu memor
# Android获取设备CPU核数、时钟频率以及内存大小的方法
# 解析Android获取系统cpu信息
# 版本
# 电量等信息的方法详解
# android获取手机cpu并判断是单核还是多核
# Android 轻松获取CPU型号的方法
# 操作技巧
# 应用程序
# 进阶
# 相关内容
# 感兴趣
# 给大家
# 更多关于
# 所述
# 程序设计
# 为空
# 讲述了
# lt
# statusBarHeight
# Class
# gt
# dimen
# Object
# forName
# internal
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Linux后台任务运行方法_nohup与&使用技巧【技巧】
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
LinuxShell函数封装方法_脚本复用设计思路【教程】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
米侠浏览器网页背景异常怎么办 米侠显示修复
做企业网站制作流程,企业网站制作基本流程有哪些?
phpredis提高消息队列的实时性方法(推荐)
Bootstrap整体框架之JavaScript插件架构
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在宝塔面板中修改默认建站目录?
如何在七牛云存储上搭建网站并设置自定义域名?
Swift中switch语句区间和元组模式匹配
详解vue.js组件化开发实践
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel如何使用.env文件管理环境变量?(最佳实践)
专业商城网站制作公司有哪些,pi商城官网是哪个?
EditPlus中的正则表达式 实战(1)
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
浅述节点的创建及常见功能的实现
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何在Tomcat中配置并部署网站项目?
高防服务器如何保障网站安全无虞?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
JavaScript常见的五种数组去重的方式
制作企业网站建设方案,怎样建设一个公司网站?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel怎么清理缓存_Laravel optimize clear命令详解
googleplay官方入口在哪里_Google Play官方商店快速入口指南
如何快速搭建高效WAP手机网站吸引移动用户?
智能起名网站制作软件有哪些,制作logo的软件?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
音响网站制作视频教程,隆霸音响官方网站?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel PHP版本要求一览_Laravel各版本环境要求对照
怎样使用JSON进行数据交换_它有什么限制
JS经典正则表达式笔试题汇总
EditPlus中的正则表达式实战(5)
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解

