如何降低Android手机中App的CPU使用率?

时间:2011-06-04 02:16:50

标签: android cpu-usage reduce

我开发了一个自动调用应用程序。该应用程序读取包含电话号码列表的文本文件,并呼叫几秒钟,结束通话然后重复。

我的问题是应用程序在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++;
}

这是TimeDelay()方法来源:

public void TimeDelay(String delayTime) {

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

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

    }

}

TimeDelay()在while循环中重复几次。

2 个答案:

答案 0 :(得分:4)

它使用50%的CPU的原因是Android显然不会让它使用100%的CPU,这就像你TimeDelay()中的那个循环一样。 (或者你有两个CPU,它实际上是使用100%的一个CPU。)你正在做的是一个busy wait,并且很明显为什么不断检查一个条件将使用大量的CPU。所以不要这样做。请改用Thread.sleep()。在等待期间,您的应用程序将完全不使用CPU。

另外,为了上帝的缘故,你为什么要传递一个字符串然后parseInt,而不是仅仅传递一个Integer? : - )

答案 1 :(得分:1)

如果您的方法需要很长时间才能完成,尤其是while循环。你应该把Thread.sleep(50)放在循环中。这使您的处理器能够处理其他进程。

您的CPU将减少。不确定,但你应该尝试。 希望你得到好结果。