安卓子线程更新ui

Guooo
2017-02-20 / 0 评论 / 2,470 阅读 / 正在检测是否收录...

子线程中更新ui

activity的onCreate()方法和点击事件这些都是运行在主线程(也叫Ui线程)里的
主线程用来更新UI界面

只有主线程可以修改应用程序的UI(比如设置ImageView的图片),其他线程(子线程)修改界面是不允许的。所以如果子线程需要更新需要使用Handler发送消息
  1. 在主线程里 创建一个Handler(消息处理器)

    //这里导包需要导入andoird.os中的handler包
     private Handler handler = new Handler(){
        //接受处理消息的方法
        //在这里ctrl+o可以快速重写方法,选择handleMessage
        @Override
        public void handleMessage(Message msg){
            super.handleMessage(msg);
        }
    };
    
  2. 在子线程发送消息到主线程

    Message msg = new Message();
    handler.sendMessage();
    
  3. 调用handler的handlerMeaasge方法处理消息,运行在主线程,更新ui界面

    取出来消息的数据,更新界面
    

Handler简单工作原理

Handler简单工作原理

这个图片在很好的说明了Handler中的handleMessage方法的工作原理。但是这个图有个问题,作者把handleMessage画到了主线程的外面,其实handleMessage应该是要在主线程里面,这样才能通过handleMessage来操作主线程的ui

消息机制是如何工作的,Looper,message,handler

Looper轮询器

activity只要已创建,操作系统就会给我们准备Looper轮询器,可以通过getMinaLooper()获取,Looper是个死循环。
MessageQueue 消息队列
handler发送和处理消息
Message对象存放消息的具体信息
0

评论 (0)

取消