2012-03-15 42 views
1

我有一個簡單的Android磚斷路器遊戲這是目前在單個線程上運行。我一直負責設計遊戲以結合多線程,但我遇到的問題是找到一個足夠簡單的教程來指導我完成它。我有此刻的流暢運行遊戲,它已經MainActivity,GameView,GameLogic和SpriteObject類,這樣做,你會非常期待他們會從他們的名字做。我如何以及在哪裏實現另一個線程,目前只是簡單地增加一個外部變量每隔一段時間就說'timer'?在java中使用簡單的線程創建?

請裸記住我一直在努力讓我的周圍螺紋頭,所以你可能需要相當光顧,我得到它。

感謝

回答

1

所以如果它只是做一些定期只需使用調度/定時器沒有必要建立一個新的線程

import java.util.concurrent.ScheduledFuture; 

private void startUpdateTimer(){ 
final Runnable updater = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      updateTheActualVariable(); 
     } catch (Exception ex) { 
      Log.e("error in getting updates", ex.getMessage()); 
     } 
    } 
}; 
final ScheduledFuture updaterHandle = sheduler.scheduleAtFixedRate(updater, 0, Constants.GET_UPDATES_PERIOD, TimeUnit.SECONDS); 
} 

在這裏閱讀更多http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html

你也可以你不錯的舊Java計時器 http://developer.android.com/reference/java/util/Timer.html

+0

你忘了提及的是,共享變量必須是'volatile'或一些原子。 – toto2 2012-03-15 13:21:50

1

的Android有一個名爲的AsyncTask類是非常漂亮:)

只需創建一個擴展它像這樣一類:

public class myTask extends AsyncTask<Object, Object, Object> { 

    @Override 
    protected Object doInBackground(Object... arg0) { 
       //Increase timer and wait here in a loop 
     return null; 
    } 

    protected void onPostExecute(Object result) { 
     //Something you want to do when done? 

    }; 



} 

要啓動它只需撥打

new myTask().execute(INPUT or null); 

的部分是類類型的參數來執行的,一個對象的類類型可被用於更新視覺進展和doInBackground回報和onPostExecute分別得到的值。

爲指導,去這裏:http://android-developers.blogspot.com/2009/05/painless-threading.html

和文檔:http://developer.android.com/reference/android/os/AsyncTask.html