Android获取设备CPU核数以及内存大小的方法
2017-07-11 12:15
676 查看
统计一下文件个数便可以获得 CPU 核数。
public static int getNumberOfCPUCores() { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { // Gingerbread doesn't support giving a single application access to both cores, but a // handful of devices (Atrix 4G and Droid X2 for example) were released with a dual-core // chipset and Gingerbread; that can let an app in the background run without impacting // the foreground application. But for our purposes, it makes them single core. return 1; } int cores; try { cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length; } catch (SecurityException e) { cores = DEVICEINFO_UNKNOWN; } catch (NullPointerException e) { cores = DEVICEINFO_UNKNOWN; } return cores; } private static final FileFilter CPU_FILTER = new FileFilter() { @Override public boolean accept(File pathname) { String path = pathname.getName(); //regex is slow, so checking char by char. if (path.startsWith("cpu")) { for (int i = 3; i < path.length(); i++) { if (path.charAt(i) < '0' || path.charAt(i) > '9') { return false; } } return true; } return false; } }; public static int getNumberOfCPUCores() { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { // Gingerbread doesn't support giving a single application access to both cores, but a // handful of devices (Atrix 4G and Droid X2 for example) were released with a dual-core // chipset and Gingerbread; that can let an app in the background run without impacting // the foreground application. But for our purposes, it makes them single core. return 1; } int cores; try { cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length; } catch (SecurityException e) { cores = DEVICEINFO_UNKNOWN; } catch (NullPointerException e) { cores = DEVICEINFO_UNKNOWN; } return cores; } private static final FileFilter CPU_FILTER = new FileFilter() { @Override public boolean accept(File pathname) { String path = pathname.getName(); //regex is slow, so checking char by char. if (path.startsWith("cpu")) { for (int i = 3; i < path.length(); i++) { if (path.charAt(i) < '0' || path.charAt(i) > '9') { return false; } } return true; } return false; } };
获取 CPU 核数
我们都知道,Linux 中的设备都是以文件的形式存在,CPU 也不例外,因此 CPU 的文件个数就等价与核数。
Android 的 CPU 设备文件位于 /sys/devices/system/cpu/ 目录,文件名的的格式为 cpu\d+。
1 root@generic_x86_64:/sys/devices/system/cpu # ls
2 cpu0
3 cpufreq
4 cpuidle
5 kernel_max
6 modalias
7 offline
8 online
9 possible
10 power
11 present
12 uevent
获取内存大小
如果 SDK 版本大于等于 JELLY_BEAN ,可以通过 ActivityManager 来获取内从大小。@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static long getTotalMemory(Context c) { // memInfo.totalMem not supported in pre-Jelly Bean APIs. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE); am.getMemoryInfo(memInfo); if (memInfo != null) { return memInfo.totalMem; } else { return DEVICEINFO_UNKNOWN; } } else { long totalMem = DEVICEINFO_UNKNOWN; try { FileInputStream stream = new FileInputStream("/proc/meminfo"); try { totalMem = parseFileForValue("MemTotal", stream); totalMem *= 1024; } finally { stream.close(); } } catch (IOException e) { } return totalMem; } }
相关文章推荐
- Android获取设备CPU核数、时钟频率以及内存大小的方法
- 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
- 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
- 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
- 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
- android设备的内存空间(RAM)总空间和可用空间大小的获取以及一些思考
- 返回解释Java乔晓松-Android SD卡路径问题以及如何获取SDCard内存大小
- android获取设备屏幕大小的方法
- android获取设备屏幕大小的方法
- JAVA获取JVM内存使用以及服务器CPU,硬盘使用方法
- android获取设备屏幕大小的方法
- 关于Android的查询CPU、流量、内存以及获取一个app的启动activity
- Android 获取app应用大小、手机内存信息、删除文件方法、获得文件大小
- Android获取CPU,内存等系统信息方法
- android获取设备屏幕大小的方法
- android获取设备屏幕大小的方法
- 解析Android获取系统cpu信息,内存,版本,电量等信息的方法详解
- Android获取设备屏幕大小的方法
- 解析Android获取系统cpu信息,内存,版本,电量等信息的方法详解
- 获取android 手机屏幕的大小以及动态设置背景图片的两种方法;