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