我很好奇 Handler
的 handleMessage()
和 sendMessage()
行为的性质类(class)。我希望能够以目标线程可以在需要时处理消息队列的方式将消息发送到另一个线程。然而,消息似乎在发送后立即由 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() 就会被处理(在子/接收线程中),即使子/接收线程正在阻塞一个 while 循环。
我曾在其他游戏中看到通过使用线程安全列表 (ConcurrentLinkedQueue
) 解决了这个问题。 UI 线程只是将事件发布到此队列,而游戏循环可以删除看起来合适的事件。我只是假设 Handler 类是为此目的而设计的。它似乎更适合父线程的异步回调。
最佳答案
好吧,我找不到关于这个时间的好答案(在其他情况下知道它会很有用),但是,作为一种解决方法,我只是使用了一个线程安全的公共(public)列表,我的 UI 线程可以访问此公共(public)列表并向其中添加信息。特别是我使用了 ConcurrentLinkedQueue
。我在官方找到这个JetBoy game sample由谷歌提供,所以也许他们甚至不鼓励在这种情况下使用 Handler :)
关于android - Handler类及其消息队列清空时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650316/