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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值