Handler

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方法,最终得到处理。

posted @ 2021-11-05 17:45  fynnn  阅读(127)  评论(0编辑  收藏  举报