Android Thread Looper Handler 关系
来源:互联网 发布:驾校模拟驾驶软件 编辑:程序博客网 时间:2024/04/29 10:37
Android经常用到Thread和Handler,其中还涉及到另一个于消息队列(MessageQueue)相关的类Looper。
今天在这里顺便把这几个类的定义和之间的关系打理一下。
先看源码中的注释
Thread,A Thread is a concurrent unit of execution
线程是一个并发的执行单位。
Looper,Class used to run a message loop for a thread.
维护线程的消息循环类。
Handler,A Handler allows you to send and process Message and Runnable
objects associated with a thread's MessageQueue。
向消息队列发送消息(Runnable object),或者执行消息队列的消息(Runnable object).
这三者之间的关系:
一、Handler和Looper关系
区别:
两者都有MessageQueue打交道,但是Handler是向消息队列发送消息SendMessage(queue.enqueueMessage),而Looper是从取出消息(queue.next)。
联系:
1、Handler依赖Looper,每一个Handler必然有一个mLooper的成员变量。他的MessageQueue就是获取的Looper的消息队列,在构造函数中mQueue = looper.mQueue,即他们共享一个消息队列。
2、Looper取出消息在执行消息时候,实际上是运行的Handler的函数体。因为每一个Message类都有一个handler的参数(看Message定义)。
Looper在取出消息执行的时候,调用的就是这个Handler的HandleMessage()函数。
具体的步骤如下:Looper在Loop函数中,取出消息Message,然后调用该消息对应Handler的dispatchMessage函数,即Handler的handlerMessage函数。
二、Looper和Thread关系
Looper依赖Thread,Looper只是一个消息循环体,它空有一段代码。只有Looper的代码跑在Thread中,才是一个真正的消息循环。(这点如同学习操作系统的进程和函数差不多,其实也就是那么回事儿)
对于一个Android而言,每一个界面都有一个默认的Thread、消息循环体Looper和Handler。
调用new Handler()可以获得当前线程的Handler
调用Looper.myLooper()可以获得当前线程的Looper。
- Android Thread Looper Handler 关系
- Android Thread Looper Handler 关系
- Android Thread Looper Handler 关系
- Handler Looper Messagequeue Thread关系
- android Thread HandlerThread Looper Message MessageQueue Handler的关系
- android Thread HandlerThread Looper Message MessageQueue Handler的关系
- Android中的Thread、Looper、Handler之间的关系
- Android中的Handler,Looper,MessageQueue以及Thread的关系
- Android中的Handler, Looper, MessageQueue和Thread的关系
- Android中的Handler, Looper, MessageQueue和Thread.关系
- android Thread HandlerThread Looper Message MessageQueue Handler的关系
- android handler, thread and looper
- Android之Looper+Thread+handler
- Android OS--Looper、Thread、Handler
- 理解Handler、Looper、MessageQueue、Thread关系?
- Handler,Looper,Thread之间的关系
- Handler,Thread,Looper之间关系小结
- 理解Handler、Looper、MessageQueue、Thread关系
- Ubuntu 10.10 设置firefox字体
- 监测桥梁的无线智能传感器网络
- (转)CRectTracker类的使用
- unix 和 dos 中换行的区别
- POJ 3187 Backward Digit Sums next_permutation()使用
- Android Thread Looper Handler 关系
- 在应用程序中加入调试窗口
- linux 客户端 Socket 非阻塞connect编程
- Sonic Heroes组队必杀
- 根据计算机名称获得ip地址
- objective-c 特性快速一覽表
- Sonic Heroes- game doohickey
- 双链表
- Sonic Heroes-作弊工具大集结