zoukankan      html  css  js  c++  java
  • 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方法,最终得到处理。

  • 相关阅读:
    【C++注意事项】1 数据类型及类型转换
    【万里征程——Windows App开发】动态磁贴
    背包问题
    Fence Repair
    Saruman's Army
    字典序最小问题——Best Cow Line
    区间调度问题
    硬币问题
    数据库查询优化的一些总结
    关于减少BUG的思考
  • 原文地址:https://www.cnblogs.com/fynnn/p/15514484.html
Copyright © 2011-2022 走看看