2012-05-03 8 views
1

こんにちは私はアンドロイドのアプリケーションを開発していますどのようにバックグラウンド中に、より少ない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); 
       } 
      } 
     } 

が、それはただのポーズ変数IMO

+0

あなたはCPUを回転して食べているビジー待機を持っているようですね。 – JesusFreke

+2

一時停止時にあなたがしていることに関するコードを見ることはできますか? – momo

+0

私のコメント – MikeT

答えて

2

を変更し、まだしたらあなたのアプリが一時停止している間は全くループしてはいけません。

アンドロイドアプリの「正しい」ライフサイクルの詳細については、this pageを参照してください。

また、どのビジーループデザインでも、アプリケーションは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); 
} 
+0

ohhhhを編集し、onPause()でハンドラのコールバックを削除するだけですか? – MikeT

+0

実際に私のクラスが実行可能ファイルを使用するのを待つので、このrun()メソッドをどのように実装するのですか? – MikeT

+0

'Runner'の代わりに' Runnable'を意味しました。そしてyes - 'this.handler.removeCallbacks(this.iterateRunnable);'は 'onPause()'で行うべきです。 –

関連する問題