tengo - ¿Cómo puede detectar una CPU de doble núcleo en un dispositivo Android desde el código?
como saber si mi android es mtk o qualcomm (5)
Me he encontrado con un problema que parece afectar solo a dispositivos Android de doble núcleo que ejecutan gingerbread o superior. Me gustaría ofrecer un cuadro de diálogo sobre este tema solo a mis usuarios que cumplan con ese criterio. Sé cómo verificar el nivel del sistema operativo, pero no he encontrado nada que pueda indicarme definitivamente que el dispositivo está utilizando varios núcleos.
¿Algunas ideas?
Desafortunadamente para la mayoría de los dispositivos Android, el método availableProcessors () no funciona correctamente. Incluso / proc / stat no siempre muestra el número correcto de CPU.
El único método confiable que he encontrado para determinar la cantidad de CPU es enumerar la lista de CPU virtuales en / sys / devices / system / cpu / como se describe en esta publicación del foro . El código:
/**
* Gets the number of cores available in this device, across all processors.
* Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu"
* @return The number of cores, or 1 if failed to get result
*/
private 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 one or more digits
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());
//Return the number of cores (virtual CPU devices)
return files.length;
} catch(Exception e) {
//Default to return 1 core
return 1;
}
}
Este código de Java debería funcionar en cualquier aplicación de Android, incluso sin root.
Esto es bastante simple.
int numberOfProcessors = Runtime.getRuntime().availableProcessors();
Normalmente, devolvería 1 o 2. 2 estaría en una CPU de doble núcleo.
Puedes intentar usar Runtime.availableProcessors () como se sugiere en esta respuesta
¿Hay alguna API que indique si un dispositivo Android tiene doble núcleo o no?
---editar---
Una descripción más detallada se da en el sitio de Oracle
Procesadores disponibles
public int availableProcessors()
Devuelve el número de procesadores disponibles para la máquina virtual Java.
Este valor puede cambiar durante una invocación particular de la máquina virtual. Las aplicaciones que son sensibles a la cantidad de procesadores disponibles deben, por lo tanto, encuestar esta propiedad ocasionalmente y ajustar su uso de recursos de manera apropiada.
Devoluciones:
el número máximo de procesadores disponibles para la máquina virtual; nunca más pequeño que uno
Ya que:
1.4
Si está trabajando con una aplicación nativa, debe intentar esto:
#include <unistd.h>
int GetNumberOfProcessor()
{
return sysconf(_SC_NPROCESSORS_CONF);
}
Funcionó en mi i9100 (que availableProcessors () devolvió 1).
Utilizo una combinación de ambas soluciones disponibles:
fun getCPUCoreNum(): Int {
val pattern = Pattern.compile("cpu[0-9]+")
return Math.max(
File("/sys/devices/system/cpu/")
.walk()
.maxDepth(1)
.count { pattern.matcher(it.name).matches() },
Runtime.getRuntime().availableProcessors()
)
}