在类中创建Handler而不会出现错误“Looper not prepared”?

时间:2011-03-10 11:49:29

标签: android handler looper

在我的游戏中,有一个游戏对象类需要使用Handler来发布延迟Runnable。但是,我尝试在对象类中创建一个Handler,我收到错误消息:

  

无法在线程内创建处理程序   没有调用Looper.prepare()

我用谷歌搜索了一些解决方案,但他们都使用了另一种解决方案,而不是Handler。有没有在普通类中使用Handler的解决方案?或者在确定的延迟后运行Runnable的任何解决方案?

我无法使用睡眠,因为它暂停了我的所有游戏!

谢谢。

1 个答案:

答案 0 :(得分:2)

您可能正在从非UI线程创建Handler。 (1)通过将UI线程的looper传递给Handler构造函数,将处理程序显式附加到UI线程,这意味着发布到Handler的消息也在UI线程上执行,或者( 2)为非UI线程创建新的Looper:请参阅here

关于(1)的

编辑:你必须以某种方式将UI线程的looper传递给“游戏对象”,例如在创建它时。您可以通过在上下文(例如来自活动)上调用getMainLooper()来获取对UI的循环器的引用。

另一种方法是在活动中创建处理程序,然后将处理程序传递给游戏对象。