Android培训
美国上市Android培训机构

400-111-8989

热门课程

怎么更新Android UI,Android UI更新的4个方法

  • 时间:2017-04-24
  • 发布:Android培训
  • 来源:Android教程

Android UI更新

做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面会出现UI的增减、内容变化和跳转界面变化等问题,这里就说明几种方法来实现 UI的更新。

1、Activity的 runOnUiThread 


  1. textView = (TextView) findViewById( R.id.tv );
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {

  5. runOnUiThread(new Runnable() {
  6. @Override
  7. public void run() {
  8. textView.setText( "更新UI了");
  9. }
  10. });
  11. }
  12. }).start();

复制代码

android Activity runOnUiThread() 方法使用

2、Handler sendEmptyMessage()


  1. package lib.com.myapplication;

  2. import android.os.Handler;
  3. import android.os.Message;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.widget.TextView;

  7. public class MainActivity extends AppCompatActivity {

  8. private TextView textView ;

  9. Handler handler = new Handler( ) {
  10. @Override
  11. public void handleMessage(Message msg) {
  12. super.handleMessage(msg);
  13. textView.setText( "Ui更新了");
  14. }
  15. };

  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);

  20. textView = (TextView) findViewById( R.id.tv );
  21. new Thread(new Runnable() {
  22. @Override
  23. public void run() {
  24. try {
  25. Thread.sleep( 2000 );
  26. } catch (InterruptedException e) {
  27. e.printStackTrace();
  28. }

  29. handler.sendEmptyMessage( 2 ) ;
  30. }
  31. }).start();

  32. }
  33. }

复制代码

3、Handler post()


  1. package lib.com.myapplication;
  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.widget.TextView;

  6. public class MainActivity extends AppCompatActivity {

  7. private TextView textView ;

  8. Handler handler = new Handler();

  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);

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

  14. new Thread(new Runnable() {
  15. @Override
  16. public void run() {
  17. try {
  18. Thread.sleep( 2000 );
  19. } catch (InterruptedException e) {
  20. e.printStackTrace();
  21. }

  22. handler.post(new Runnable() {
  23. @Override
  24. public void run() {
  25. textView.setText( "Ui更新了");
  26. }
  27. }) ;
  28. }
  29. }).start();

  30. }
  31. }

复制代码

在子线程中切换到主线程


  1. new Thread(new Runnable() {
  2. @Override
  3. public void run() {
  4. LogUtil.d( "ttt 11111111111" + Thread.currentThread().getName() );
  5. new Handler(Looper.getMainLooper()).post(new Runnable() {
  6. @Override
  7. public void run() {
  8. LogUtil.d( "ttt 55555555" + Thread.currentThread().getName() );
  9. }
  10. });

  11. LogUtil.d( "ttt 22222222222" + Thread.currentThread().getName() );
  12. LogUtil.d( "ttt 33333333333" + Thread.currentThread().getName() );
  13. LogUtil.d( "ttt 44444444444" + Thread.currentThread().getName() );

  14. }
  15. }).start();

复制代码

结果



  1. ttt 11111111111Thread-155
  2. ttt 22222222222Thread-155
  3. ttt 33333333333Thread-155
  4. ttt 44444444444Thread-155
  5. ttt 55555555main


复制代码

可见这种方式可以快速切换线程,从log日志来看,切换到主线程不会阻塞子线程。

4、view Post()


  1. textView = (TextView) findViewById( R.id.tv );
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. try {
  6. Thread.sleep( 2000 );
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }

  10. textView.post(new Runnable() {
  11. @Override
  12. public void run() {
  13. textView.setText( "Ui更新了");
  14. }
  15. }) ;
  16. }
  17. }).start();

复制代码

总结:

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

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

上一篇:Eclipse搭建Android开发环境图文教程
下一篇:Android应用开发怎么调试,Android开发调试手段

Android eclipse开发环境配置,Windows 32位/64位系统 Android eclipse环境搭建教程

Android APP开发学习线路图,Android APP 开发要掌握这些技能

Android应用开发实战教程,开始你Android应用开发的第一步

如何为安卓开发搭建一个持续集成(CI)服务器

选择城市和中心
贵州省

广西省

海南省

台湾