我对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类是为此目的而设计的。看起来它更适用于父线程的异步回调。
答案 0 :(得分:1)
好吧,我找不到关于这个时间的好答案(在其他情况下知道它会很有用),但是,作为一种解决方法,我只使用了一个线程安全的公共List,我的UI线程可以访问此公共列表并向其添加信息。特别是我使用了ConcurrentLinkedQueue
。我在Google提供的官方JetBoy game sample中找到了这个,所以也许他们甚至不鼓励在这种情况下使用Handler :)