2011-02-02 34 views
24

Tôi muốn phát hiện thiết bị chạy Android của mình chạy nhanh đến mức nào?Làm thế nào để phát hiện tốc độ CPU của Android?

Có API nào để thực hiện trên Android không? Hay tôi phải tự chuẩn bị nó?

Nếu thiết bị có CPU chậm, tôi muốn tắt một số hoạt động tốn thời gian như hoạt ảnh hoặc giới hạn số lượng yêu cầu HTTP đồng thời tối đa.

Trả lời

24

Cách tốt nhất để làm theo ý kiến ​​của tôi là theo dõi thời gian để thực hiện những hành động này. Nếu quá nhiều thời gian, hệ thống sẽ quá chậm và bạn có thể tắt các tính năng ưa thích cho đến khi nó đủ nhanh.

Đọc tốc độ CPU hoặc các thông số kỹ thuật khác và cố gắng đánh giá tốc độ hệ thống là một ý tưởng tồi. Thay đổi phần cứng trong tương lai có thể làm cho các thông số kỹ thuật này vô nghĩa.

Hãy xem Pentium 4 và Core 2 chẳng hạn. CPU nào nhanh hơn, Pentium 4 2,4 GHz hoặc Core 2 1,8 GHz? Opteron 2 GHz có nhanh hơn 1,4 GHz Itanium 2 không? Làm thế nào bạn biết được loại CPU ARM nào thực sự nhanh hơn?

Để nhận xếp hạng tốc độ hệ thống cho Windows Vista và 7 Microsoft thực sự đánh giá tiêu chuẩn máy. Đây là phương pháp nửa chừng chính xác duy nhất để xác định khả năng của hệ thống.

Nó trông giống như một phương pháp tốt nhất là sử dụng SystemClock.uptimeMillis().

+0

Bạn tạo một điểm rất tốt @Zan. –

+0

Tôi có nên chỉ đếm thời gian với sự trợ giúp của System.currentTimeMillis() không? –

+0

@darbat: http://developer.android.com/reference/android/os/SystemClock.html Hãy thử sử dụng uptimeMillis(). –

8

Thử đọc /proc/cpuinfo chứa các thông tin CPU:

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

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

Đây là một ý tưởng khá xấu. Ý tôi là, nó sẽ hoạt động. Nhưng ứng dụng của bạn sẽ làm gì khi chạy trên một số phiên bản tương lai của CPU hoạt động tốt hơn ở tốc độ đồng hồ chậm hơn? Nếu ứng dụng đã thực hiện điều này trên Pentium 4s thì khi Core2 xuất hiện, ứng dụng sẽ trông ngu ngốc. –

+2

Xin lỗi, tôi nên giải thích thêm về darbat của tôi. –

0

Dựa trên giải pháp @dogbane và answer này, đây là thực hiện của tôi để có được những giá trị 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

tôi đã phải thay đổi regex split trong đoạn code trên để có được một giá trị đọc chuẩn cho bogomips: 'String [] cpuInfoArray = cpuInfo.split (": | \\ n"); ' Cheers – BillyRayCyrus

+0

nhờ. Tôi sẽ kiểm tra lại. –

Các vấn đề liên quan