最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)之子線程操作UI的幾種方法

 更新時間:2016年08月07日 15:49:12   作者:SEU_Calvin  
這篇文章主要介紹了Android開發(fā)之子線程操作UI的幾種方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

 在Android項目中經常有碰到這樣的問題,在子線程中完成耗時操作之后要更新UI,下面就自己經歷的一些項目總結一下更新的方法:

在看方法之前需要了解一下Android中的消息機制。

方法1 Activity.runOnUiThread

方法如下:

runOnUiThread(new Runnable() { 
@Override 
public void run() { 
tv.setText("Hello"); 
} 
}); 

這種方法簡單易用,如果當前線程是UI線程,那么行動是立即執(zhí)行。如果當前線程不是UI線程,就發(fā)布到事件隊列的UI線程。其實和Handler差不多,都是將這個更新UI的請求消息,加入到事件隊列,等待主線程空閑的時候執(zhí)行。

方法2 Handler

主線程中定義Handler如下:

Handler mHandler = new Handler() { 
@Override 
public void handleMessage(Message msg) { 
super.handleMessage(msg); 
switch (msg.what) { 
case 0: 
String data = (String)msg.obj; 
textView.setText(data); 
break; 
default: 
break; 
} 
} 
}; 

子線程發(fā)消息,通知Handler完成UI更新,代碼如下:

new Thread(new Runnable(){ 
@Override 
public void run() { 
//耗時操作 
mHandler.sendEmptyMessage(0); 
Message msg =new Message(); 
msg.obj = "數據";//可以是基本類型,可以是對象,可以是List、map等 
mHandler.sendMessage(msg); 
} 
}).start(); 

方法3 View.post

final Button btn =(Button)findViewById(R.id.btn); 
btn.post(new Runnable(){ 
@Override 
publicvoid run() { 
btn.setText("Hello"); 
} 
}); 

上面的代碼就是更新btn中的內容,同樣下面的代碼也可以達到這種效果。

Handler handler = new Handler(); 
final Button btn = (Button)findViewById(R.id.btn); 
handler.post(new Runnable(){ 
@Override 
public void run() { 
btn.setText("Hello"); 
} 
}); 

這個是用handler.post方法,一個是用View.post方法,handler.post方法已經在Android的消息機制中介紹過了,其實最終也是調用了方法2中的send方法。

現(xiàn)在看一下View.post方法的源代碼:

public boolean post(Runnable action) { 
Handler handler; 
AttachInfo attachInfo = mAttachInfo; 
if (attachInfo != null) { 
handler = attachInfo.mHandler; 
} else { 
// Assume that post will succeed later 
ViewRootImpl.getRunQueue().post(action); 
return true; 
} 
return handler.post(action); 
} 

方法中主要的功能代碼就是attachInfo.mHandler,獲取當前線程(即UI線程)的Hanlder,然后將action對象post到Handler里。在Handler里的處理過程上面鏈接文已經分析的很清楚了,它將傳遞過來的action對象包裝成一個Message(Message的callback為action),然后將其投入UI線程的消息循環(huán)中。在Handler的dispatchMessage方法里,第一句話就是為它所設,直接調用runnable的run方法。而此時,已經路由到UI線程里,因此,我們可以毫無顧慮的來更新UI。

方法4 廣播

子線程中發(fā)送廣播,主線程中接收廣播并更新UI。

方法5 使用AsyncTask

為了簡化子線程中訪問UI,系統(tǒng)提供給了我們AsyncTask。

AsyncTask是一種輕量級的異步任務類,它可以在線程池中執(zhí)行后臺任務,然后把執(zhí)行進度和結果傳遞給主線程并更新UI。本質上來說AsyncTask封裝了Thread和Handler,但是AsyncTask不適合進行特別耗時的后臺任務,如果需要進行特別耗時的任務,建議使用線程池。

不同API版本的AsyncTask具有不同的表現(xiàn),因此需要注意。為了控制篇幅,具體的AsyncTask的使用方法和工作原理,我打算后面單獨成文進行介紹。

以上所述是小編給大家介紹的Android開發(fā)之子線程操作UI的幾種方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關文章

  • Android學習筆記之藍牙功能

    Android學習筆記之藍牙功能

    這篇文章主要為大家詳細介紹了Android學習筆記之藍牙功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 詳解Android中Handler的使用方法

    詳解Android中Handler的使用方法

    這篇文章主要介紹了Android中Handler的使用方法,對Android中Handler的作用于如何使用進行了初步介紹,需要的朋友可以參考下
    2015-12-12
  • 簡介Android應用中sharedPreferences類存儲數據的用法

    簡介Android應用中sharedPreferences類存儲數據的用法

    這篇文章主要介紹了Android應用中使用sharedPreferences類存儲數據的方法,文中舉了用SharedPreferences保存數據和讀取數據的例子,需要的朋友可以參考下
    2016-02-02
  • Android ViewDragHelper使用方法詳解

    Android ViewDragHelper使用方法詳解

    這篇文章主要為大家詳細介紹了Android ViewDragHelper的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android實現(xiàn)dialog的3D翻轉示例

    Android實現(xiàn)dialog的3D翻轉示例

    這篇文章主要介紹了Android實現(xiàn)dialog的3D翻轉示例,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • 手把手教你Android全局觸摸事件監(jiān)聽

    手把手教你Android全局觸摸事件監(jiān)聽

    這篇文章主要介紹了Android全局觸摸事件監(jiān)聽,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Android 同時setTag兩次保存多種值的示例代碼

    Android 同時setTag兩次保存多種值的示例代碼

    這篇文章主要介紹了Android 同時setTag兩次保存多種值的示例代碼,需要的朋友可以參考下
    2017-02-02
  • Android如何讓WebView中的HTML5頁面實現(xiàn)視頻全屏播放

    Android如何讓WebView中的HTML5頁面實現(xiàn)視頻全屏播放

    最近在工作遇到一個需求,需要讓WebView中的HTML5頁面實現(xiàn)視頻全屏播放的效果,通過查找相關的資料終于找到了解決的方法,所以想著分享給大家,所以本文介紹了關于Android如何讓WebView中的HTML5頁面實現(xiàn)視頻全屏播放的相關資料,需要的朋友可以參考學習。
    2017-04-04
  • Android控件之菜單的創(chuàng)建方式

    Android控件之菜單的創(chuàng)建方式

    本文給大家分享android控件菜單的兩種創(chuàng)建方式,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • Android實現(xiàn)屏幕保持常亮功能

    Android實現(xiàn)屏幕保持常亮功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)屏幕保持常亮功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

汤原县| 德江县| 隆子县| 措美县| 河源市| 达拉特旗| 洪雅县| 德州市| 黑水县| 房产| 苏尼特左旗| 合水县| 恭城| 花莲市| 三江| 长子县| 保德县| 宿松县| 柘城县| 应城市| 祁门县| 大余县| 闽清县| 平泉县| 常德市| 芜湖市| 达拉特旗| 从江县| 福州市| 颍上县| 敦煌市| 平山县| 靖安县| 北海市| 根河市| 饶平县| 健康| 光泽县| 丹棱县| 资溪县| 凤山市|