• Android学习笔记之:android更新ui的几种经常用法


         Android主线程不能运行耗时操作。我们通常是在子线程中运行耗时操作,
     我们在运行完耗时操作后,我们一般能够通过下面几种方式来实现ui界面的更新。

    首先是布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/mTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="16sp" />
        <Button
            android:id="@+id/update_mButton_01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="Hander Post"
            android:textSize="15sp" />
        <Button
            android:id="@+id/update_mButton_02"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="Hander SendMessage"
            android:textSize="15sp" />
        <Button
            android:id="@+id/update_mButton_03"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="RunOnUiThread"
            android:textSize="15sp" />
        <Button
            android:id="@+id/update_mButton_04"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="View Post"
            android:textSize="15sp" />
    </LinearLayout>

    ————–代码实现,有凝视————————————-

    public class MainActivity extends Activity implements OnClickListener {
        private TextView mTextView;
        private Button update_mButton_01;
        private Button update_mButton_02;
        private Button update_mButton_03;
        private Button update_mButton_04;
        private Handler mPostHander = new Handler() {
            public void handleMessage(android.os.Message msg) {
                if (msg.what == 1) {
                    // 更新UI
                    mTextView.setText("通过Hander Send Message更新Ui");
                }
            };
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initViews();
            initEvents();
        }
    
        /**
        * 初始化控件 
        * @description:
        * @date 2015-10-8 上午10:55:49
        */
        private void initViews() {
            this.mTextView = (TextView) findViewById(R.id.mTextView);
            this.update_mButton_01 = (Button) findViewById(R.id.update_mButton_01);
            this.update_mButton_02 = (Button) findViewById(R.id.update_mButton_02);
            this.update_mButton_03 = (Button) findViewById(R.id.update_mButton_03);
            this.update_mButton_04 = (Button) findViewById(R.id.update_mButton_04);
        }
    
        /**
        * 事件监听
        * @description:
        * @date 2015-10-8 上午10:56:02
        */
        private void initEvents() {
            this.update_mButton_01.setOnClickListener(this);
            this.update_mButton_02.setOnClickListener(this);
            this.update_mButton_03.setOnClickListener(this);
            this.update_mButton_04.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.update_mButton_01:// 第一种方式,通过Hander.post方法来实现UI更新
                    new Thread() {
                        public void run() {
                            try {
                                sleep(2000);// 休眠2秒,模拟耗时操作
                                mPostHander.post(new Runnable() {
    
                                    @Override
                                    public void run() {
                                        // 更新UI
                                        mTextView.setText("通过Hander Post更新Ui");
                                    }
                                });
                            }
                            catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        };
                    }.start();
                    break;
                case R.id.update_mButton_02:// 直接通过Hander发送Message来更新UI
                    new Thread() {
                        public void run() {
                            try {
                                sleep(2000);// 休眠2秒。模拟耗时操作
                                mPostHander.sendEmptyMessage(1);
                            }
                            catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        };
                    }.start();
    
                    break;
                case R.id.update_mButton_03:// 通过runOnUiThread来实现ui更新
                    new Thread() {
                        public void run() {
                            try {
                                sleep(2000);// 休眠2秒。模拟耗时操作
                                runOnUiThread(new Runnable() {
    
                                    @Override
                                    public void run() {
                                        // 更新UI
                                        mTextView.setText("通过runOnUiThread更新Ui");
                                    }
                                });
                            }
                            catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        };
                    }.start();
    
                    break;
                case R.id.update_mButton_04:// 直接利用View.post方法来更新ui
                    mTextView.post(new Runnable() {
                        @Override
                        public void run() {
                            // 更新UI
                            mTextView.setText("通过View.post()更新Ui");
                        }
                    });
                    break;
            }
        }
    }
  • 相关阅读:
    BZOJ 3261 最大异或和(可持久化Trie)
    模板 普通平衡树
    HDU4825 Xor Sum(贪心+Trie树)
    二维LIS(CDQ分治)
    IOIOI卡片占卜(Atcoder-IOIOI カード占い)(最短路)
    USACO 2009 Dec cow toll paths 过路费-floyd
    [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948
    lightoj 1038 Race to 1 Again 期望
    lightoj 1030 Discovering Gold 期望
    lightoj 1027 A Dangerous Maze 期望
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7115557.html
Copyright © 2020-2023  润新知