Android--Handler(承担着子线程和主线程之间的通信)
来源:互联网 发布:淘宝助手怎么下架宝贝 编辑:程序博客网 时间:2024/04/27 16:02
Handler类出现的背景:
当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发,
比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,
例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中
的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭"。 这个时候
我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的, 也就是说,
更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了。,来解决这个复杂的问题 ,
由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受
子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主
线程进行更新UI。
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,
而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的
处理。 这种机制通常用来处理相对耗时比较长的操作。
主要特点:
1、传递Message。用于接收子线程发送的数据,并用此数据配合主线程更新UI
在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,
那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法
处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的
消息队列中。类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法
处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的
消息队列中。类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法
来接收Message并进行相关操作。
2. 传递Runnable对象。用于通过Handler绑定的消息队列,安排不同操作的执行顺序。
Handler对象在进行初始化的时候,会默认的自动绑定消息队列。利用类post方法,可以将Runnable对象发送到消息队列中
按照队列的机制按顺序执行不同的Runnable对象中的run方法。
Message 可以传递的参数有:
1. arg1 arg2 整数类型,是setData的低成本替代品。传递简单类型
2. Object 类型 obj
3. what 用户自定义的消息代码,这样接受者可以了解这个消息的信息。每个handler各自包含自己的消息代码,
所以不用担心自定义的消息跟其他handlers有冲突。
0 0
- Android--Handler(承担着子线程和主线程之间的通信)
- Android之用Handler实现主线程和子线程互相通信以及子线程和子线程之间的通信
- handler 主线程与子线程之间的通信
- Android学习笔记--Handler主线程与子线程之间的通信
- 内部通信:主线程和子线程之间的通信
- Android使用Handler实现子线程与子线程、主线程之间通信
- Android主线程、子线程通信(Thread+handler)
- Android主线程、子线程通信(Thread+handler)
- Android主线程、子线程通信(Thread+handler)
- Android主线程、子线程通信(Thread+handler)
- Android主线程、子线程通信(Thread+handler)
- Android子线程主线程之间的通信
- Android主线程与子线程之间的通信
- Android主线程与子线程之间的通信
- ArrayList 和数组之间的一些转换 Handler的主线程与子线程通信 内部类的使用
- ArrayList和数组之间的一些转换 Handler的主线程与子线程通信 内部类的使用
- Handler,Looper用法和主线程子线程间通信
- android 主线程和子线程之间的消息传递
- Highways POJ 1751 【Prim || Kruscal】
- POJ3045 Cow Acrobats(贪心)
- linux oracle 11g创建表空间和授权用户
- hdu 5373 The shortest problem (模拟)
- oop_day04_继承、重写_20150812
- Android--Handler(承担着子线程和主线程之间的通信)
- 《基于BootStrap3的JSP项目实例教程》第2讲
- poj 2349Arctic Network
- 目标文件、ELF文件的一点小总结 《程序员的自我修养》·笔记
- 多线程下载的原理
- ios的两种传值方式
- HttpUrlConnection
- mybatis 自定义返回值
- HierarchyViewer源代码理解(二)