import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.util.regex.Pattern; public class CpuUtil { private static final String TAG = "CpuManager"; // 获取CPU最大频率(单位KHZ) // "/system/bin/cat" 命令行 // "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径 public static String getMaxCpuFreq(int cpuNo) { String result = ""; String path = "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq"; ProcessBuilder cmd; try { String[] args = {"/system/bin/cat", String.format(path, cpuNo)}; cmd = new ProcessBuilder(args); Process process = cmd.start(); InputStream in = process.getInputStream(); byte[] re = new byte[24]; while (in.read(re) != -1) { result += new String(re); } in.close(); } catch (IOException ex) { ex.printStackTrace(); result = "stopped"; } return result.trim(); } // 获取CPU最小频率(单位KHZ) public static String getMinCpuFreq(int cpuNo) { String result = ""; String path = "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_min_freq"; ProcessBuilder cmd; try { String[] args = {"/system/bin/cat", String.format(path, cpuNo)}; cmd = new ProcessBuilder(args); Process process = cmd.start(); InputStream in = process.getInputStream(); byte[] re = new byte[24]; while (in.read(re) != -1) { result += new String(re); } in.close(); } catch (IOException ex) { ex.printStackTrace(); result = "N/A"; } return result.trim(); } // 实时获取CPU当前频率(单位KHZ) public static String getCurCpuFreq(int cpuNo) { String result = "N/A"; String path = "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq"; BufferedReader br = null; try { FileReader fr = new FileReader(String.format(path, cpuNo)); br = new BufferedReader(fr); String text = br.readLine(); result = text.trim(); } catch (FileNotFoundException e) { // e.printStackTrace(); } catch (IOException e) { // e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } // 获取CPU名字 public static String getCpuName() { BufferedReader br = null; try { FileReader fr = new FileReader("/proc/cpuinfo"); br = new BufferedReader(fr); String text = br.readLine(); String[] array = text.split(":\\s+", 2); for (int i = 0; i < array.length; i++) { } return array[1]; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * CPU number * * @return */ public static int getNumCores() { // Private Class to display only CPU devices in the directory listing class CpuFilter implements FileFilter { @Override public boolean accept(File pathname) { // Check if filename is "cpu", followed by a single digit number if (Pattern.matches("cpu[0-9]", pathname.getName())) { return true; } return false; } } try { // Get directory containing CPU info File dir = new File("/sys/devices/system/cpu/"); // Filter to only list the devices we care about File[] files = dir.listFiles(new CpuFilter()); Log.d(TAG, "CPU Count: " + files.length); // Return the number of cores (virtual CPU devices) return files.length; } catch (Exception e) { // Print exception Log.d(TAG, "CPU Count: Failed."); e.printStackTrace(); // Default to return 1 core return 1; } } }
CpuUtil
最新推荐文章于 2023-08-09 15:35:55 发布