詳解Android UI更新的幾種方法
前言
在android開發(fā)中,界面UI的更新都是在主線程來完成的。線程分為主線程(Main Thread,簡稱MT)和工作線程(Work Thread,簡稱WT),我們通常會在WT中執(zhí)行一些比較耗時的操作,比如下載,網(wǎng)絡(luò),緩存等,然后在將結(jié)果發(fā)送給MT進(jìn)行UI的更新操作。如果是在WT進(jìn)行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é)果,實(shí)時的顯示到listview中進(jìn)行UI的更新操作。通常會使用以下幾種方式進(jìn)行UI的更新:handler,runOnUiThread,子線程發(fā)送Message。
一、Activity.runOnUiThread
利用Activity.runOnUiThread(Runnable)把更新ui的代碼創(chuàng)建在Runnable中,然后在需要更新 ui時,把這個Runnable對象傳給Activity.runOnUiThread(Runnable)。這樣Runnable對像就能在ui程序中被調(diào)用。如果當(dāng)前線程是UI線程,那么行動是立即執(zhí)行。如果當(dāng)前線程不是UI線程,操作是發(fā)布到事件隊(duì)列的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();
然后進(jìn)入handler下進(jìn)行處理
final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0x06: addDevice(device); break; default: break; } super.handleMessage(msg); } };
以上三種方法都可以實(shí)現(xiàn)UI的更新,掌握哪種方式取決于代碼中的疊加度,不過個人推薦使用方法一。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程之在SD卡上進(jìn)行文件讀寫操作實(shí)例詳解
這篇文章主要介紹了Android編程之在SD卡上進(jìn)行文件讀寫操作的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android的文件操作及針對SD卡的存取操作相關(guān)技巧,需要的朋友可以參考下2015-12-12Android 使用手機(jī)NFC的讀取NFC標(biāo)簽數(shù)據(jù)的方法
這篇文章主要介紹了Android 使用手機(jī)NFC的讀取NFC標(biāo)簽數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Android開發(fā)之DatePicker和TimePicker實(shí)現(xiàn)選擇日期時間功能示例
這篇文章主要介紹了Android開發(fā)之DatePicker和TimePicker實(shí)現(xiàn)選擇日期時間功能,結(jié)合實(shí)例形式分析了Android DatePicker和TimePicker組件的功能、常用函數(shù)、布局及日期時間選擇相關(guān)操作技巧,需要的朋友可以參考下2019-03-03android如何添加桌面圖標(biāo)和卸載程序后自動刪除圖標(biāo)
android如何添加桌面圖標(biāo)和卸載程序后自動刪除桌面圖標(biāo),這是一個應(yīng)用的安裝與卸載過程對桌面圖標(biāo)的操作,下面與大家分享下具體是如何實(shí)現(xiàn)的,感興趣的朋友可以參考下哈2013-06-06android客戶端從服務(wù)器端獲取json數(shù)據(jù)并解析的實(shí)現(xiàn)代碼
今天總結(jié)一下android客戶端從服務(wù)器端獲取json數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2013-06-06Android實(shí)現(xiàn)沉浸式狀態(tài)欄
這篇文章主要為大家詳細(xì)介紹了Android沉浸式狀態(tài)欄的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android獲取雙卡雙待手機(jī)的SIM卡信息示例代碼
這篇文章主要給大家介紹了關(guān)于Android獲取雙卡雙待手機(jī)的SIM卡信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Android編程實(shí)現(xiàn)通話錄音功能的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)通話錄音功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android廣播接收機(jī)制實(shí)現(xiàn)錄音功能的操作技巧,需要的朋友可以參考下2017-06-06