Android开发知识集Android_Speak

Android中UI的更新方式

2017-04-08  本文已影响10人  专属守护

使用Handler消息传递机制;

使用AsyncTask异步任务;

使用runOnUiThread(action)方法;

使用Handler的post(Runnabel r)方法;

1、Activity的 runOnUiThread

textView = (TextView) findViewById( R.id.tv );

newThread(newRunnable() {

@Override

publicvoidrun() {

runOnUiThread(newRunnable() {

@Override

publicvoidrun() {

textView.setText("更新UI了");

}

});

}

}).start();

android Activity runOnUiThread() 方法使用

2、Handler sendEmptyMessage()

?

packagelib.com.myapplication;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.widget.TextView;

publicclassMainActivityextendsAppCompatActivity {

privateTextView textView ;

Handler handler =newHandler( ) {

@Override

publicvoidhandleMessage(Message msg) {

super.handleMessage(msg);

textView.setText("Ui更新了");

}

};

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = (TextView) findViewById( R.id.tv );

newThread(newRunnable() {

@Override

publicvoidrun() {

try{

Thread.sleep(2000);

}catch(InterruptedException e) {

e.printStackTrace();

}

handler.sendEmptyMessage(2) ;

}

}).start();

}

}

3、Handler post()

?

packagelib.com.myapplication;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.support.v7.app.AppCompatActivity;

importandroid.widget.TextView;

publicclassMainActivityextendsAppCompatActivity {

privateTextView textView ;

Handler handler =newHandler();

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = (TextView) findViewById( R.id.tv );

newThread(newRunnable() {

@Override

publicvoidrun() {

try{

Thread.sleep(2000);

}catch(InterruptedException e) {

e.printStackTrace();

}

handler.post(newRunnable() {

@Override

publicvoidrun() {

textView.setText("Ui更新了");

}

}) ;

}

}).start();

}

}

4、view Post()

?

textView = (TextView) findViewById( R.id.tv );

newThread(newRunnable() {

@Override

publicvoidrun() {

try{

Thread.sleep(2000);

}catch(InterruptedException e) {

e.printStackTrace();

}

textView.post(newRunnable() {

@Override

publicvoidrun() {

textView.setText("Ui更新了");

}

}) ;

}

}).start();

总结:

1、其实上面的四种方式都可归结于一种方式:handler 用于Android线程之间的通信。

2、为什么android要求只能在UI线程进行UI操作? 主要还是为了避免多线程造成的并发的问题。在单线程操作UI是安全的。

上一篇下一篇

猜你喜欢

热点阅读