中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 在子線程中更新UI的幾種方法示例

發布時間:2020-09-20 01:43:24 來源:腳本之家 閱讀:150 作者:一直在進步的李哈哈 欄目:移動開發

本文介紹了Android 在子線程中更新UI的幾種方法示例,分享給大家,具體如下:

方式一:Handler和Message

① 實例化一個Handler并重寫handlerMessage()方法

private Handler handler = newHandler() {
    public void handleMessage(Message msg) {
          // 處理消息
    super.handleMessage(msg);
    switch (msg.what) {
    case 1:
      button1.setText("點擊安裝");
      break;
    case 2:
      button1.setText("打開");
      break;
    }
    };
 }; 

② 在子線程中獲取或創建消息,并使用handler對象發送。

Message msg = handler.obtainMessage();
msg.what = 1;
handler.sendMessage(msg);

方式二:在子線程中直接調用Activity.runOnUiThread(Runnable action)方法

runOnUiThread(new Runnable() {
  @Override
  public void run() {
    // 更新UI的操作
  }
});

方式三:在子線程中調用View的post()方法

myView.post(new Runnable() {          
  @Override
  public void run() {
    // 更新UI
    myView.setText(“更新UI”);
  }});

方式四:在子線程中調用View.PostDelayed(Runnabe,long)

對方式三對補充,long參數用于制定多少時間后運行后臺進程

方式五:Handler的post()方法

① 創建一個Handler成員變量

private Handler handler = new Handler();

② 在子線程中調動post()方法

handler.post(new Runnable() {           
  @Override
  public void run() {
    // 更新UI
   myView.setText(“更新UI”);
  }});

方式六:AsyncTask

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 
 //在這里聲明了Params、Progress、Result參數的類型
 {
   //因為這里不需要使用onPreExecute回調方法,所以就沒有加入該方法
   
   //后臺線程的目的是更具URL下載數據
    protected Long doInBackground(URL... urls) {
      int count = urls.length;//urls是數組,不止一個下載鏈接
      long totalSize = 0;//下載的數據
     for (int i = 0; i < count; i++) {
       //Download是用于下載的一個類,和AsyncTask無關,大家可以忽略他的實現
       totalSize += Downloader.downloadFile(urls[i]);
       publishProgress((int) ((i / (float) count) * ));//更新下載的進度
       // Escape early if cancel() is called
       if (isCancelled()) break;
     }
     return totalSize;
   }
 
   //更新下載進度
   protected void onProgressUpdate(Integer... progress) {
     setProgressPercent(progress[0]);
   }
 
   //將下載的數據更新到UI線程
   protected void onPostExecute(Long result) {
     showDialog("Downloaded " + result + " bytes");
   }
 }

對于一般的只是簡單更新ui,情形不復雜的,使用方式二三就可以了,但是當情形比較復雜,還是推薦使用handler。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仙居县| 陕西省| 开阳县| 庆城县| 全南县| 莱西市| 磐石市| 汾阳市| 徐汇区| 泗洪县| 大邑县| 黎川县| 迁西县| 泸溪县| 镶黄旗| 郸城县| 冕宁县| 察哈| 平和县| 云龙县| 科技| 芮城县| 宣化县| 景东| 科尔| 靖州| 玉溪市| 桃园市| 崇明县| 大安市| 丰顺县| 舒兰市| 平顺县| 博白县| 阳原县| 石狮市| 胶州市| 阿合奇县| 英吉沙县| 商南县| 突泉县|