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アプリの「適切な」ライフサイクルの詳細については、このページを参照してください。

また、ビジーループの設計では、アプリがCPUを100%使用することに注意してください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 に答える