Handler

本文探讨了Handler、Looper、MessageQueue和Thread在Android消息机制中的作用和关系。Handler作为消息的生产者,负责发送消息;MessageQueue作为消息队列,存储消息;Looper负责循环取出消息并分发给对应的Handler处理。此外,文章还讨论了Handler如何导致Activity内存泄漏,以及HandlerThread的作用。
摘要由CSDN通过智能技术生成

问题:

  • Handler是什么?作用是什么?
  • Handler、Loop、MessageQueue、Thread各自的作用,和他们之间的关系。
  • 多个Handler实例发送消息时,为什么是当前Handler收到,而不是其他Handler收到
  • Looper.loop()为什么不阻塞主线程
  • 绘制、点击、Activit生命周期和Handler的关系
  • Handler.post()、Handler.handleMessage分别执行在什么线程
  • Message是如何发送的。
  • Handler导致如何Activity泄漏
  • HandlerThread 有什么作用 ## handler是什么? 作用是什么? 我们讲Handler、Loop、MessageQueue等类的时候,最需要思考的一个问题是这些类是什么,作用是什么?

是什么?
个人理解,Handler系列类可以看成是简单的Java类,遵循java的运行时标准。
Handler可以认为是生产者、消费者模式中的生产者。Loop为消费者。MessageQueue是产品库存。
当这一套机制运用到android的GUI中时,就代表了我们所熟知的应用的主线程。当然,这一套机制也可以用于需要循环处理消息的地方。可以在源码中搜索Looper.prepare()方法,可发现android系统中还有97处使用这种方式来进行消息的生产与消费。

屏幕快照 2017-04-16 下午10.36.07

作用?
发送消息。
网上有说可以用于线程运行,个人觉得这个描述不准确,可以由如下源码得知,发送的Runnable也是被封装为消息由Looper消费掉的。

Handler.java

public final boolean post(Runnable r){
    return  sendMessageDelayed(getPostMessage(r), 0);
}

重点看下getPostMessage()方法

private static Message getPostMessage(Runnable r) {
   Message m = Message.obtain();
   m.callback = r;
   return m;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值