首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android手机中降低App的CPU使用率?

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

Stack Overflow用户
提问于 2011-06-04 10:16:50
回答 2查看 8.8K关注 0票数 1

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

我的问题是,应用程序在10~16小时后不能发送呼叫。我不知道确切的原因,但我猜问题出在CPU使用率上。我的应用程序的CPU使用率几乎是50%!如何降低CPU使用率?

以下是部分源代码:

代码语言:javascript
复制
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()方法的源代码:

代码语言:javascript
复制
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循环中重复了几次。

EN

回答 2

Stack Overflow用户

发布于 2011-06-04 12:56:04

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-09-12 18:39:12

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6234271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档