Android工作线程转换为UI线程三种方式

miao0626 7年前
   <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>