欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android UI更新的幾種方法總結(jié)

 更新時(shí)間:2016年11月17日 14:31:00   投稿:lqh  
這篇文章主要介紹了Android UI更新的幾種方法總結(jié)的相關(guān)資料,這里對Android UI 的幾種更新列出了,并附實(shí)例代碼,需要的朋友可以參考下

 Android UI更新

做過Android開發(fā)的人都遇到過這樣的問題:隨著需求的變化,某些入口界面會出現(xiàn)UI的增減、內(nèi)容變化和跳轉(zhuǎn)界面變化等問題,這里就說明幾種方法來實(shí)現(xiàn) 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();
 
  }
}

在子線程中切換到主線程

new Thread(new Runnable() {
  @Override
  public void run() {
    LogUtil.d( "ttt 11111111111" + Thread.currentThread().getName() );
    new Handler(Looper.getMainLooper()).post(new Runnable() {
      @Override
      public void run() {
        LogUtil.d( "ttt 55555555" + Thread.currentThread().getName() );
      }
    });
 
    LogUtil.d( "ttt 22222222222" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 33333333333" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 44444444444" + Thread.currentThread().getName() );
 
  }
}).start();

  結(jié)果


ttt 11111111111Thread-155
ttt 22222222222Thread-155
ttt 33333333333Thread-155
ttt 44444444444Thread-155
ttt 55555555main

  可見這種方式可以快速切換線程,從log日志來看,切換到主線程不會阻塞子線程。

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

總結(jié):

1、其實(shí)上面的四種方式都可歸結(jié)于一種方式:handler 用于Android線程之間的通信。

2、為什么android要求只能在UI線程進(jìn)行UI操作? 主要還是為了避免多線程造成的并發(fā)的問題。在單線程操作UI是安全的。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論