美文网首页
子线程更新UI之handler.post理解

子线程更新UI之handler.post理解

作者: 水固态中 | 来源:发表于2018-01-14 23:35 被阅读0次
    Handler handler;
    new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                mTest.setText("post");//更新UI
                            }
                        });
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();

    这儿的post并不是新开启的子线程,存在的子线程只有一个,即为new的Thread,那么为什么我们在其中可以settext做更新UI的操作呢? 其实post方法post过去的是一段代码,相当于将这个Runable体放入消息队列中,那么looper拿取的即为这段代码去交给handler来处理,其实也相当于我们常用的下面这段代码:

    private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 0:
                        mTest.setText("handleMessage");//更新UI
                        break;
                }
            }
        };

    看起来熟悉吧,就是用这个Runnable体代替了上面这一大段代码,当然,我们的post方法就可以执行UI操作了。

    平常情况下我们一个activity有好多个子线程,那么我们都会采用上面这种handleMessage(msg)方式,然后case 0:case 1:等等,但是当我们只有一个子线程时呢,用post反而比上面一大串代码轻便了不少,何乐而不为呢?

    相关文章

      网友评论

          本文标题:子线程更新UI之handler.post理解

          本文链接:https://www.haomeiwen.com/subject/ruoloxtx.html