我正在嘗試在Android中製作多人遊戲,其中玩家使用加速度計移動對象。最初,我使用TCP將包含播放器Y座標的數據包作爲JSON字符串發送,該數據包位於附加到加速度計(帶有SENSOR_DELAY_GAME)的onSensorChanged()內部。但由於延遲問題,我決定試用UDP。Android - 使用onSensorChanged同步線程以發送udp數據包
現在早些時候,我創建了創建了一個新的插座單獨的線程中,我用下面的代碼:
public void onSensorChanged(SensorEvent event) {
// Other Stuff
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(coords.toString());
}
而且我有:
socket = new Socket(serverAddr, Port);
在另一個線程。
由於UDP不提供任何這樣的方法來發送數據從主線程由於NetworkOnMainThreadException
,我想我必須在另一個線程中執行數據包傳輸。但問題是我正在計算在onSensorChanged()
內部發送的數據,並且每次調用onSensorChanged()
時我都希望發送數據包。
我對Java和多線程相對較新,並嘗試閱讀關於同步的內容,但似乎無法正確理解和實現它。所以,如果有人能指出解決這個問題的方法,我將不勝感激。 我也想知道是否發送每個SensorChange的座標是一個好主意,以及是否有一種方法來優化數據,以便我仍然可以使用TCP而不會出現延遲問題。我還想知道是否有任何可能的方法使onSensorChanged()
作爲一個單獨的線程運行......?
謝謝。你的回答也讓我意識到,我用大量不必要的計算堵塞了mainUiThread - 將它們移動到單獨的線程可顯着提高性能。 – Erric