安卓子线程更新ui

in Android with 0 comment

子线程中更新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对象存放消息的具体信息

Responses