7 解析Android中更新UI的几种方式

更新UI的4种方式:

1、runOnUiThread 2、handle post 3、handle sendMessage 4、view post

1.重写Activity中的runOnUIThread方法更新;
2.调用View自身的post(Runnable run)方法更新;
3.调用Handle.sendMessage()方法;传统的方法
4.通过Handle的post方法();

------------------------

更新UI的4种方式
1.通过Handler的post()方法

mHandler.postDelayed(new Runnable() {
public void run() {
mTextView.setText("handler.post(Runnable)");
}
}, 2000);

2.调用Handler.sendMessage()传统的方法

Message msg = new Message();
mHandler.sendMessageDelayed(msg, 2000);

配合handleMessage()使用。

3.重写Activity中的runOnUiThread()方法更新

runOnUiThread(new Runnable() {
public void run() {
mTextView.setText("runOnUiThread");
}
});

4.调用View自身的post(Runnable run)方法更新;

mTextView.postDelayed(new Runnable() {
public void run() {
mTextView.setText("TextView.post()");
}
}, 2000);

总结. 以上四种更新UI的方式归根结底都是通过sendMessage()实现的。

package com.example.yzx;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class FiveActivity extends Activity {

    private TextView tv;
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            // 2.2
            tv.setText("yes");
        };
    };

    // 第一种
    private void handler1() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                tv.setText("ok");
            }
        });
    }

    // 第二种
    private void handler2() {
        // 2.1
        handler.sendEmptyMessage(1);
    }

    // 第三种
    private void updateUI() {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                tv.setText("3");
            }
        });
    }

    // 第四种
    private void viewUI() {
        tv.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                tv.setText("4");
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.five);
        tv = (TextView) findViewById(R.id.textView1);
        new Thread() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    Thread.sleep(2000);
                    /*
                     * 第一种方法 handler.post(new Runnable() {
                     * 
                     * @Override public void run() { // TODO Auto-generated
                     * method stub tv.setText("ok"); } });
                     */
                    // 第二种
                    // 2.3
                    // handler2();
                    // 第三种
                    // updateUI();
                    // 第四种
                    viewUI();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }.start();
    }

}

 

posted @ 2016-05-10 12:49  沉默的羊癫疯  阅读(150)  评论(0)    收藏  举报