概述

android规定不能在子线程中对ui进行操作,但开发中经常会遇到子线程经过一些逻辑操作之后要马上对ui进行操作的情况,传统方法是执行Handler,使执行进程由子线程进入主线程中,然后就可以对ui进行操作:

mButton.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        new Thread(new Runnable() {              @Override            public void run() { // 子线程                Message message = new Message();                Bundle bundle = new Bundle();                bundle.putString("ChangeUI", "Handler改变了ui");                message.setData(bundle);                handler.sendMessage(message);            }        }).start();    }});
private Handler handler = new Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        Bundle bundle = msg.getData();        String str = bundle.getString("ChangeUI");        mUiTextview.setText(str);    }};

为了改变ui就要写这么多代码,非常不便捷,其实Activity中有个方法:runOnUiThread 就是为了更便捷的执行子线程时对ui进行操作。

mButton2.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        new Thread(new Runnable() {            @Override            public void run() { // 子线程                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        mUiTextview.setText("runOnUiThread改变了ui");                    }                });             }        }).start();    }});

有效代码是这部分:

runOnUiThread(new Runnable() {    @Override    public void run() {        mUiTextview.setText("runOnUiThread改变了ui");    }}); 

是不是快捷多了。

那么 runOnUiThread 为什么可以在子线程中执行ui操作?

由 runOnUiThread 源码很容易找到答案:

Android Activity api 详解 - runOnUiThread_第1张图片

由源码可知:
当前不是ui线程(即不是主线程)时,把 action 抛进 Message 队列等待主线程到来;当前是ui线程(即是主线程)时就执行ui操作。

源码点击此处下载

更多相关文章

  1. Android之怎么操作文件(读写以及保存到sdcard)
  2. 1.活用Android线程间通信的Message机制
  3. 在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作
  4. Android使用SQLiteDatabase操作SQLite数据库

随机推荐

  1. 在Android2.2模拟器上安装Android(安卓)M
  2. android的onCreateOptionsMenu()创建菜单
  3. android中的apk签名
  4. Android经典应用程序开发
  5. Android(安卓)OOM内存溢出解决方案之一
  6. Android(安卓)的开源电话/通讯/IM聊天项
  7. android service 学习
  8. 安卓 Android之开发简单小应用(一)
  9. Android开发周刊 第四期
  10. 用kotlin打印出漂亮的android日志(三)—