我是靠谱客的博主 舒服期待,最近开发中收集的这篇文章主要介绍Android在子线程中更新UI的三种方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

新建一个工程
放一个按钮进去,运行如下
在这里插入图片描述

1.使用runOnUiTherad()方法
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_button = (Button) findViewById(R.id.button);
        tv_text = (TextView) findViewById(R.id.textView);
        bt_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                    //这里对UI界面进行操作
                        tv_text.setText("我爱中国");
                    }
                });
            }
        });
    }

点击这个按钮可以看到TextView的值改变了
在这里插入图片描述
2.使用Handler的方法,往Handler中发送一个消息,然后当Handler接收到你发送过来的消息,再在Handler执行相应的操作。

private static final int UPDATE_TEXT = 1;
    TextView tv_text;

    /**
     * 新建一个Handel
     * 接收button发送的参数
     * 对主线程中的UI进行修改
     */
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case UPDATE_TEXT:
                    //在这里进行UI操作
                    tv_text.setText("大聪明");
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_button = (Button) findViewById(R.id.button);
        tv_text = (TextView) findViewById(R.id.textView);
        bt_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //新建一个线程
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Message message = new Message();
                        message.what = UPDATE_TEXT;
                        //将Message对象发送出去
                        handler.sendMessage(message);
                    }
                }).start();
            }
        });
    }
  1. 使用AsyncTask
    现在MainActivity中新建一个内部类,这个内部类继承了AsyncTask类,然后重写AsyncTask的内部方法代码如下:
public class MainActivity extends AppCompatActivity {

    TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_thread = (Button) findViewById(R.id.button);
        tv1 = (TextView) findViewById(R.id.textView);
        bt_thread.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //启动DownloadTask任务
                        new DownloadTask().execute();
                    }
                }).start();
            }
        });
    }

    class DownloadTask extends AsyncTask<Void, Integer, Boolean> {

        @Override
        protected void onPreExecute() {
            //在开始任务之前执行的一个方法
            Log.d("MainActivity", "onPostExecute: 我要开始干活啦");
        }

        @Override
        protected Boolean doInBackground(Void... voids) {
            //在任务开始时执行的方法
            Log.d("MainActivity", "doInBackground: 我在忙,我在忙,我在忙");
            //在调用这个方法之后onProgressUpdate会得到执行
            publishProgress();
            return null;
        }

        //在doInBackground中调用了publishProgress方法之后,onProgressUpdate会得到执行
        @Override
        protected void onProgressUpdate(Integer... values) {
            Log.d("MainActivity", "onProgressUpdate:我也在忙");
            tv1.setText("牛皮");
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            //任务执行完毕之后
            Log.d("MainActivity", "onPostExecute: 我忙完了");
        }
    }
}

运行后点击按钮后的效果如下
在这里插入图片描述
而日志如下
在这里插入图片描述

最后

以上就是舒服期待为你收集整理的Android在子线程中更新UI的三种方式的全部内容,希望文章能够帮你解决Android在子线程中更新UI的三种方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部