【问题标题】:How to reduce App's CPU usage in Android phone?如何降低Android手机中App的CPU使用率?
【发布时间】:2011-06-04 02:16:49
【问题描述】:

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

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

【问题讨论】:

  • 没有办法说,因为我们不知道你调用的函数中发生了什么,为什么你使用了 50% 的 CPU。如果您想要一种简单的方法来降低平均 CPU 使用率,您可以将时间延迟增加到 60 秒以上。
  • 考虑使用从 Timer 调度的 TimerTask,而不是 while 循环。它更加优化,您不必自己管理线程的睡眠/通知调用。

标签: android cpu-usage reduce


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2016-06-11
      • 2018-12-13
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      相关资源
      最近更新 更多