android開(kāi)發(fā)教程之子線程中更新界面
每個(gè)Handler對(duì)象與創(chuàng)建它的線程相關(guān)聯(lián),并且每個(gè)Handler對(duì)象只能與一個(gè)線程相關(guān)聯(lián)。
Handler一般有兩種用途:1)執(zhí)行計(jì)劃任務(wù),你可以再預(yù)定的實(shí)現(xiàn)執(zhí)行某些任務(wù),可以模擬定時(shí)器。2)線程間通信。在Android的應(yīng)用啟動(dòng)時(shí),會(huì)創(chuàng)建一個(gè)主線程,主線程會(huì)創(chuàng)建一個(gè)消息隊(duì)列來(lái)處理各種消息。當(dāng)你創(chuàng)建子線程時(shí),你可以再你的子線程中拿到父線程中創(chuàng)建的Handler對(duì)象,就可以通過(guò)該對(duì)象向父線程的消息隊(duì)列發(fā)送消息了。由于Android要求在UI線程中更新界面,因此,可以通過(guò)該方法在其它線程中更新界面。
通過(guò)Runnable在子線程中更新界面的例子
在onCreate中創(chuàng)建Handler
public class HandlerTestApp extends Activity {
Handler mHandler;
TextView mText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHandler = new Handler();//創(chuàng)建Handler
mText = (TextView) findViewById(R.id.text0);//一個(gè)TextView
}
構(gòu)建Runnable對(duì)象,在runnable中更新界面,此處,我們修改了TextView的文字.此處需要說(shuō)明的是,Runnable對(duì)象可以再主線程中創(chuàng)建,也可以再子線程中創(chuàng)建。我們此處是在子線程中創(chuàng)建的。
RunnablemRunnable0=newRunnable()
{
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
mText.setText("ThisisUpdatefromohterthread,MouseDOWN");
}
};
創(chuàng)建子線程,在線程的run函數(shù)中,我們向主線程的消息隊(duì)列發(fā)送了一個(gè)runnable來(lái)更新界面。
privatevoidupdateUIByRunnable(){
newThread()
{
//Messagemsg=mHandler.obtainMessage();
publicvoidrun()
{
//mText.setText("ThisisUpdatefromohterthread,MouseDOWN");//這句將拋出異常
mHandler.post(mRunnable0);
}
}.start();
}
用Message在子線程中來(lái)更新界面
用Message更新界面與Runnable更新界面類似,只是需要修改幾個(gè)地方。
實(shí)現(xiàn)自己的Handler,對(duì)消息進(jìn)行處理
privateclassMyHandlerextendsHandler
{
@Override
publicvoidhandleMessage(Messagemsg){
//TODOAuto-generatedmethodstub
super.handleMessage(msg);
switch(msg.what)
{
caseUPDATE://在收到消息時(shí),對(duì)界面進(jìn)行更新
mText.setText("Thisupdatebymessage");
break;
}
}
}
在新的線程中發(fā)送消息
privatevoidupdateByMessage()
{
//匿名對(duì)象
newThread()
{
publicvoidrun()
{
//mText.setText("ThisisUpdatefromohterthread,MouseDOWN");
//UPDATE是一個(gè)自己定義的整數(shù),代表了消息ID
Messagemsg=mHandler.obtainMessage(UPDATE);
mHandler.sendMessage(msg);
}
}.start();
}
- 淺談Android 的線程和線程池的使用
- Android自帶的四種線程池使用總結(jié)
- 在Android線程池里運(yùn)行代碼任務(wù)實(shí)例
- Android 線程之自定義帶消息循環(huán)Looper的實(shí)例
- Android開(kāi)發(fā)之多線程中實(shí)現(xiàn)利用自定義控件繪制小球并完成小球自動(dòng)下落功能實(shí)例
- Android開(kāi)發(fā)筆記之:如何安全中止一個(gè)自定義線程Thread的方法
- Android Handler主線程和一般線程通信的應(yīng)用分析
- Android 在其他線程中更新UI線程的解決方法
- Android多線程及異步處理問(wèn)題詳細(xì)探討
- android使用多線程更新ui示例分享
- Handler與Android多線程詳解
- Android編程自定義線程池與用法示例
相關(guān)文章
解決android studio 打開(kāi)java文件 內(nèi)容全變了的問(wèn)題
這篇文章主要介紹了解決android studio 打開(kāi)java文件 內(nèi)容全變了的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android Studio實(shí)現(xiàn)發(fā)短信功能
這篇文章主要介紹了Android Studio實(shí)現(xiàn)發(fā)短信功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Android選擇圖片或視頻進(jìn)行循環(huán)播放
這篇文章主要為大家詳細(xì)介紹了Android選擇圖片或視頻進(jìn)行循環(huán)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
android push推送相關(guān)基本問(wèn)答總結(jié)
現(xiàn)在網(wǎng)上一大堆的關(guān)于推送方面的實(shí)現(xiàn)原理:1.通過(guò)pull(拉),也就是通過(guò)客戶端主動(dòng)定時(shí)輪詢服務(wù)器請(qǐng)求數(shù)據(jù)。2.通過(guò)push(推),服務(wù)器通過(guò)一個(gè)長(zhǎng)連接主動(dòng)推送消息到客戶端。這兩個(gè)方式都可以實(shí)現(xiàn)推送功能。pull這個(gè)方式?jīng)]什么問(wèn)題好理解。2015-05-05
AndroidStudio項(xiàng)目制作倒計(jì)時(shí)模塊的方法
本篇文章主要介紹了AndroidStudio項(xiàng)目制作倒計(jì)時(shí)模塊的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
如何通過(guò)Android Stduio來(lái)編寫一個(gè)完整的天氣預(yù)報(bào)APP
這篇文章主要介紹了通過(guò)Android Stduio來(lái)編寫一個(gè)天氣預(yù)報(bào)APP,具體的實(shí)現(xiàn)是通過(guò)調(diào)用天氣預(yù)報(bào)接口來(lái)獲得天氣數(shù)據(jù),再將查詢的天氣信息存儲(chǔ)在SQLiteDatabase中,界面則用LIstView和GridView來(lái)搭建2021-08-08
Android SDK Manager解決更新時(shí)的問(wèn)題 :Failed to fetch URL...
本文主要介紹解決安裝使用SDK Manager更新時(shí)的問(wèn)題:Failed to fetch URL...,這里提供了詳細(xì)的資料及解決問(wèn)題辦法,有需要的小伙伴可以參考下2016-09-09

