availableProcessors() returns 1 for dualcore phone

2020-08-13 05:48发布

问题:

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?

回答1:

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/



回答2:

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());
      }
    }