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

  • 相关阅读:
    安装vue-cli最新版后,无法使用console方法的解决办法
    使用yarn 安装 vue.js devtools(2020.1.6)
    在路由切换后 将滚动条置顶
    标签页 elementUI 激活时的颜色 怎样改 很坑爹!
    页面滚动鼠标产生动画 wow.js 在vue中
    CSS多行文本溢出隐藏,显示省略号
    ... 扩展运算符
    this的指向的一些问题
    用for循环和用for-in循环遍历数组最大的区别
    数组的indexOf、forEach、map、filter、方法的理解
  • 原文地址:https://www.cnblogs.com/fynnn/p/15514484.html
Copyright © 2020-2023  润新知