Android 的消息队列模型

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转自:http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038469.html

Android是参考Windows的消息循环机制来实现Android自身的消息循环的。 
Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。 
Android系统中,Looper负责管理线程的消息队列和消息循环。我们可以通过Loop.myLooper()得到当前线程的Looper对象,通过Loop.getMainLooper()可以获得当前进程的主线程的Looper对象。 
一个线程可以存在(当然也可以不存在)一个消息队列和一个消息循环(Looper)。 
Activity是一个UI线程,运行于主线程中,Android系统在启动的时候会为Activity创建一个消息队列和消息循环(Looper)。 
Handler的作用是把消息加入特定的(Looper)消息队列中,并分发和处理该消息队列中的消息。构造Handler的时候可以指定一个Looper对象,如果不指定则利用当前线程的Looper创建。 
Activity、Looper、Handler,Thread的关系如下图所示:

image

一个Activity中可以创建多个工作线程或者其他的组件,如果这些线程或者组件把他们的消息放入Activity的主线程消息队列,那么该消息就会在主线程中处理了。

因为主线程一般负责界面的更新操作,并且Android系统中的widget不是线程安全的,所以这种方式可以很好的实现Android界面更新。在Android系统中这种方式有着广泛的运用。

那么一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handle对象,只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。

更多Android消息队列的信息请参看: http://my.unix-center.net/~Simon_fu/?p=652

下面这个图从另外一个角度描述了他们的关系:

image

参考资料:

Android异步加载图像小结 
http://blog.csdn.net/sgl870927/archive/2011/03/29/6285535.aspx

深入理解Android消息处理系统——Looper、Handler、Thread

http://my.unix-center.net/~Simon_fu/?p=652

Android线程模型(Painless Threading) 
http://android.group.iteye.com/group/blog/382683

android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime) 
http://lepeng.net/blogger/?p=21

Android – Multithreading in a UI environment 
http://www.aviyehuda.com/2010/12/android-multithreading-in-a-ui-environment/

Android中的Handler, Looper, MessageQueue和Thread 
http://www.cnblogs.com/xirihanlin/archive/2011/04/11/2012746.html

Android Runnable 
http://blog.csdn.net/michaelpp/archive/2010/06/30/5704682.aspx

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

Android 小技巧—一个特别简单的队列功能

身为一名ui仔,不光要会画ui,也有可能接触一些其他的需求,就比如我做直播的时候,就需要做礼物的队列播放,用户送礼,然后客户收到消息,然后一次播放礼物动画,这个需求很简单,自定义一个view并且里面有一个队列就可以搞定,但是如果要播放不同类型的内容,如果再去改这个ui,耦合度就会越来越大,那么这个view的定义就变了,那就太不酷啦,所以要将队列和ui拆开,所以我们要实现一个队列功能,然后可以接受不同类型的参数,然后依次执行。

m0_70748458的博客 659

Android 消息队列

Android 消息队列 定义一个枚举类TaskPriority,定义任务的优先级 // 优先级分为3种,如注释所示,他们的关系:LOW < DEFAULT < HIGH public enum TaskPriority { LOW, //低 DEFAULT,//普通 HIGH, //高 } 队列任务执行时间确定和不确定两种情况的实现策略 针...

初心一点的专栏 2718

android动画送礼物,Android开发仿映客送礼物效果

这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图。需求分析可以看到整个动画有几部分组成,那我们就把每个部分拆分出来各个击破。1.要显示那些内容以及内容间的位置关系?可以看到我们要显示用户头像,昵称,礼物图标以及数量。所以这里我选择用FrameLayout来作为根布局。2.需要哪些动画以及动画的执行顺序?a.首先是整体从左到右飞入并有一个回弹(translationX +...

weixin_33413018的博客 917

android 斗鱼礼物动画,GitHub - Yuphee/RewardLayout: 仿斗鱼直播送礼物和连击效果动画...

RewardLayout仿斗鱼送礼物效果本项目旨在提供实现参考,交流学习。关于我,欢迎关注有问题及时issue pr 或 email如果对你有点帮助的话,点个star哦~Screenshots效果展示: Getting startedAdd it in your root build.gradle at the end of repositories:allprojects {repositori...

weixin_32009069的博客 769

Android消息队列模型

Google官方给Handler的解释如下: A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread

Dylan Dev Blog 950

android消息队列模型,Android消息队列模型

Android是参考Windows的消息循环机制来实现Android自身的消息循环的。Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。Android系统中,Looper负责管理线程的消息队列和消息循环。我们可以通过Loop.myLooper()得到当前线程的Looper对象,通过Loop.getMai...

weixin_32658257的博客 362

android消息队列模型,Android 消息队列机制

在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤:创建Looper Looper.prepar()创建Handler启动消息循环Looper.loop()通过这3步,基本就建立好了 Android 的多线程消息通信机制:HandlerMessageQueueLooperMessage这几者可谓是你中有我,我中有你的存在。通过 Handler 发送 Message 到 Loope...

weixin_29124423的博客 1080

Android消息队列模型介绍

转载自http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038469.html Android消息队列模型 Android是参考Windows的消息循环机制来实现Android自身的消息循环的。  Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列

ni357103403的博客 552

android 消息队列封装,Android 消息队列模型详解及实例

Android 消息队列模型详解及实例Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程),创建的工作线程默认是没有消息循环和消息队列的。如果想让该线程具有消息队列和消息循环,并具有消息处理机制,就需要在线程中首先调用Looper.prepare...

weixin_39622289的博客 398
上一篇: Android软件开发之webView.addJavascriptInterface循环渐进【一】
下一篇: 总结Android中TabActivity 的使用方法
Cesborn
博客等级 码龄16年 2粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值