国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳解Android UI更新的幾種方法

2019-12-12 02:39:36
字體:
供稿:網(wǎng)友

前言

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

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

一、Activity.runOnUiThread

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

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

二、handler.post(Runnable)

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

三、子線程發(fā)送Message

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

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);  }};

以上三種方法都可以實現(xiàn)UI的更新,掌握哪種方式取決于代碼中的疊加度,不過個人推薦使用方法一。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 杂多县| 东丰县| 海安县| 巩留县| 南平市| 巫溪县| 内丘县| 肥东县| 贺兰县| 奈曼旗| 根河市| 玉山县| 沅江市| 延津县| 扎兰屯市| 富蕴县| 包头市| 布尔津县| 大竹县| 林州市| 贵州省| 余干县| 长乐市| 平山县| 安平县| 广丰县| 黑龙江省| 南川市| 台中市| 通渭县| 乐业县| 大冶市| 孝感市| 西乌珠穆沁旗| 临沂市| 仙游县| 青阳县| 防城港市| 永仁县| 石阡县| 河源市|