Android系统实现功能:记录可用 RAM 空间,可用 FLASH 空间,CPU 使用率,系统运行时间等信息,并且写出调用的具体做法,请写出完整代码
时间: 2024-02-03 11:14:07 浏览: 150
CPU_RAM.zip_AMD的ram使用率_C# CPU使用率_CPU 内存_监测
以下是一个简单的 Android 应用程序,用于获取设备的 RAM 空间、Flash 空间、CPU 使用率和系统运行时间等信息。
```java
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取 RAM 空间
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getMemoryInfo(memoryInfo);
long availableRam = memoryInfo.availMem / (1024 * 1024); // 单位:MB
Log.d(TAG, "可用 RAM 空间:" + availableRam + "MB");
// 获取 Flash 空间
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long availableFlash = (availableBlocks * blockSize) / (1024 * 1024); // 单位:MB
Log.d(TAG, "可用 Flash 空间:" + availableFlash + "MB");
// 获取 CPU 使用率
float cpuUsage = getCpuUsage();
Log.d(TAG, "CPU 使用率:" + cpuUsage + "%");
// 获取系统运行时间
long uptime = SystemClock.elapsedRealtime() / 1000; // 单位:秒
Log.d(TAG, "系统运行时间:" + uptime + "秒");
}
private static final String CPU_STAT_PATH = "/proc/stat";
private static final String CPU_STAT_PATTERN = "cpu\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)";
private static long lastCpuTime = 0;
private static long lastCpuIdleTime = 0;
/**
* 获取 CPU 使用率
*
* @return 返回 CPU 使用率,范围在 0 到 100 之间
*/
private float getCpuUsage() {
String stat = "";
try (BufferedReader reader = new BufferedReader(new FileReader(CPU_STAT_PATH))) {
stat = reader.readLine();
} catch (IOException e) {
Log.e(TAG, "读取 CPU 统计信息失败", e);
}
Pattern pattern = Pattern.compile(CPU_STAT_PATTERN);
Matcher matcher = pattern.matcher(stat);
if (!matcher.matches()) {
Log.e(TAG, "无法匹配 CPU 统计信息:" + stat);
return 0.0f;
}
long userTime = Long.parseLong(matcher.group(1));
long niceTime = Long.parseLong(matcher.group(2));
long systemTime = Long.parseLong(matcher.group(3));
long idleTime = Long.parseLong(matcher.group(4));
long iowaitTime = Long.parseLong(matcher.group(5));
long irqTime = Long.parseLong(matcher.group(6));
long softirqTime = Long.parseLong(matcher.group(7));
long totalCpuTime = userTime + niceTime + systemTime + idleTime + iowaitTime + irqTime + softirqTime;
long cpuTime = totalCpuTime - idleTime;
if (lastCpuTime == 0 || lastCpuIdleTime == 0) {
lastCpuTime = totalCpuTime;
lastCpuIdleTime = idleTime;
return 0.0f;
}
float cpuUsage = (cpuTime - lastCpuTime) * 100.0f / (totalCpuTime - lastCpuIdleTime);
lastCpuTime = cpuTime;
lastCpuIdleTime = idleTime;
return cpuUsage;
}
}
```
该应用程序使用 `ActivityManager`、`Environment` 和 `StatFs` 等 Android API 来获取设备的 RAM 空间和 Flash 空间。它还读取 `/proc/stat` 文件以获取 CPU 使用率,计算系统运行时间使用的是 `SystemClock.elapsedRealtime()` 函数。以上是实现该功能的主要代码。
阅读全文