Android:在子线程中更新UI的三种方式

①使用Activity中的runOnUiThread(Runnable)

②使用Handler中的post(Runnable)

    在创建Handler对象时,必须先通过Context的getMainLooper()获取到主循环器(main looper)

    例:new Handler(getMainLooper()).post(action)

③使用Handler中的sendMessage(Message)

    例:

          1.先创建Handler对象

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        //更新UI的操作
            String text = (String) msg.obj;
            Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
        }
    };

          2.通过Handler发送Message

  Message msg = handler.obtainMessage();
  msg.obj = "上下文包装器\nContext Wrapper";
  handler.sendMessage(msg);

            其中,handler.obtainMessage()比直接创建Message(new Message())更有效率

            也可替换为Message.obtain()

总结:

          ①最简便,但是依赖于Activity

          ②稍复杂,与①类似,依赖于Context

          ③最复杂,但是不依赖于上下文

猜你喜欢

转载自www.cnblogs.com/buyishi/p/9330675.html