The Runtime.availableProcessors() doesn't seem to work correctly for all Android devices (for example, it only returns "1" on my dual-core Galaxy S II). There may be some confusion between physical CPUs, and virtual CPUs, aka Cores.
The most reliable method I've found is described in this forum post. Basically, you have to count the virtual CPU devices in /sys/devices/system/cpu/. This will work with dual-core and quad-core devices with no modifications.
I've tested this method on my Galaxy S II (2 cores) and Asus Transformer Prime (4 cores) and it reports correctly. Here's some sample code (taken from my answer to this question):
/**
* 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 a single digit number
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;
}
}