web-dev-qa-db-ja.com

Android CPU速度を検出する方法?

Androidアプリケーションが実行されているデバイスの速度を検出したいですか?

Androidでそれを行うためのAPIはありますか?それとも自分でベンチマークする必要がありますか?

デバイスのCPUが遅い場合、アニメーションなどの時間のかかる操作をオフにするか、同時HTTPリクエストの最大数を制限します。

25

私の意見では、これを行う最善の方法は、これらのアクションを実行するのにかかる時間を監視することです。時間がかかりすぎる場合は、システムが遅すぎるため、十分な速度になるまで機能を無効にできます。

CPU速度またはその他の仕様を読み取り、システム速度を判断しようとするのは悪い考えです。今後のハードウェアの変更により、これらの仕様は無意味になる可能性があります。

たとえば、Pentium 4とCore 2を比較してください。より高速なCPU、2.4 GHz Pentium 4、または1.8 GHz Core 2はどれですか? 2 GHz Opteronは1.4 GHz Itanium 2より高速ですか?どのようなARM CPUが実際に高速であるか)をどのようにして知るのですか?

Windows Vistaおよび7のシステム速度の評価を得るために、Microsoftは実際にマシンのベンチマークを行っています。これは、システム機能を決定するための唯一の中間的な正確な方法です。

SystemClock.uptimeMillis()。 を使用するのが良い方法のようです。

25
Zan Lynx

CPU情報を含む/proc/cpuinfoを読んでみてください:

   String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
   ProcessBuilder pb = new ProcessBuilder(args);

   Process process = pb.start();
   InputStream in = process.getInputStream();
   //read the stream
8
dogbane

@dogbaneソリューションとこれに基づいて answer 、これはBogoMIPS値を取得するための私の実装です:

 /**
 * parse the CPU info to get the BogoMIPS.
 * 
 * @return the BogoMIPS value as a String
 */
public static String getBogoMipsFromCpuInfo(){
    String result = null;
    String cpuInfo = readCPUinfo();
    String[] cpuInfoArray =cpuInfo.split(":");
    for( int i = 0 ; i< cpuInfoArray.length;i++){
        if(cpuInfoArray[i].contains("BogoMIPS")){
            result = cpuInfoArray[i+1];
            break;
        }
    }
    if(result != null) result = result.trim();
    return result;
}

/**
 * @see {https://stackoverflow.com/a/3021088/3014036}
 *
 * @return the CPU info.
 */
public static String readCPUinfo()
{
    ProcessBuilder cmd;
    String result="";
    InputStream in = null;
    try{
        String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
        cmd = new ProcessBuilder(args);
        Process process = cmd.start();
        in = process.getInputStream();
        byte[] re = new byte[1024];
        while(in.read(re) != -1){
            System.out.println(new String(re));
            result = result + new String(re);
        }
    } catch(IOException ex){
        ex.printStackTrace();
    } finally {
            try {
                if(in !=null)
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    return result;
}
2
ahmed_khan_89

CPU関連のデータを提供する次のリンクを参照してください。

1
chiranjib