面试经典题Handler机制回答

Handler机制的问题
相信很多人都遇到过这样的面试题。
那为什么需要Handler呢,你们有反问过自己 || 面试官吗?
看完这篇文章相信你下次去面试就能好好的刷一下面试官的气焰了(装逼),毕竟很多公司本身没有android开发人员,面试题都是网上找的,或者理解不深。

  1. 为什么要有Handler
  2. 从源码角度理解该机制

本文为楼主原创,转载请表明出处:http://blog.csdn.net/Suma_sun/article/details/51427312

Handler的由来

首先为什么需要Handler呢? ——因为UI更新只能在UI线程。
那为什么只能在UI线程更新UI呢?——因为Android是单线程模型。
那为什么Android是单线程模型?
那是因为如果任意线程都可以更新UI的话,线程安全问题处理起来会相当麻烦复杂,所以就规定了Android是单线程模型,只允许在UI线程更新UI操作。

Handler机制

Handler机制有几个核心类:Handler、Looper、Message、MessageQueue。
Handler机制是一个典型的生产者消费者模式——多个生产者,一个消费者,该模式是处理线程安全的一个经典模式,如果不了解的请自行查阅相关资料,不懂也没关系,并不影响接下来的内容。

关联Looper
首先我们常用的构造方法

/**
     * Default constructor associates this handler with the        {@link Looper} for the current thread.
     *
     * If this thread does not have a looper, this handler won't be able to receive messages
     * so an exception is thrown.
     */
    public Handler() {
        this(null, false);
    }

默认的构造器 new Handler() 会从当前线程获取Looper关联。
如何关联呢?

public Handler(Callback callback) {
        this(callback, false);
    }

public Handler(Looper looper) {
        this(looper, null, false);
    } 

public Handler(Looper looper, Callback callback) {
        this(looper, callback, false);
    } 

下面这个构造是所有传入null Looper的归属

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值