android 学习 在子线程中更新UI

根据书上P345的说法,更新UI必须在主线程中进行

然后举了一个例子,进行一个按键控制,然后在按键的事件中new一个线程,然后里面text.setText("Nice to meet you");

然后程序就报错了。


此时,如何操作呢?

这就是android提供的异步消息处理机制出场了

 

先要来一个UPDATE_TEXT的常量为1;

 

然后new一个handler()具体操作

 

private Handler handler=new Handler(){

        public  void handleMessage(Message msg){

        switch(msg.what){

            case: UPDATE_TEXT:text.setText("nice to meet you");

             break;

             default:

             break;

 

}

}

}

按键事件里面需要new一个Thread

在里面new一个message

给message.what里面赋值为UPDATE_TEXT

然后将message送到handler

 

new Thread (new Runnable(){

         Message message=new Message();

         message.what=UPDATE_TEXT;

         handler.sendMessage(message);

}).start();

主要是handler这个是在主线程中,从子线程中传出数据来,然后在handler中处理,就避免了在子线程中进行UI 操作了。

 

解析异步消息处理机制

四个部分 Message Handler MessageQueue Looper

Message在线程之间传递消息,除了what字段,还有arg1、arg2字段携带整型,obj携带Object对象

Handler 用于发送和处理消息  发送 sendMessage()  会传送到handler 的handleMessage的方法中处理

MessageQueue 存放等待处理的消息

Looper 有一个loop方法,从MessageQueue中不断取出消息来处理

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值