Handler
Handler:
- 概述: Handler负责取出、发送并且处理Message,每个Handler实例都与
创建它的线程以及该线程的MessageQueue相关联。默认的Handler是同步的,也可以扩
展android.os.Handler构造异步Handler,即异步发送消息。 作用:
- 作用一:发送消息或Runnable 在未来某个时间点发送消息或Runnable
- post: 排序Runnable,以便在接收时由MessageQueue调用。
- sendMessage: 排序包含Bundle数据的message,以便被handlerMessage
方法调用。
- 作用二:线程切换 将action(活动)enqueue(排队),并在其它线程执行。
- 作用一:发送消息或Runnable 在未来某个时间点发送消息或Runnable
创建Handler:
- 方法一:实现Callback: 通过实现Callback创建的Handler,其内部默认使用当前
线程的Looper(测试过)。 - 其他方法: 请参阅Handler的构造器。
- 方法一:实现Callback: 通过实现Callback创建的Handler,其内部默认使用当前
数量: 一个线程中可以实例化多个Handler,但是只能实例化一个与之相关的Looper。
测试过,在主线程中,通过扩展Handler以及实现Callback方法创建的Handler,它们
在内存中分配的地址不同,但是通过这两个Handler获取的Looper在内存中的地址是
相同的。
- 概述: Handler负责取出、发送并且处理Message,每个Handler实例都与
Looper:
- 概述: 为线程运行消息循环的类,线程默认没有和Looper关联,要创建一个Looper
,先在线程运行loop的地方调动looper.prepare(),然后调用looper.loop()处理
消息,在调用looper.prepare()(即创建Looper)的时候会创建一个MessageQueue,
Looper负责循环,MessageQueue负责取出消息,所有在Looper中Message被不停的取
出来。 - 消息调度: 在Looper.loop()方法中会执行dispatchMessage(msg),进行
消息的调度。
- 概述: 为线程运行消息循环的类,线程默认没有和Looper关联,要创建一个Looper
MessageQueue:
- 概述: Message并不会直接添加到MessageQueue中,而是通过与Looper关联的
Handler。
- 概述: Message并不会直接添加到MessageQueue中,而是通过与Looper关联的
Handler机制总结:
- Handler工作机制: Looper是一个消息循环,不断通过MessageQueue
取出Message,并通过与该Looper关联的Handler向外部发送Message,并通过
Handler的Callback回调处理该Message。
- Handler工作机制: Looper是一个消息循环,不断通过MessageQueue
优缺点: (摘自网络)
- 优点: (感觉像废话,没觉得)
- 结构清晰,功能定义明确
- 对于多个后台任务时,简单,清晰
- 缺点: (同样觉得是在扯淡)
- 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
- 优点: (感觉像废话,没觉得)
Demo下载地址: