Red de conocimiento informático - Conocimiento informático - Cómo obtener el número de núcleos de CPU, frecuencia de reloj y tamaño de memoria de un dispositivo AndroidObtener el núcleo de CPU Los dispositivos en Linux existen en forma de archivos, y la CPU no es una excepción, por lo que la cantidad de archivos de CPU es igual a la cantidad de núcleos. Los archivos del dispositivo CPU de Android se encuentran en el directorio /sys/devices/system/cpu/ y el formato del nombre del archivo es cpu\d. root@generic_x86 _64:/sys/devices/system/cpu # ls cpu0 cpufreqcpuidlekernel_maxmodaliasofflineonlinepossiblepowerpresentuevent Puede obtener la cantidad de núcleos de CPU contando la cantidad de archivos. public static int getNumberOfCPUCores() { if (Build.VERSION.SDK_INT lt; = Build.VERSION_CODES.GINGERBREAD_MR1) { // Gingerbread no admite que una sola aplicación acceda a ambos núcleos, pero hay algunos dispositivos (como Atrix 4G y Droid X2) Se lanzaron conjuntos de chips de doble núcleo y Gingerbread, lo que permite que una sola aplicación acceda a ambos núcleos. Gingerbread; permite ejecutar aplicaciones en segundo plano sin afectar // las aplicaciones en primer plano. Devuelve 1; } int cores; prueba { cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length } catch (SecurityException e) { cores = DEVICEINFO_UNKNOWN } catch (NullPointerException e; ) { núcleos = DEVICEINFO_UNKNOWN } núcleos de retorno; } FileFilter final estático privado CPU_FILTER = nuevo FileFilter() { @Override public boolean aceptar (nombre de ruta del archivo) { ruta de cadena = nombre de ruta.if (ruta. comienza con ("cpu")) { para (int i = 3; i lt; path.length(); i ) { if (path.charAt(i) lt; '0' path.charAt(i) gt; '9') { return false } return true; ; } Devuelve falso; } Devuelve verdadero; } Devuelve falso; } return true; } return false; }}; Para obtener la frecuencia del reloj, necesita leer el archivo del sistema -/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq o /proc/cpuinfo. El emulador de Android no tiene el archivo cpuinfo_max_freq. No hay ningún archivo cpuinfo_max_freq en el emulador de Android, por lo que solo se puede leer /proc/cpuinfo.

Cómo obtener el número de núcleos de CPU, frecuencia de reloj y tamaño de memoria de un dispositivo AndroidObtener el núcleo de CPU Los dispositivos en Linux existen en forma de archivos, y la CPU no es una excepción, por lo que la cantidad de archivos de CPU es igual a la cantidad de núcleos. Los archivos del dispositivo CPU de Android se encuentran en el directorio /sys/devices/system/cpu/ y el formato del nombre del archivo es cpu\d. root@generic_x86 _64:/sys/devices/system/cpu # ls cpu0 cpufreqcpuidlekernel_maxmodaliasofflineonlinepossiblepowerpresentuevent Puede obtener la cantidad de núcleos de CPU contando la cantidad de archivos. public static int getNumberOfCPUCores() { if (Build.VERSION.SDK_INT lt; = Build.VERSION_CODES.GINGERBREAD_MR1) { // Gingerbread no admite que una sola aplicación acceda a ambos núcleos, pero hay algunos dispositivos (como Atrix 4G y Droid X2) Se lanzaron conjuntos de chips de doble núcleo y Gingerbread, lo que permite que una sola aplicación acceda a ambos núcleos. Gingerbread; permite ejecutar aplicaciones en segundo plano sin afectar // las aplicaciones en primer plano. Devuelve 1; } int cores; prueba { cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length } catch (SecurityException e) { cores = DEVICEINFO_UNKNOWN } catch (NullPointerException e; ) { núcleos = DEVICEINFO_UNKNOWN } núcleos de retorno; } FileFilter final estático privado CPU_FILTER = nuevo FileFilter() { @Override public boolean aceptar (nombre de ruta del archivo) { ruta de cadena = nombre de ruta.if (ruta. comienza con ("cpu")) { para (int i = 3; i lt; path.length(); i ) { if (path.charAt(i) lt; '0' path.charAt(i) gt; '9') { return false } return true; ; } Devuelve falso; } Devuelve verdadero; } Devuelve falso; } return true; } return false; }}; Para obtener la frecuencia del reloj, necesita leer el archivo del sistema -/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq o /proc/cpuinfo. El emulador de Android no tiene el archivo cpuinfo_max_freq. No hay ningún archivo cpuinfo_max_freq en el emulador de Android, por lo que solo se puede leer /proc/cpuinfo.

/procesador: 0vendor_id: GenuineIntelcpu Family: 6model: 70model Name: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHzstepping: 1cpu MHz: 0.000tamaño de caché: 1024 KBfdiv_bug: nohlt_bug: nof00f_bug: nocoma_bug: nofpu: yesfpu_exception: yescpuid nivel: 4wp: sí El código es el siguiente: public static int getCPUMaxFreqKHz() { int maxFreq = DEVICEINFO_UNKNOWN; try { for (int i = 0; i lt; getNumberOfCPUCores(); i ) { String filename = "/sys/devices /system /cpu/cpu" i "/cpufreq/cpuinfo_max_freq"; Archivo cpuInfoMaxFreqFile = nuevo archivo(nombre de archivo); if ( cpuInfoMaxFreqFile.if ( cpuInfoMaxFreqFile. existe()) { byte[] buffer = nuevo byte[128]; flujo FileInputStream = new FileInputStream(cpuInfoMaxFreqFile); try { stream.read(buffer); int endIndex = 0; //Recorta el primer número del byte buffer.endIndex str = new String(buffer, 0, endIndex); = Integer .parseInt(str); if (freqBound gt; maxFreq) maxFreq = freqBound; } catch (NumberFormatException e) { // Falla y usa /proc/cpuinfo } finalmente { stream.close() }} == DEVICEINFO_UNKNOWN) { FileInputStream stream = new FileInputStream("/proc/cpuinfo"); intente { int freqBound = parseFileForValue("cpu MHz", freqBound *= 1000; //MHz -gt kHz if (freqBound gt); ; maxFreq ) maxFreq = freqBound; } finalmente { stream.close(); } }}catch (IOException e) { maxFreq = DEVICEINFO_UNKNOWN;