的時候,這裏是我的情況: 我建立一個遊戲,Android和我的遊戲的活動是由它可以對遊戲邏輯和渲染線程的自定義surfaceView的。該架構類似於Google網站上的LunarLander演示。「主題已經開始」恢復活動
當活動啓動時,它會創建surfaceView並調用這個方法:
@Override
public void surfaceCreated(SurfaceHolder holder)
{
renderThread.start();
}
當我按下home鍵退出遊戲時,在onPause()方法被調用,調用surfaceDestroyed()。在surfaceDestroyed我停止遊戲主題通過調用:
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
synchronized(holder)
{
renderThread.stop();
}
}
該應用程序去背景罰款。然後,當我按下圖標重新啓動應用程序時,屏幕上會顯示「線程已啓動」消息以及「強制關閉」彈出窗口。當活動在渲染線程上調用start()時進入「surfaceCreated」方法時,會發生此消息。
現在,我看着它幾個小時,想不通這是爲什麼。我相信我的線程在關閉應用程序時停止了,所以我不明白它爲什麼說它已經開始。
你好,謝謝你的回答。 我在while循環中用join()替換了stop()。 我相信它會在停止線程之前等待。但我仍然有同樣的問題,我錯過了什麼? 至於線程的開始。我知道該線程不能多於一次啓動,因此是錯誤消息。所以你認爲我得到這個錯誤只是因爲線程沒有正確停止? 謝謝 – NioX5199 2010-06-30 10:37:34
@ NioX5199:不,join()不會停止線程,它會等待它自己完成。你得到錯誤,因爲線程已經啓動。線程*不能*被「停止」並重新啓動。正如我寫的:爲了讓一個線程暫停直到條件滿足,您使用Object.wait()。 – 2010-06-30 10:53:04
他也許不應該那樣做。重新創建線程可能是更好的方法。 – alexanderblom 2010-06-30 11:37:20