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(); } }

浙公网安备 33010602011771号