Android工作线程转换为UI线程三种方式
miao0626
8年前
<p>我们将工作线程转换为UI线程,主要是进行UI的更新操作;</p> <p>使用三种方法</p> <ul> <li>Activity的runOnUiThread(Runnable);</li> <li>View 的post(Runnable);</li> <li>View 的postDelayed(Runnable); <p>三个方法传的是Runnable接口对象</p> <p>new Runnable() {</p> <p>@Override</p> <p>public void run() {</p> <p>} }</p> </li> </ul> <p>案例:不断设置TextView的值</p> <p>以下为三种方式的部分代码,省略布局xml,以及控件的绑定等操作</p> <p>runOnUiThread(Runnable)</p> <pre> <code class="language-java">//Button的点击事件 public void onClick(View view){ //开启一个工作线程,进行值的改变 new Thread(new Runnable() { @Override public void run() { while(i<100){ //每隔0.08秒更新设置一次值 try { Thread.sleep(80); } catch (InterruptedException e) { e.printStackTrace(); } i++; //Activity的方法 runOnUiThread(new Runnable() {//加入UI线程,更新UI @Override public void run() { textView.setText(i+"%"); } }); } } }).start(); }</code></pre> <p>post(Runnable)</p> <pre> <code class="language-java">//Button的点击事件 public void onClick(View view){ new Thread(new Runnable() { @Override public void run() { while(i<100){ i++; try { Thread.sleep(80); } catch (InterruptedException e) { e.printStackTrace(); } //View的方法 textView.post(new Runnable() {//加入UI线程,更新UI @Override public void run() { textView.setText(i+"%"); } }); } } }).start(); }</code></pre> <p>postDelayed(Runnable)</p> <pre> <code class="language-java">//Button的点击事件 public void onClick(View view){ new Thread(new Runnable() { @Override public void run() { while(i<100){ i++; try { Thread.sleep(80); } catch (InterruptedException e) { e.printStackTrace(); } //0.8秒后开始更新UI textView.postDelayed(new Runnable() {//加入UI线程,更新UI @Override public void run() { textView.setText(i+"%"); } },800); } } }).start(); }</code></pre> <p> </p> <p>来自:http://www.jianshu.com/p/615d32cd9a9b</p> <p> </p>