问题
下面的代码有问题吗?
new Thread(){
Handler handler = null;
@Override
public void run() {
super.run();
handler = new Handler();
}
}.start();
效果
运行代码,我们看看效果
原因
提示在子线程中如果没有调用Looper.prepare()不能创建Handler。为什么会出现下面的现象?
我们看看源码?
我们继续看看Looper.myLooper()的源码
我们可以看到:当我们在子线程中没有调用Looper.prepare(),那么此时在子线程中通过
Looper.myLooper()获得的Looper为null,那么就会抛出异常。
解决办法
子线程中增加 Looper.prepare(); 方法
new Thread(){
Handler handler = null;
@Override
public void run() {
super.run();
Looper.prepare();
handler = new Handler();
}
}.start();