handler 专题

handler 是什么 ?

handler 是 android 给我们提供用来更新 【UI】 的一套机制,也是一套消息处理的机制。我们可以发送消息,也可以通过它处理消息

为什么要用 handler ? 不用可以吗?

不用是不行的。
Android 在设计的时候,就封装了一套消息的创建、传递、处理者3个完整的机制,如果不遵循这样的机制就没有办法更新 【UI】 信息的,就会抛出异常信息。

handler 怎么用?

  1. sendMessage
  2. sendMessageDelayed
  3. post(Runnable)
  4. postDelayed(Runnable,long)

以上四种方式,原理都是使用 handler 。

android 为什么要设计只能通关 handler 机制更新 UI ?

最根本的目的就是为了解决多线程并发问题。

假设在一个 Activity 当中,有多个线程去更新 UI,而且都没有加锁机制,那么会产生什么样子的问题呢?————更新界面错乱
如果对更新 UI 的操作都进行加锁处理的话又会产生什么样子的问题?———— 性能下降

处于对以上目的问题的考虑,android 给我们提供了一套更新 UI 的机制,我们只需要遵循这样的机制就可以了。

根本不用去关系多线程的问题,所以更新下 UI 的操作,都是在主线程的消息队列当中去轮询处理的

handler 的原理是什么

handler 封装了消息的发送(主要包括发送给谁)

  1. 内部包含一个消息队列也就是 MessageQueue,【所有】的 Handler 发送的消息多走向这个消息队列
  2. Looper.loop() 方法,就是一个死循环,不断的从 MessageQueue 取消息,如有消息就出来,没有就【堵塞】

MessageQueue

就是一个消息队列,可以添加消息,并处理消息

handler 也很简单,内部会跟 Looper 进行关联,也就是说在 handler 的内部可以找到 Looper ,找到了 Looper 也就找到了,MessageQueue,在 Handler 中发送,其实就是向。。。


总结: handler 负责发送消息,looper 负责接收 handler 发送的消息,并直接把消息回传给 handler 自己,messageQueue 就是一个存储消息的容器

如何实现一个和线程相关的 handler

HandlerThread thread = new HandlerThread("thred name");
thread.start();

Handler handler = new Handler(thread.getLooper());

HandlerThread 又是什么

如何在主线程给子线程发送消息呢

android 中更新 UI 的几种方式

activity 中的 runOnUiThread
handler 中的 post
handler 中的 sendMessage
view 中的 post

非 UI 线程真的不能更新 UI 吗

使用 handler 时候遇到的问题(异常)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值