2012-03-15 53 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