Android工作線程轉換為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();
    }

 

來自:http://www.jianshu.com/p/615d32cd9a9b

 

 本文由用戶 miao0626 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!