成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android異步更新UI的四種方式

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

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

[[147881]]

  1. 使用Handler消息傳遞機制;

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

  3. 使用runOnUiThread(action)方法;

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

下面分別使用四種方式來更新一個TextView。

1.使用Handler消息傳遞機制

  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<String, String, String> 
  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.   }); 

 

責任編輯:王雪燕 來源: segmentfault
相關(guān)推薦

2017-04-17 19:31:03

Android多線程

2014-12-25 09:41:15

Android加載方式

2013-06-14 15:24:57

Android開發(fā)移動開發(fā)數(shù)據(jù)存儲方式

2023-05-22 08:03:28

JavaScrip枚舉定義

2022-03-25 14:47:24

Javascript數(shù)據(jù)類型開發(fā)

2010-07-28 13:54:42

Flex數(shù)據(jù)綁定

2021-12-22 09:34:01

Golagn配置方式

2020-06-12 08:28:29

JavaScript開發(fā)技術(shù)

2013-10-17 09:25:52

2021-07-14 10:31:15

JavaScript開發(fā) 技巧

2015-04-02 16:54:52

災(zāi)難恢復(fù)VDI災(zāi)難恢復(fù)

2015-04-13 11:39:26

VDI災(zāi)難恢復(fù)

2025-05-09 09:39:45

2022-07-04 08:29:13

electron通信

2024-01-17 13:56:00

Redis節(jié)點映射關(guān)系

2021-12-01 15:40:40

節(jié)日開源剪貼畫

2021-06-25 08:00:00

物聯(lián)網(wǎng)醫(yī)療技術(shù)

2011-05-20 09:55:26

Oracle連接

2025-01-20 15:50:19

2024-03-20 15:33:12

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩av第一页 | 99精品免费久久久久久日本 | 一区二区三区免费 | 久久精品亚洲欧美日韩精品中文字幕 | 国产精品视频在线观看 | 成人网av | 国产男女猛烈无遮掩视频免费网站 | 国产精品免费视频一区 | 亚洲美女网站 | 国产日产精品一区二区三区四区 | 免费在线视频一区二区 | 日韩av啪啪网站大全免费观看 | 国产成人综合网 | 欧美成人激情视频 | 亚洲精品电影网在线观看 | 四虎影院一区二区 | 亚洲精品电影在线观看 | 中文字幕亚洲精品 | 一二区视频 | 亚洲一区二区在线播放 | 激情一区二区三区 | 国产ts一区| 国产精品日韩一区二区 | 国产一区二区高清在线 | 91精品国产乱码久久蜜臀 | 中国毛片免费 | 国产一区二区精品在线观看 | 亚洲一区二区免费视频 | 国产精品入口 | 久久久www成人免费精品张筱雨 | 国产精品久久久久久久久免费高清 | 精品美女久久久久久免费 | 国产激情视频网站 | 国产成人影院 | 精品久久久久香蕉网 | 精品亚洲永久免费精品 | 精品日韩一区二区 | 欧洲亚洲一区二区三区 | 高清国产午夜精品久久久久久 | 日韩欧美三级电影 | 午夜一区二区三区视频 |