I recently bought a Moto Atrix 2 mobile. When I tried to look at the processor specs in the phone,
Runtime.getRuntime().availableProcessors() returned 1.
/proc/cpuinfo too had information about just processor 0.
Out of curiosity I checked the same in my friend's Samsung Galaxy S2, which is again a dual core phone. This too showed that no. of cores is 1.
I checked the same in my Moto xoom tablet which is again dual core. This time availableProcessors() returned 2 and cpuinfo also had both processor 0 and processor 1 details.
I am confused. Why some devices carry different information? Can someone explain this anomaly?
Runtime.getRuntime().availableProcessors()
only returns the number of online processors, so it will return 1 when the second core is sleeping. This is done in order to preserve power during less resource-intensive tasks.
To see all available cores, look at /sys/devices/system/cpu/
This will get you the number of cores on Android (based on this post) :
public static int getCoresCount()
{
class CpuFilter implements FileFilter
{
@Override
public boolean accept(final File pathname)
{
if(Pattern.matches("cpu[0-9]+",pathname.getName()))
return true;
return false;
}
}
try
{
final File dir=new File("/sys/devices/system/cpu/");
final File[] files=dir.listFiles(new CpuFilter());
return files.length;
}
catch(final Exception e)
{
return Math.max(1,Runtime.getRuntime().availableProcessors());
}
}