没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
消息系统处理框架
Android 应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌
参考了 Windows 的消息循环机制,也在 Android 系统中实现了消息循环机制。
Android 通过 Looper、Handler 来实现消息循环机制,Android 消息循环是针对线程的
(每个线程都可以有自己的消息队列和消息循环)。
本文深入介绍一下 Android 消息处理系统原理。
Android 系统中 Looper 负责管理线程的消息队列和消息循环,具体实现请参考
Looper 的源码。 可以通过 Loop.myLooper()得到当前线程的 Looper 对象,通过
Loop.getMainLooper()可以获得当前进程的主线程的 Looper 对象。
前面提到 Android 系统的消息队列和消息循环都是针对具体线程的,一个线程可
以存在(当然也可以不存在)一个消息队列 和一个消息循环(Looper),特定线程的消息只
能分发给本线程,不能进行跨线程,跨进程通讯。但是创建的工作线程默认是没有消
息循环和消息队列的,如果想让该线程具有消息队列和消息循环,需要在线程中首先
调用 Looper.prepare()来创建消息队列,然后调用 Looper.loop()进入消息循环。如下
例所示:
classLooperThreadextendsThread {
publicHandler mHandler;
publicvoidrun() {
Looper.prepare();
mHandler=newHandler() {
publicvoidhandleMessage(Message msg) {
//process incoming messages here } };
Looper.loop();
} } 这样你的线程就具有了消息处理机制了,在 Handler 中进行消息处理。
Activity 是一个 UI 线程,运行于主线程中,Android 系统在启动的时候会为
Activity 创建一个消息队列和消息循环(Looper)。详细实现请参考 ActivityThread.java
文件。
Handler 的作用是把消息加入特定的(Looper)消息队列中,并分发和处理该消息队
列中的消息。构造 Handler 的时候可以指定一个 Looper 对象,如果不指定则利用当前
线程的 Looper 创建。详细实现请参考 Looper 的源码。
一个 Activity 中可以创建多个工作线程或者其他的组件,如果这些线程或者组件把他
们的消息放入 Activity 的主线程消息队列,那么该消息就会在 主线程中处理了。因为
主线程一般负责界面的更新操作,并且 Android 系统中的 weget 不是线程安全的,所
以这种方式可以很好的实现 Android 界 面更新。在 Android 系统中这种方式有着广泛
的运用
那么另外一个线程怎样把消息放入主线程的消息队列呢?
答案是通过 Handle 对象,只要 Handler 对象以主线程的 Looper 创建,那么调用
Handler 的 sendMessage 等接口,将会把消息放入队列都将是放入主线程的消息队列。
并且将会在 Handler 主线程中调用该 handler 的 handleMessage 接口来处理消息。
这里面涉及到线程同步问题,请先参考如下例子来理解 Handler 对象的线程模型:
1、首先创建 MyHandler 工程。
资源评论
bi_bao
- 粉丝: 2
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功