Android 面试分析Handler

Handler

handler 是Android SDK 提供给开发者方便进行异步消息处理的类,handler发送 message 其中message是由MessageQueue 队列来处理的,其中looper 在messageQuery 中取出待处理的Message 然后回调dispatchMessage方法来回调给主线程的handler,handler 主要是用来发送消息和处理消息的 其中messageQueue 是遵循先进先出原则

首先创建一个handler 的时候 Handler内部就会调用一个LooPer.myLooPer方法,看源码能知道如果Looper 为空的时候 会抛出异常 异常说明为 没有调用Looper.prepar()方法,创建完成之后还会创建一个消息队列,这个消息对列是通过looper来进行赋值的,保证Loopre 和 MessageQueue 共用一个消息队列,使用handler添加message时,源码是将message添加到消息队列中,其中消息队列是由Looper来进行管理的

Looper类主要是为每个线程开启的单独的消息循环内部是通过ThreadLocal来进行存储

Handler 可以看做是LooPer的一个接口 用来向handler指定的MessageQueue 来发送消息

在非主线程中直接New Handler() 是不可以的因为handler需要发送消息到MessageQueue 因为所在的线程中没有 消息队列 其中MessageQueue是由Looper来进行管理的,要想通过messageQueue 来发送必须的先创建Looper

你可能感兴趣的:(Android 面试分析Handler)