在我的游戏中,有一个游戏对象类需要使用Handler来发布延迟Runnable。但是,我尝试在对象类中创建处理程序的所有内容都收到错误消息:
无法在未调用 Looper.prepare() 的线程内创建处理程序
我用谷歌搜索了一些解决方案,但他们都使用另一种解决方案,而不是 Handler。有没有在普通类中使用 Handler 的解决方案?或者在确定的延迟后运行 Runnable 的任何解决方案?
我不能使用睡眠,因为它暂停了我所有的游戏!
谢谢你。
您可能是Handler
从非 UI 线程创建的。(1) 通过将 UI 线程的 looper 传递给Handler
s 构造函数,将处理程序显式附加到 UI 线程,这意味着发布到的消息Handler
也在 UI 线程上执行,或者 (2)Looper
为非UI线程:见这里。
关于 (1) 的编辑:您必须以某种方式将 UI 线程的循环器传递给“游戏对象”,例如在创建它时。getMainLooper()
您可以通过调用上下文(例如,从活动中)获取对 UI 循环器的引用。
另一种方法是在活动中创建处理程序并将处理程序传递给您的游戏对象。