1.简单描述下 Handler 的用途
Android为了线程安全,并不允许在UI线程外操作UI,如果遇到耗时任务,需要额外创建子线程来处理这些耗时任务,做界面刷新就需要通过Handler来通知UI组件更新。
2.Handler 机制主要涉及那几个类,说出这些类的常用方法以及这些方法是做什么的
四个:Handle,Looper,Message,MessageQueue
Handler.sendMessage(Message) 发送信息压入队列。
Handler.handleMessage(Message msg) 处理消息,通知主线程作出相对应的 UI 工作。
Handler.obtainMessage()获取消息
Handler.dispatchMessage()消息传递给Handler的handleMessage方法
MessageQueue.enqueueMessage向消息池投递消息
MessageQueue.next取走消息池的消息
Looper.loop()将消息分发给目标处理者
Looper.prepare()创建Looper对象
3.一个线程中最多有多少个Handler,Looper,MessageQueue
每个线程只能够有一个Looper,一个MessageQueue,多个Handler
4.通常用什么方法去获取一个 Message 对象
Handler.obtainMessage()获取消息
5.Message 类主要包含什么属性,介绍下这些属性的用途
arg1 int类型 用来存放整型数据
arg2 int类型 用来存放整型数据
what int类型 用来保存消息标示
when long类型 用来保存消息触发时间
obj Object类型 是Object类型的任意对象
callback Runnable类型 回调方法
target Handler类型 回调方法
6.简单介绍下 Handler 机制的实现原理
首先在UI线程创建了一个Handler实例对象,对handleMessage方法进行重写,在handleMessage方法中通过参数msg来写接受消息过后Ui线程的逻辑处理,接着创建子线程,在子线程中需要更新UI的时候,新建一个Message对象,并且将消息的数据记录在这个消息对象Message的内部,比如arg1,arg2,obj等,然后通过前面的Handler实例对象调用sendMessge方法把这个Message实例对象发送出去,之后这个消息会被存放于MessageQueue中等待被处理,此时Looper正在不停的把MessageQueue存的消息取出来,通过回调dispatchMessage方法将消息传递给Handler的handleMessage方法,最终消息会被Looper从MessageQueue中取出来传递给handleMessage方法,最终得到处理。