工作线程转换为UI线程三种方式

我们将工作线程转换为UI线程,主要是进行UI的更新操作;
在工作线程中使用三种方法:

  • Activity的runOnUiThread(Runnable);
  • View 的post(Runnable);
  • View 的postDelayed(Runnable);
三个方法传的是Runnable接口对象

new Runnable() {
@Override
public void run() {
} }

案例:不断设置TextView的值

以下为三种方式的部分代码,省略布局xml,以及控件的绑定等操作

runOnUiThread(Runnable)
//Button的点击事件
public void onClick(View view){
        //开启一个工作线程,进行值的改变
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(i<100){
            //每隔0.08秒更新设置一次值
                try {
                        Thread.sleep(80);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    i++;
            //Activity的方法
                    runOnUiThread(new Runnable() {//加入UI线程,更新UI
                        @Override
                        public void run() {
                            textView.setText(i+"%");
                        }
                    });
                }
            }
        }).start();
}
post(Runnable)
  //Button的点击事件
  public void onClick(View view){
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(i<100){
                    i++;
                    try {
                        Thread.sleep(80);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
           //View的方法
                    textView.post(new Runnable() {//加入UI线程,更新UI
                        @Override
                        public void run() {
                            textView.setText(i+"%");
                        }
                    });
                }
            }
        }).start();
    }
postDelayed(Runnable)
//Button的点击事件
    public void onClick(View view){
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(i<100){
                    i++;
                    try {
                        Thread.sleep(80);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //0.8秒后开始更新UI
                    textView.postDelayed(new Runnable() {//加入UI线程,更新UI
                        @Override
                        public void run() {
                            textView.setText(i+"%");
                        }
                    },800);
                }
            }
        }).start();
    }

你可能感兴趣的:(工作线程转换为UI线程三种方式)