天天看点

android异步消息处理机制Android异步信息处理机制

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更新。