91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

詳解Android UI更新的幾種方法

發布時間:2020-10-19 14:19:54 來源:腳本之家 閱讀:201 作者:心若冰清_ 欄目:移動開發

前言

在android開發中,界面UI的更新都是在主線程來完成的。線程分為主線程(Main Thread,簡稱MT)和工作線程(Work Thread,簡稱WT),我們通常會在WT中執行一些比較耗時的操作,比如下載,網絡,緩存等,然后在將結果發送給MT進行UI的更新操作。如果是在WT進行UI的更新,則會拋出異常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有創建這個View的原始線程才能修改這個view)。

在BT搜索、WIFI搜索、其他需要更新View的UI過程中,很多是采用廣播的方式通知搜索的結果,實時的顯示到listview中進行UI的更新操作。通常會使用以下幾種方式進行UI的更新:handler,runOnUiThread,子線程發送Message。

一、Activity.runOnUiThread

利用Activity.runOnUiThread(Runnable)把更新ui的代碼創建在Runnable中,然后在需要更新 ui時,把這個Runnable對象傳給Activity.runOnUiThread(Runnable)。這樣Runnable對像就能在ui程序中被調用。如果當前線程是UI線程,那么行動是立即執行。如果當前線程不是UI線程,操作是發布到事件隊列的UI線程。

mActivity.runOnUiThread(new Runnable() {
  @Override
  public void run() {
    Log.e(TAG, "開始添加設備!");
    addDevice(device);
  }
});

二、handler.post(Runnable)

handler.post(new Runnable() {
  @Override
  public void run() {
    addDevice(device);
  }
});

三、子線程發送Message

首先在需要執行更新的位置添加以下代碼

new Thread(new Runnable() {
  @Override
  public void run() {
    //Message msg = new Message();
    //msg.what = 0x06;
    //handler.sendMessage(msg);
    handler.sendEmptyMessage(0x06);
  }
}).start();

然后進入handler下進行處理

final Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
        case 0x06:
          addDevice(device);
        break;
      default:
        break;
    }
    super.handleMessage(msg);
  }
};

以上三種方法都可以實現UI的更新,掌握哪種方式取決于代碼中的疊加度,不過個人推薦使用方法一。希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

科技| 磐石市| 兴宁市| 靖边县| 东至县| 林周县| 平利县| 双鸭山市| 远安县| 沅江市| 冷水江市| 永州市| 全南县| 于都县| 长岭县| 岳西县| 邢台县| 聂拉木县| 广宁县| 邵武市| 华阴市| 循化| 平和县| 仲巴县| 聂拉木县| 深泽县| 永年县| 朝阳县| 同江市| 孝义市| 陵水| 松潘县| 河池市| 涟源市| 锦州市| 和静县| 府谷县| 汉寿县| 敖汉旗| 舞阳县| 饶阳县|