¿Cómo se puede detectar una CPU de doble núcleo en un dispositivo Android desde el código?

Me encontré con un problema que parece afectar solo a dispositivos Android de doble núcleo con Gingerbread o superior. Me gustaría dar un diálogo sobre este tema solo a mis usuarios que se ajusten a ese criterio. Sé cómo verificar el nivel del sistema operativo, pero no he encontrado nada que definitivamente pueda decirme que el dispositivo está usando multi-core.

¿Algunas ideas?

Desafortunadamente para la mayoría de los dispositivos Android, el método availableProcessors () no funciona correctamente. Even / proc / stat no siempre muestra la cantidad correcta de CPU.

El único método confiable que he encontrado para determinar el número 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 Java debería funcionar en cualquier aplicación de Android, incluso sin root.

Si estás trabajando con una aplicación nativa, deberías probar esto:

 #include  int GetNumberOfProcessor() { return sysconf(_SC_NPROCESSORS_CONF); } 

Funciona en mi i9100 (which availableProcessors () devolvió 1).

Puede intentar usar Runtime.availableProcessors () como se sugiere en esta respuesta

¿Hay alguna API que indique si un dispositivo Android es de doble núcleo o no?

—editar—

Una descripción más detallada se da en el sitio de Oracle

disponiblesProcesadores

 public int availableProcessors() 

Devuelve la cantidad 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 deberían, por lo tanto, sondear ocasionalmente esta propiedad y ajustar el uso de sus recursos de manera apropiada.

Devoluciones:

la cantidad máxima de procesadores disponibles para la máquina virtual; nunca más pequeño que uno

Ya que:

  1.4 

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.