2012-04-27 167 views
1

我剛剛開發了Android應用程序,它是一款遊戲,但我沒有使用3D圖形。這是一個棋盤遊戲,我在屏幕上移動ImageViews。由於現在我還沒有在移動設備上測試它,只是在仿真器上進行測試。問題是,當我在三星Galaxy S2手機上運行我的應用程序時(雙礦:),CPU使用率高達85%,該死的手機升溫:當我殺死進程時(完全關閉應用程序,所以它不會在後臺運行)它下降到0 :)Android。 CPU使用率太高

我甚至不知道從哪裏開始解決問題。你們能給我一個主意嗎?

我只能想到的這這件事會發生原因有兩個,但他們可能是愚蠢的原因:1,我有2個線程,每個線程具有無限while循環

  • 與UI線程例外它循環不定,並查看每個線程的消息隊列中是否有消息。情況會是這樣嗎?我應該延遲幾毫秒這些循環,所以他們不跑得這麼快?
  • 我還在屏幕上使用了大約20-25個imageViews,我通過觸摸移動。那些與這有什麼關係?

有沒有辦法從模擬器檢查內存泄漏或SOMETHING ...?

如果有人可以提供一些建議,我應該如何處理這個問題,我會很感激。

+1

一個好的開始可能是MemoryAnalyzer:http://www.eclipse.org/mat/ – noli 2012-04-27 09:42:17

回答

4

「我有2個以上線程,每一個具有無限while循環,其 週期不定,如果有在每個線程的消息 隊列中的任何消息看起來」

上述事情聽起來可疑對我來說。而不是在你自己的線程中使用無限循環,你應該真的使用Handler這是專門爲此目的而設計的。

作爲從開發者的網站:

一個處理程序允許您發送和一個線程的MessageQueue關聯的過程信息和Runnable對象 。每個處理程序實例是與單個線程和該線程的消息隊列關聯的 。

有一個處理程序兩種主要用途:作爲 某些時候要執行的未來

  • 入隊的動作來在不同的線程比進行

    1. 調度信息和可運行的 自己
  • 此外,在Eclipse DDMS標籤會給你所有需要用於調查CPU的過度使用的工具。