2011-06-04 131 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将会减少。不知道,但你应该尝试。 希望你得到好的结果。