日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android異步更新UI的四種方式

大家都知道由于性能要求,Android要求只能在UI線程中更新UI,要想在其他線程中更新UI,我大致總結(jié)了4種方式,歡迎補(bǔ)充糾正:

[[147881]]

  1. 使用Handler消息傳遞機(jī)制;

  2. 使用AsyncTask異步任務(wù);

  3. 使用runOnUiThread(action)方法;

  4. 使用Handler的post(Runnabel r)方法;

下面分別使用四種方式來(lái)更新一個(gè)TextView。

1.使用Handler消息傳遞機(jī)制

 
 
 
  1. package com.example.runonuithreadtest; 
  2. import android.app.Activity; 
  3. import android.os.Bundle; 
  4. import android.os.Handler; 
  5. import android.widget.TextView; 
  6. public class MainActivity extends Activity { 
  7. private TextView tv; 
  8. Handler handler = new Handler() 
  9.   public void handleMessage(android.os.Message msg) { 
  10.    if(msg.what==0x123) 
  11.    { 
  12.     tv.setText("更新后的TextView"); 
  13.    } 
  14.   }; 
  15. }; 
  16. @Override 
  17. protected void onCreate(Bundle savedInstanceState) { 
  18.   super.onCreate(savedInstanceState); 
  19.   setContentView(R.layout.activity_main); 
  20.   tv = (TextView) findViewById(R.id.tv); 
  21.   new MyThread().start(); 
  22. class MyThread extends Thread 
  23.   @Override 
  24.   public void run() { 
  25.    //延遲兩秒更新 
  26.    try { 
  27.     Thread.sleep(2000); 
  28.    } catch (InterruptedException e) { 
  29.     // TODO Auto-generated catch block 
  30.     e.printStackTrace(); 
  31.    } 
  32.    handler.sendEmptyMessage(0x123); 
  33.   } 

2. 使用AsyncTask異步任務(wù)

  • 注:更新UI的操作只能在onPostExecute(String result)方法中。

 
 
 
  1. package com.example.runonuithreadtest; 
  2. import android.app.Activity; 
  3. import android.os.AsyncTask; 
  4. import android.os.Bundle; 
  5. import android.widget.TextView; 
  6. public class MainActivity extends Activity { 
  7. private TextView tv; 
  8. @Override 
  9. protected void onCreate(Bundle savedInstanceState) { 
  10.   super.onCreate(savedInstanceState); 
  11.   setContentView(R.layout.activity_main); 
  12.   tv = (TextView) findViewById(R.id.tv); 
  13.   new Yibu().execute(); 
  14. class Yibu extends AsyncTask 
  15.   @Override 
  16.   protected String doInBackground(String... params) { 
  17.    try { 
  18.     Thread.sleep(2000); 
  19.    } catch (InterruptedException e) { 
  20.     // TODO Auto-generated catch block 
  21.     e.printStackTrace(); 
  22.    } 
  23.    return null; 
  24.   } 
  25.   @Override 
  26.   protected void onPostExecute(String result) { 
  27.    // TODO Auto-generated method stub 
  28.    tv.setText("更新后的TextView"); 
  29.   } 

3. 使用runOnUiThread(action)方法

 
 
 
  1. package com.example.runonuithreadtest; 
  2. import android.app.Activity; 
  3. import android.os.Bundle; 
  4. import android.widget.TextView; 
  5. public class MainActivity extends Activity { 
  6. private TextView tv; 
  7. @Override 
  8. protected void onCreate(Bundle savedInstanceState) { 
  9.   super.onCreate(savedInstanceState); 
  10.   setContentView(R.layout.activity_main); 
  11.   tv = (TextView) findViewById(R.id.tv); 
  12.   new MyThread().start(); 
  13. class MyThread extends Thread 
  14.   @Override 
  15.   public void run() { 
  16.    runOnUiThread(new Runnable() { 
  17.     @Override 
  18.     public void run() { 
  19.      // TODO Auto-generated method stub 
  20.       try { 
  21.        //延遲兩秒更新 
  22.        Thread.sleep(2000); 
  23.       } catch (InterruptedException e) { 
  24.        e.printStackTrace(); 
  25.       } 
  26.       tv.setText("更新后的TextView"); 
  27.     } 
  28.    }); 
  29.   } 

4. 使用Handler的post(Runnabel r)方

 
 
 
  1. package com.example.runonuithreadtest; 
  2. import android.app.Activity; 
  3. import android.os.Bundle; 
  4. import android.os.Handler; 
  5. import android.widget.TextView; 
  6. public class MainActivity extends Activity { 
  7. private TextView tv; 
  8. @Override 
  9. protected void onCreate(Bundle savedInstanceState) { 
  10.   super.onCreate(savedInstanceState); 
  11.   setContentView(R.layout.activity_main); 
  12.   tv = (TextView) findViewById(R.id.tv); 
  13.   Handler handler = new Handler(); 
  14.   handler.post(new Runnable(){ 
  15.    @Override 
  16.    public void run() { 
  17.     try { 
  18.      //延遲兩秒更新 
  19.      Thread.sleep(2000); 
  20.     } catch (InterruptedException e) { 
  21.      e.printStackTrace(); 
  22.     } 
  23.     tv.setText("更新后的TextView"); 
  24.    } 
  25.   }); 

 


分享文章:Android異步更新UI的四種方式
當(dāng)前URL:http://www.dlmjj.cn/article/cdisosi.html