Handler关联了一个Looper,而Looper里面关联了一个消息队列,Looper关联了Local本地线程
send消息,发Msg发送到队列中,启动looper循环,然后通过msg.target分发,msg.target就是Hnadler自己,然后调用它的handleMsg方法
内存泄露
使用静态内部类,并使用弱引用
new Thread() {
@Override
public void run() {
super.run();
//子线程中不能修改主UI的控件,列入Activity中的TextView等
//子线程中可以弹出Toast和Dialog,只需要准备Looper即可
Looper.prepare();
showDialog();
Toast.makeText(MainActivity.this, "text", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
HandlerThread (里面封装了一个Looper,外界要配合Handler使用)
- extends Thread,开启Thread子线程进行耗时操作,避免多次创建线程
- Handler + Thread + Looper
- 通过获取HandlerThread的Looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务
- 优点:不会有堵塞,减少了对性能的消耗
- 缺点:不能同时进行多任务处理,需要等待进行处理,处理效率低
网友评论