Android系统实现功能:记录可用 RAM 空间,可用 FLASH 空间,CPU 使用率,系统运行时间等信息。请写出完整代码
时间: 2023-08-10 10:08:54 浏览: 158
Androiod代码实现实时监控Cpu利用率、Memory利用率完整代码实现
4星 · 用户满意度95%
以下是一个简单的 Android 应用程序,可以实现记录可用 RAM 空间、可用 FLASH 空间、CPU 使用率、系统运行时间等信息的功能。
主要思路是通过读取系统文件并解析其中的数据,计算出所需的信息。具体实现如下:
```
import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.os.SystemClock;
import android.text.format.DateFormat;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
public class SystemInfo {
private Context context;
public SystemInfo(Context context) {
this.context = context;
}
// 获取可用 RAM 空间
public long getAvailableMemory() {
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getMemoryInfo(memoryInfo);
return memoryInfo.availMem;
}
// 获取总 RAM 空间
public long getTotalMemory() {
String str1 = "/proc/meminfo";
String str2;
String[] arrayOfString;
long initial_memory = 0;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(localFileReader, 8192);
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
for (String num : arrayOfString) {
if (num.endsWith("kB")) {
initial_memory = Integer.valueOf(num.substring(0, num.length() - 2)) * 1024;
break;
}
}
localBufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return initial_memory;
}
// 获取可用 FLASH 空间
public long getAvailableStorage() {
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
// 获取总 FLASH 空间
public long getTotalStorage() {
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
// 获取 CPU 使用率
public float getCpuUsage() {
try {
String cpuStatPath = "/proc/stat";
BufferedReader reader = new BufferedReader(new FileReader(cpuStatPath));
String[] cpuStats = reader.readLine().split("\\s+");
reader.close();
long idle1 = Long.parseLong(cpuStats[4]);
long cpu1 = Long.parseLong(cpuStats[1]) + Long.parseLong(cpuStats[2]) + Long.parseLong(cpuStats[3])
+ Long.parseLong(cpuStats[4]) + Long.parseLong(cpuStats[5]) + Long.parseLong(cpuStats[6])
+ Long.parseLong(cpuStats[7]);
SystemClock.sleep(360);
reader = new BufferedReader(new FileReader(cpuStatPath));
cpuStats = reader.readLine().split("\\s+");
reader.close();
long idle2 = Long.parseLong(cpuStats[4]);
long cpu2 = Long.parseLong(cpuStats[1]) + Long.parseLong(cpuStats[2]) + Long.parseLong(cpuStats[3])
+ Long.parseLong(cpuStats[4]) + Long.parseLong(cpuStats[5]) + Long.parseLong(cpuStats[6])
+ Long.parseLong(cpuStats[7]);
return (float) (cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));
} catch (IOException ex) {
ex.printStackTrace();
}
return 0;
}
// 获取系统运行时间
public String getSystemUpTime() {
long uptime = SystemClock.elapsedRealtime();
long hours = uptime / 3600000;
long minutes = (uptime % 3600000) / 60000;
long seconds = (uptime % 60000) / 1000;
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
// 格式化存储空间大小,保留两位小数
private String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KB";
size /= 1024;
if (size >= 1024) {
suffix = "MB";
size /= 1024;
}
}
StringBuilder resultBuffer = new StringBuilder(new DecimalFormat("#.00").format(size));
if (suffix != null) resultBuffer.append(suffix);
return resultBuffer.toString();
}
// 获取当前时间
public String getCurrentTime() {
return DateFormat.format("yyyy-MM-dd kk:mm:ss", System.currentTimeMillis()).toString();
}
// 获取系统信息
public String getSystemInfo() {
StringBuilder sb = new StringBuilder();
sb.append("RAM: ").append(formatSize(getAvailableMemory())).append(" / ").append(formatSize(getTotalMemory())).append("\n");
sb.append("SDCARD: ").append(formatSize(getAvailableStorage())).append(" / ").append(formatSize(getTotalStorage())).append("\n");
sb.append("CPU: ").append(new DecimalFormat("#.00%").format(getCpuUsage())).append("\n");
sb.append("UpTime: ").append(getSystemUpTime()).append("\n");
sb.append("Time: ").append(getCurrentTime());
return sb.toString();
}
}
```
以上代码中,`getAvailableMemory()`、`getTotalMemory()`、`getAvailableStorage()`、`getTotalStorage()`、`getCpuUsage()`、`getSystemUpTime()`、`getCurrentTime()` 方法分别用于获取可用 RAM 空间、总 RAM 空间、可用 FLASH 空间、总 FLASH 空间、CPU 使用率、系统运行时间以及当前时间。`formatSize()` 方法用于将存储空间大小格式化为带有单位的字符串。`getSystemInfo()` 方法则将上述信息拼接成一个字符串返回。
需要注意的是,获取 CPU 使用率需要根据两次读取 `/proc/stat` 文件的数据计算出来,因此需要等待一段时间(这里是 360 毫秒)以确保两次读取的数据时间间隔足够长。
阅读全文