2012-05-07 257 views
0

我有一個關於在Android OS上設計和開發2D遊戲的最佳實踐的問題。在Lunar Lander示例之後,我的遊戲運行在單獨的線程上,因此它不會阻塞UI線程。然而,一旦某些「波」在遊戲中結束,我想展示一個屏幕來計算該波的分數,顯示獎金等。我正在考慮通過在結束時調用startActivityForResult()來將其作爲單獨的活動來執行此操作海浪。因爲我不在主線程中,最好的辦法是什麼?這甚至會被認爲是一種好的做法?Android遊戲線程建議

謝謝!

回答

1

在主UI線程中創建一個Handler。讓它處理波浪結束的消息。在遊戲線程中,請致電Handler.sendMessage(WAVE_END).sendToTarget()Handler以告知UI線程Wave已結束。 Handler將執行你想要的代碼。

例子:

public int MSG_WAVE_END = 1; 

private final Handler endWave = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
    if(msg.what == MSG_WAVE_END) { // the number is arbitrary. Traditionally a constant 
     // Do what you want to do when a wave ends like startActivityForResult() 
    } 
    } 
} 

然後在你的遊戲線程調用這個時候你的波結束:

endWave.obtainMessage(MSG_WAVE_END).sendToTarget(); 

Handler基本上扮演一個回調。您可以安全地在線程之間發送「消息」,以便在創建的任何線程上執行代碼。如果需要,您還可以傳遞兩個整數參數和一個對象。它將包含在Message對象中。

0

This可能對您的情況有用。總之,startActivityForResult是同步的,所以如果你不介意暫停你的服務,那就行了。否則,請將活動回撥給服務。