处理程序类及其消息队列清空的时间

时间:2010-09-06 09:20:15

标签: android

我对Handler类的handleMessage()sendMessage()行为的性质感到好奇。我希望能够以这样的方式将消息发送到另一个线程,即目标线程可以在需要时处理消息队列。但是,似乎handleMessage()消息几乎在发送后立即处理。

我正在尝试设计一个类似这样的游戏循环线程:

void run(){
   while (gameIsActive){
     handleInput();
     updateGameState();
   }
}

handleInput(){
  //Remove an item from the handler's message queue
  //which can be UI events (click, touch, etc.)
}

但是,只要调用sendMessage()(从父/调用线程),就会处理Handler.handleMessage()(在子/接收线程中),即使子/接收线程阻塞了一会儿循环。

通过使用线程安全列表(ConcurrentLinkedQueue),我已经在其他游戏中看到了这个问题。 UI线程只是将事件发布到此队列,游戏循环可以删除事件,因为它似乎适合。我只是假设Handler类是为此目的而设计的。看起来它更适用于父线程的异步回调。

1 个答案:

答案 0 :(得分:1)

好吧,我找不到关于这个时间的好答案(在其他情况下知道它会很有用),但是,作为一种解决方法,我只使用了一个线程安全的公共List,我的UI线程可以访问此公共列表并向其添加信息。特别是我使用了ConcurrentLinkedQueue。我在Google提供的官方JetBoy game sample中找到了这个,所以也许他们甚至不鼓励在这种情况下使用Handler :)