文章目录
1、Handler机制详解
- Handler机制主要作用
解决线程间通信问题;
- 主要应用场景
在子线程中更新主线程UI,即:子线程完成耗时操作的过程中,通过Handler向主线程发送消息Message,用来刷新UI界面;
1.1 、Handler分析
意为处理者,发送消息,处理更新UI的操作
1.1.1 Handler创建
主线程中可以直接创建Handler对象,而在子线程中需要先调用Looper.prepare()才能创建Handler对象;
- 若在子线程中创建Handler对象
public class MainHandlerActivity extends AppCompatActivity {
private Handler handler1;
private Handler handler2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_handler);
handler1 = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
handler2 = new Handler();
}
}).start();
}
}
运行结果
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
- 总结
1、子线程中创建的Handler是会导致程序崩溃的,错误如上:不能在没有调用Looper.prepare()的线程中创建Handler;
2、要想在子线程中创建Handler,需要先调用Looper.prepare();
2、源码分析
2.1 Handler源码
final Looper mLooper;
final MessageQueue mQueue;
//Handler无参构造方法
public Handler() {
this(null, false);
}
public Handler(Callback callback, boolean async) {
if (FIND_POTENTIAL_LEAKS) {
final Class<? extends Handler> klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&