1

嗨,我正在开发一个 android 应用程序,我想知道如何让应用程序在后台运行时使用更少的 CPU。例如,我的应用程序一旦失去焦点就会暂停,但 cpu 使用率仍然是 50%

编辑

 while (!pause) {
             Canvas c = null;
             try {
                 c = sHolder.lockCanvas(null);
                 synchronized (sHolder) {
                     doDraw(c);
                     powerUps();
                 }
             } finally {
                 if (c != null) {
                     sHolder.unlockCanvasAndPost(c);
                 }
             }
         }

然后,当您暂停并恢复时,它只会更改暂停变量

4

1 回答 1

2

IMO,当您的应用程序暂停时,您根本不应该循环。

有关 android 应用程序的“正确”生命周期的更多详细信息,请参阅此页面

另请注意,对于任何繁忙的循环设计,您的应用程序将使用 100% 的 CPU - 我不确定从该onResume()方法启动循环是否正确;我的直觉是让你的循环的每次迭代都由一个由调用发起的单独调用来执行Handler.post(),最后一个语句重新发布下一个调用。否则,应用程序的主线程会被饿死,对吧?

也许是这样的:

void iterate() {
     Canvas c = null;
     try {
         c = sHolder.lockCanvas(null);
         synchronized (sHolder) {
             doDraw(c);
             powerUps();
         }
     } finally {
         if (c != null) {
             sHolder.unlockCanvasAndPost(c);
         }
     }
     this.handler.post(this.iterateRunnable);
}

void onResume() {
    this.handler = new Handler();
    this.iterateRunnable = new Runnable() {
        @Override public void run() { iterate(); }
    };
    this.handler.post(this.iterateRunnable);
}
于 2012-05-03T03:07:33.633 回答