在执行上述代码时,系统抛出了异常,异常信息为 Can't create handler inside thread that has not called Looper.prepare(),这句话的意思是说不能够在一个没有调用 Looper.prepare() 的线程中创建 Handler 类。
那这个 Looper 类是什么呢,这个在下面章节再讲解,这里先给出能够正确执行的代码
Handler 每次发送的消息都会被发送到消息队列中存储。而 Looper 则会循环遍历消息队列中的消息,并交给对应的 Handler 来处理。这样就能够完成了 Handler 的消息发送和处理。
在了解完基本的工作原理后,回顾一下上述章节所提到的异常: Can't create handler inside thread that has not called Looper.prepare(), 这个异常是在 Handler 的构造函数中抛出的
// Handler 构造函数
mLooper = Looper.myLooper();
if (mLooper == null) {
throw new RuntimeException(
"Can't create handler inside thread " + Thread.currentThread()
+ " that has not called Looper.prepare()");
}
private static void prepare(boolean quitAllowed) {
// 不为空说明已经关联过了
if (sThreadLocal.get() != null) {
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper(quitAllowed));
}