android - Handler类及其消息队列清空时间

标签 android

我很好奇 HandlerhandleMessage()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/

相关文章:

ListView 中的Android Material 设计困惑

android - 将数据加载到 ExpandableListView

Android:从远程服务器下载图像时出现此错误:SkImageDecoder::Factory 返回 null

php - JSONException 索引超出范围 [0..1)

java - Android:在 ListView 中将整数读取为字符串

android - 在支持设计库中找不到 android.support.design.widget.Snackbar

Android,检测其他应用程序何时启动,然后销毁该应用程序

android - 如何检查 Activity 是否仍在堆栈中?

android - 我们应该使用 ionic 框架来构建大型移动应用程序吗?

android - 我在 Android Studio 中开发,当我在我的 S4 上运行我的应用程序时,会在我的手机上创建 2 个副本