Android 更新UI的幾種方式,android更新ui幾種
1、Activity的 runOnUiThread
textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start();android Activity runOnUiThread() 方法使用2、Handler sendEmptyMessage()
package lib.com.myapplication;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { private TextView textView ; Handler handler = new Handler( ) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); textView.setText( "Ui更新了"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep( 2000 ); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage( 2 ) ; } }).start(); }}3、Handler post()
package lib.com.myapplication;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class MainActivity extends AppCompatActivity { private TextView textView ; Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep( 2000 ); } catch (InterruptedException e) { e.printStackTrace(); } handler.post(new Runnable() { @Override public void run() { textView.setText( "Ui更新了"); } }) ; } }).start(); }}4、view Post()
textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep( 2000 ); } catch (InterruptedException e) { e.printStackTrace(); } textView.post(new Runnable() { @Override public void run() { textView.setText( "Ui更新了"); } }) ; } }).start();
總結:
1、其實上面的四種方式都可歸結於一種方式:handler 用於Android線程之間的通訊。
2、為什麼android要求只能在UI線程進行UI操作? 主要還是為了避免多線程造成的並發的問題。在單線程操作UI是安全的。