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

  • 相关阅读:
    python三大神器之virtualenv pip, virtualenv, fabric通称为pythoner的三大神器。
    pip使用国内镜像,豆瓣、清华
    pip国内源
    Android原生(Native)C开发之四:SDL移植笔记
    libcurl使用easy模式阻塞卡死等问题的完美解决
    linux 自定义信号
    ubuntu 12.04安装telnet和ssh服务
    libcurl with telnet
    ubuntu使用ssh登入不执行.bashrc解决方法
    pthread_kill
  • 原文地址:https://www.cnblogs.com/fynnn/p/15514484.html
Copyright © 2020-2023  润新知