1

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

我的问题是该应用程序在 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循环中重复几次。

4

2 回答 2

4

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

另外,看在上帝的份上,你为什么要传递一个字符串然后parseInting 它,而不是一开始就传递一个Integer?:-)

于 2011-06-04T04:56:04.200 回答
1

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

你的 CPU 会减少。不确定,但你应该试试。希望你能取得好成绩。

于 2012-09-12T10:39:12.263 回答