如何从代码中检测Android设备上的双核cpu?

我遇到的问题似乎只影响运行姜饼或更大的双核Android设备。 我想仅针对符合该标准的用户提供有关此问题的对话框。 我知道如何检查操作系统级别,但没有发现任何可以明确告诉我设备正在使用多核的东西。

有任何想法吗?

  • 启动模拟器时出错
  • 为多个客户发布Android私有应用
  • 无法导入新的Gradle项目:无法获取“IdeaProject”types的模型
  • 操作栏和通知无效的Android图标生成器(灰色形状)
  • Admob广告与Firebase广告之间的差异
  • 如何正确使用和跟踪App-invites?
  • 无法使NotificationListenerService类工作
  • 使用Android Google Maps Api v2打开街道地图
  • 不幸的是,对于大多数Android设备,availableProcessors()方法无法正常工作。 偶数/ proc / stat并不总是显示正确的CPU数量。

    我发现确定CPU数量的唯一可靠方法是枚举/ sys / devices / system / cpu /中的虚拟CPU列表, 如本论坛post中所述 。 代码:

    /** * 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; } } 

    这个Java代码应该适用于任何Android应用程序,即使没有root。

    如果您正在使用本机应用程序,则应尝试以下操作:

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

    它适用于我的i9100(availableProcessors()返回1)。

    您可以尝试使用此答案中建议的Runtime.availableProcessors()

    是否有任何API可以判断Android设备是否为双核?

    – -编辑 – –

    Oracle网站上给出了更详细的描述

    availableProcessors

     public int availableProcessors() 

    返回Java虚拟机可用的处理器数。

    在特定的虚拟机调用期间,此值可能会更改。 因此,对可用处理器数量敏感的应用程序应偶尔轮询此属性并适当调整其资源使用情况。

    返回:

    虚拟机可用的最大处理器数量; 永远不会小于一个

    以来:

      1.4 

    这很简单。

     int numberOfProcessors = Runtime.getRuntime().availableProcessors(); 

    通常它将返回1或2. 2将在双核CPU中。