2012-05-03 44 views
1

嗨,即時通訊開發一個Android應用程序,我想知道如何使應用程序使用較少的CPU,而後臺。例如,我的應用程序暫停一次,當你暫停和恢復它只是改變了暫停可變正確的多任務處理android

+0

這聽起來像你有一個忙等待那的紡絲箱體和吃的CPU。 – JesusFreke

+2

我們可以在暫停時看到你正在做什麼的代碼嗎? – momo

+0

編輯我的評論 – MikeT

回答

2

IMO它失去焦點,但CPU使用率仍然是50%

編輯

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

然後,你應該當您的應用暫停時,不會循環。

請參閱this page瞭解有關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); 
} 
+0

ohhhh,然後onPause()你只是刪除處理程序的回調? – MikeT

+0

實際上等待我的課程使用runnable,那麼我將如何實現這個使用run()方法 – MikeT

+0

我的意思是'Runnable'而不是'Runner' - 我提到我沒有測試過這個嗎?是的 - 'this.handler.removeCallbacks(this.iterateRunnable);'應該在'onPause()'中完成。 –