Android Threading - исполняемые файлы очередей

Я пытаюсь написать небольшую игру на android, но у меня проблемы с потоками. Главный цикл игры запускается в этом собственном потоке и в основном делает что-то вроде этого:

  public void run() {
    while (true) {
      NativeGameLib.gameTick(t);
    }
  }

Теперь я хочу передать сенсорный ввод в мою NativeGameLib. Я думал, что использую onTouchEvent () представления в потоке пользовательского интерфейса, создаю исполняемый объект внутри и позволяю ему выполняться в потоке основного цикла.

Но я действительно не понимаю, как это сделать. Я видел, что есть класс Handler и Looper, и что я могу использовать обработчик для публикации исполняемых файлов в messageQueue и функцию Looper.loop () для обработки очереди.

Насколько я понимаю, функция loop () бесконечно проверяет наличие новых сообщений и поэтому блокирует поток. Итак, как мне совместить это с моей веткой. Я хочу в ветке сделать что-то подобное:

  public void run() {
    while (true) {
      processMessageQueue();
      NativeGameLib.gameTick(t);
    }
  }

Любые идеи? Спасибо.


person Dirk    schedule 25.12.2011    source источник
comment
Все, о чем я могу думать на данный момент, - это решить ее с помощью двух потоков. один HandlerThread, который получает исполняемые файлы для обработки входных событий, и второй поток, который периодически также генерирует исполняемый файл, содержащий NativeGameLib.gameTick (t); вызов. Но я думаю, что это не совсем элегантно.   -  person Dirk    schedule 25.12.2011
comment
взгляните на примеры SDK: C: \ android-sdk \ samples \ android-10 \ JetBoy C: \ android-sdk \ samples \ android-10 \ LunarLander   -  person Selvin    schedule 25.12.2011


Ответы (1)


Вы проверяли View.Post API?

http://developer.android.com/reference/android/view/View.html#post(java.lang.Runnable)

person Vinoth    schedule 25.12.2011
comment
я не думаю, что это поможет мне в данном случае. Мне нужно обрабатывать входные события в моем потоке игрового цикла, и поскольку поток не является представлением, я не могу использовать здесь view.post (). - person Dirk; 25.12.2011