2011-06-04 52 views
1

我開發了一個自動通話應用程序。該應用程序讀取包含電話號碼列表並呼叫幾秒的文本文件,結束通話,然後重複。如何降低Android手機中應用的CPU使用率?

我的問題是,該應用程序10到16小時後不發送呼叫。我完全不知道原因,但我想這是CPU使用率的問題。我的應用程序的CPU使用率差不多是50%!如何減少CPU使用率?

這裏是源代碼的一部分:

if(r_count.compareTo("0")!=0) { 
    while(index < repeat_count) { 
     count = 1; 
     time_count = 2; 

     while(count < map.length) { 
      performDial(); //start call 
      reject();     //end call 
      finishActivity(1); 
      TimeDelay("60");   // wait for 60sec 
      count = count + 2; 
      time_count = time_count + 2; 
      onBackPressed();   // press back button for calling next number 
      showCallLog(); 
      finishActivity(0); 
     } 
     index++; 
} 

這是​​方法來源:

public void TimeDelay(String delayTime) { 

    saveTime = System.currentTimeMillis()/1000; 
    currentTime = 0; 
    dTime = Integer.parseInt(delayTime); 

    while(currentTime - saveTime < dTime) { 
     currentTime = System.currentTimeMillis()/1000; 

    } 

} 

​​重複在數次while循環。

+0

由於我們不知道在調用的函數中發生了什麼,所以您無法知道爲什麼要使用50%的CPU。如果您想簡單地降低平均CPU使用率,您可以將時間延遲增加到60秒以上。 – 2011-06-04 02:33:54

+0

'TimeDelay()'做什麼? – Haphazard 2011-06-04 04:19:17

+0

考慮使用從Timer中調度的TimerTask,而不是while循環。它更加優化,你不必自己管理線程的睡眠/通知調用。 – 2013-07-27 10:32:27

回答

4

它使用你CPU的50%的原因是,Android顯然不會讓它使用CPU的100%,這是一個像你的​​通常那樣的循環。 (否則你有兩個CPU,實際上它使用一個CPU的100%。)你在做什麼叫做busy wait,它應該很明顯,爲什麼連續檢查一個條件會使用大量的CPU。所以不要這樣做。改爲使用Thread.sleep()。等待期間,您的應用程序將不再使用CPU。

另外,爲了上帝的緣故,你爲什麼要傳遞一個字符串,然後傳遞一個字符串,而不是首先傳遞一個Integer? :-)

1

如果您的方法需要很長時間才能完成,尤其是while循環。你應該把Thread.sleep(50)放在你的循環中。這使得你的處理器能夠處理其他進程。

您的CPU將會減少。不知道,但你應該嘗試。 希望你得到好的結果。