25

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

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

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

4

4 に答える 4

25

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

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

たとえば、Pentium 4 と Core 2 を比較してみましょう。2.4 GHz の Pentium 4 と 1.8 GHz の Core 2 では、どちらの CPU が高速ですか? 2 GHz Opteron は 1.4 GHz Itanium 2 より高速ですか? どの種類の ARM CPU が実際に高速であるかをどのように知るつもりですか?

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

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

于 2011-02-02T15:42:38.410 に答える
8

/proc/cpuinfoCPU情報が含まれているものを読んでみてください:

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

   Process process = pb.start();
   InputStream in = process.getInputStream();
   //read the stream
于 2011-02-02T14:22:25.227 に答える
2

@dogbane ソリューションとこの回答に基づいて、これは 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;
}
于 2015-01-07T14:28:46.000 に答える
1

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

于 2011-02-02T14:31:06.117 に答える