美文网首页
Handler面试问答

Handler面试问答

作者: 曾是放牛娃 | 来源:发表于2017-10-31 20:12 被阅读15次

    1、 Handler的作用

    根据源码中Handler类的注释,Handler有2个作用:

    (1) 实现线程切换,具体的,比如在非UI线程更新UI

    (2) 发送延时消息

    2、 为什么Android设计只能UI线程更新ui?

    这是由于Android对视图更新采用了单线程模型。为什么采用单线程模型,是由于视图控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可期的状态,那为什么系统不对UI控件的访问增加锁机制呢?这样做,缺点有两个:一是,锁机制会让UI的访问逻辑变得复杂;而是,锁机制会降低UI的访问效率。由于这些缺点,最简单高效的方法就是采用单线程模型来处理UI操作。这样带来的好处有:

    (1) 解决多线程并发的问题

    (2) 简化了UI的访问

    (3) 提高了UI操作的效率

    3、 Handler和Looper是一一对应的吗?Handler、Looper、MessageQueue之间的关系?

    Handler与Looper是多对一的关系,一个Looper可以对应多个Handler;Looper与Thread是一对一的关系;Looper与MessageQueue也是一对一的关系,一个MessageQueue会存在0个或多个Message。

    Handler封装了消息的发送,主要负责发送和处理消息;

    Looper内部包含一个消息队列,所有的Handler的消息都发送到这个队列,loop方法是一个死循环,不断的从消息队列取消息,有消息就处理,没有就阻塞;

    MessageQueue是一个消息队列,但是其内部数据结构是一个Message的单链表,可以添加消息、移除消息,其阻塞是通过native代码实现的;

    Message内部持有Handler,所以会交给正确的Handler处理,而不会错乱。

    4、 子线程更新UI控件的方法有哪些?

    (1) Activity.runOnUiThread

    (2) View.post

    (3) View.postDelayed

    (4) AsyncTask

    (5) Handler

    其实这几种的底层实现都是Handler。

    待续补充。。。

    相关文章

      网友评论

          本文标题:Handler面试问答

          本文链接:https://www.haomeiwen.com/subject/odkipxtx.html