Android更新UI的几种方式
2017-03-22 19:54
330 查看
Android更新UI的几种方式
1、Activity的 runOnUiThread
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(); |
androidActivity runOnUiThread()
方法使用
2、HandlersendEmptyMessage()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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 ; Handlerhandler = new Handler( ) { @Override public void handleMessage(Messagemsg) { super.handleMessage(msg); textView.setText("Ui 更新了 "); } }; @Override protected void onCreate(BundlesavedInstanceState) { 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()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 ; Handlerhandler = new Handler(); @Override protected void onCreate(BundlesavedInstanceState) { 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(); } } |
在子线程中切换到主线程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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(); |
1 2 3 4 5 | ttt 11111111111Thread-155 ttt 22222222222Thread-155 ttt 33333333333Thread-155 ttt 44444444444Thread-155 ttt 55555555main |
4、viewPost()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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是安全的。
相关文章推荐
- Android提高(15)——第五章 解析Android中更新UI的几种方式
- Android 更新UI的几种方式
- Android 更新UI的几种方式
- Android开发中更新UI的几种常用方式
- Android中更新UI的几种方式
- 浅谈Android几种更新UI的方式
- Android 更新UI的几种方式
- Android 中更新 UI 的几种方式
- Android更新UI的几种方式
- Android中更新UI的几种方式
- Android中更新UI的几种方式
- android中更新UI的几种方式
- AndroidUI——后台线程更新UI的几种方式
- Android更新ui 的几种方式?Handler 机制(二)
- Android开发更新UI的几种方式
- Android: 在UI线程更新UI的几种方式
- Android 更新UI的几种方式
- android中更新UI的几种方式
- Android 在子线程中更新UI的几种方法
- Android更新Ui的几种方法和见解