一、Handler的定义

主要接受子线程发送的数据, 并用此数据配合主线程更新UI。

当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭"。 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了。来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。

Handler的特点:

handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),它有两个作用:
(1)安排消息或Runnable 在某个主线程中某个地方执行;
(2)安排一个动作在不同的线程中执行。
Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新。

Handler使用步骤:
a:在主线程中实例化Handler对象,并重写handleMessage方法,处理子线程发过来的数据,数据是以Message对象进行传递
b:在子线程中使用主线程中实例化的Handler对象,调用send**或post**方法向主线程发送消息,在发送之前,数据应该封装成Message对象


Looper

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例,应用程序的主线程不断地从这个消息队例中获取消息(Looper), 然后对这些消息进行处理(Handler)

更多相关文章

  1. Android(安卓)- Handler 、AsyncTask(二)
  2. Android调用WebService系列之对象构建传递
  3. Android(安卓)HandlerThread 的使用及其Demo
  4. Appium Android(安卓)Bootstrap源码分析之启动运行
  5. Android小项目————聊天室(网络编程篇)
  6. Handler入门及操作
  7. 谜之RxJava (一) —— 最基本的观察者模式
  8. 理解Android中的引用类型
  9. android中json数据的解析

随机推荐

  1. Flink 消息聚合处理方案
  2. 自学第七十天
  3. 快来,看看spring有多烂-来自jfinaL的嘲笑
  4. Linux上,最常用的一批命令解析(10年精选)
  5. 百度大佬10分钟教会你是前端bug还是后端b
  6. 没有预热,不叫高并发,叫并发高
  7. Linux生产环境上,最常用的一套“AWK“技巧
  8. C语言学习 4.0
  9. 聊聊幂等
  10. 2021.2.5