Handler学习

Handler的作用

1.执行计划任务,你可以在预定的实现执行某些任务,可以模拟定时器

2.线程间通信。在Android的通信启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其他线程中更新界面。

Handler学习_第1张图片

Looper的实现:

Handler学习_第2张图片

当前线程有一个Looper这样的循环在监听消息队列,这是一个死循环,主线程好像可以不用管Looper,其他逻辑代码可以照常往下走,但这个又不是而外的线程,这不是和我们学习的常理相悖么?
Looper由系统控制的循环。在我们的线程没有新开,但是在系统里面vm会有

角色描述:

1.Looper:(相当于隧道)一个线程可以产生一个Looper对象,由他来管理此线程里的MessageQueue

2.Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里,或者接收从Looper(从MessageQueue取出)所送来的消息

3.MessageQueue:(消息队列)用来存放线程放入的消息

4.线程:UI thread通常就是main thread,而Android启动程序时会替他建立一个MessageQueue

主线程就一个消息队列,不同handler实例之间不能共享消息

HandlerThread子线程的Handler可以使用子线程的消息队列

Handler操作队列,主要是在子线程操作主线程的消息队列,子线程默认是没有消息队列的

Handler是在主线程内的么?
一般是在主线程里面,但是可以控制在当前线程里面发送接受

Handler的post和sendMessage方法,使用的是一个队列还是两个队列?使用的是一个队列

子线程中建立一个handler,然后sendMessage会怎样?
默认的情况下会抛异常,如果在子线程中实例化了looper,可以正常操作

子线程建立handler,构造的时候传入主线程的Looper?
是可以的

你可能感兴趣的:(thread,UI,android,任务)