我有一个扩展Activity
的类,我试图在普通的java类中创建该类的对象,但它给我一个例外:
Can't create handler inside thread that has not called looper.prepare
我做错了什么?
提前致谢。
答案 0 :(得分:4)
您应该阅读Android应用的application fundamentals
我想不出你需要自己创建一个活动对象的例子。您应该使用Context.startActivity()调用来启动一个活动。
无论如何,要回答你的问题 - 一个活动实现一个消息队列(使用Handler),消息可以发送到活动的运行线程来执行某些任务。这意味着执行Activity代码的线程会等待这些消息(这些消息的一个示例是用户对应用程序UI的响应)。为了做到这一点,你需要使用一个“循环”(或以某种方式等待)操作的Looper线程。您的应用程序的主线程也为您的应用程序呈现UI是一个looper线程。
如果由于某种原因您需要手动创建活动对象,那么您应该重新考虑如何设计应用程序。只需使用startActivity即可。
答案 1 :(得分:1)
处理程序在创建它的任何线程中运行。因此,如果您没有在UI线程中创建新类的实例,那么处理程序不会在UI线程中运行,您将遇到问题。
我曾经尝试过夸大图形用户界面 单独的线程表现 原因。我没碰到任何窗口 那一点,但是当我得到膨胀时 我刚刚跑了同样的错误信息 Looper.prepare()在我的主题和所有 很好。
Looper运行线程的消息循环。如果你不打电话 Looper.prepare()(然后是Looper.loop())在一个线程中,该线程 将不会有消息循环,因此不能有接受的Handler对象 消息。