2011-12-25 4 views
2

Я пытаюсь написать небольшую игру с помощью Android и проблемы с потоковой обработкой. основного цикла игры проходит в этом отдельном потоке и в основном просто делает что-то вроде этого:Android Threading - Queue runables

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

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

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

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

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

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

+0

Все, что я могу думать на данный момент ее решения с использованием двух потоков. один HandlerThread, который получает runables для обработки входных событий и второго потока, который периодически также генерирует runable, содержащий NativeGameLib.gameTick (t); вызов. Но я думаю, что это не очень элегантно. – Dirk

+0

Взгляните на примеры sdk: C: \ android-sdk \ samples \ android-10 \ JetBoy C: \ android-sdk \ samples \ android-10 \ LunarLander – Selvin

ответ

0
+0

Я не думаю, что это поможет мне в этом случае. Мне нужно обработать входные события в моем потоке цикла игры, и поскольку поток не является видом, я не могу использовать view.post() здесь. – Dirk