android异步消息处理机制

原创 2015年11月19日 20:40:04

Android异步信息处理机制

我们都知道android的ui更新操作都是在主线程执行的,但是很多时候我们都需要在子线程

中执行一些费时的操作,以获取我们所需要的变更数据。很多刚入门的同学都容易犯的一个错误就是在子线程试图去更新Ui控件,这样做是被android禁止的,所以会出现崩溃的现象。

Android的异步信息处理机制就是专门解决这个问题而诞生的。对于这个异步机制我们只需要知道四个对象即可,即Message,Handler,Looper,MessageQueue。它们的功能分别如下:

Message:故名思意就是消息,这个消息是可以携带对象的,我们可以通过message.what制定当前操作的类型,通过message.obj指定对象。

Handler:我们一般初始化的方法如下:

      Handlerhandler = newHandler() {

                    public voidhandleMessage(android.os.Message msg) {

                           Objectobj=msg.obj;//一般保存要传递的对象

                           Intwhat=msg.what;//获取到需要操作的类型

                           Switch(what)

                           {

                                  case0:break;//执行对应的操作

                                  case1:break;

                           }

                   

                    };

             };

当我们需要发送消息时,可以这样:

Message msg=new Message();

Msg.obj=new object();

Handler.sendMessge(msg);

整个消息的传递过程稍后解释。

MessageQueue:是一个消息队列,这里边存放了很多message,它们是以队列的方式排列的。消息会一个一个排在这里边。

Looper:就像是一个管家,他负责把messageQUeue里边的message一个一个取出来,并传递给handler,调用handleMessage方法,就实现了一个消息的异步传递。

 

整个过程是这样的。在子线程中执行完数据的获取操作,就给handler发送消息,此时,这个message会在messageQueue里边排队,Looper 检测到有message就会取出来,唤醒handle的handlerMessage方法,然后在这个方法里边就实现ui刷新。整个过程就成功的从一个子线程发送一个信号到主线程,然后主线程实现ui更新。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android异步消息处理机制完全解析,带你从源码的角度彻底理解

我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Messag...
  • sinyu890807
  • sinyu890807
  • 2013年08月22日 14:02
  • 85015

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】很多人面试肯定都被问到过,请问Andro...
  • lmj623565791
  • lmj623565791
  • 2014年08月07日 09:17
  • 194349

异步消息处理机制总结(AsynTask和handler)

写了几篇博客,感觉挺充实的,虽然技术含量不高,其中错误肯定也不少,理解并不深入,但是也算是对自己学习一步一个脚印的交代,毕竟自己是一个本科大三狗,如果能坚持写写博客,研究下技术,将来也能增强 实力为自...
  • ayo464434914
  • ayo464434914
  • 2015年10月29日 20:47
  • 2585

Android多线程及异步任务消息处理机制 一 Handler的使用

  • 2014年08月26日 12:39
  • 3.21MB
  • 下载

Android异步消息处理机制解析

**一.概述** 由于Handler总是依附于创建时所在的线程,比如我们的Handler是在主线程中创建的,而在子线程中又无法直接对UI进行操作,于是我们就通过一系列的发送消息、入队、出队等环节,最...
  • Obama_Li
  • Obama_Li
  • 2015年08月12日 16:43
  • 250

Android Handler 异步消息处理机制的妙用 创建强大的图片加载类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自【张鸿洋的博客】上一篇博客介绍了Android异步消息处...
  • lmj623565791
  • lmj623565791
  • 2014年08月11日 00:47
  • 59469

Android Handler 异步消息处理机制 《第一行代码》

参考:《第一行代码》第9章 Android不允许在子线程中进行UI操作的,而我们有些时候,必须在子线程里去执行一些耗时任务,然后根据任务的执行结果来更新相应的UI控件。 针对这种情况,...
  • u012005313
  • u012005313
  • 2015年09月21日 19:29
  • 780

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转自张鸿洋:http://blog.csdn.net/lmj623565791/article/details/38377229/ 转载请标明出处:http://blog.csdn....
  • qq_24531461
  • qq_24531461
  • 2017年01月09日 11:08
  • 96

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转自:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】 很多人面试肯定都被问到过,请问Androi...
  • hongensq
  • hongensq
  • 2015年08月10日 10:02
  • 136

Android异步消息处理机制的源码分析

本文是对Android异步消息机制的源码进行全面解析,希望通过源码的解析更加了解Handler的内部机制。...
  • dongxianfei
  • dongxianfei
  • 2016年08月03日 11:29
  • 396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android异步消息处理机制
举报原因:
原因补充:

(最多只允许输入30个字)