Android編程中Handler原理及用法實(shí)例分析
本文實(shí)例講述了Android編程中Handler用法。分享給大家供大家參考,具體如下:
在Android的UI開(kāi)發(fā)中,我們經(jīng)常會(huì)使用Handler來(lái)控制主UI程序的界面變化。有關(guān)Handler的作用,我們總結(jié)為:與其他線程協(xié)同工作,接收其他線程的消息并通過(guò)接收到的消息更新主UI線程的內(nèi)容。
我們假設(shè)在一個(gè)UI界面上面,有一個(gè)按鈕,當(dāng)點(diǎn)擊這個(gè)按鈕的時(shí)候,會(huì)進(jìn)行網(wǎng)絡(luò)連接,并把網(wǎng)絡(luò)上的一個(gè)字符串拿下來(lái)顯示到界面上的一個(gè) TextView上面,這時(shí)就出現(xiàn)了一個(gè)問(wèn)題,如果這個(gè)網(wǎng)絡(luò)連接的延遲過(guò)大,可能是10秒鐘甚至更長(zhǎng),那我們的界面將處于一直假死狀態(tài),而如果這段時(shí)間超 過(guò)5秒鐘的話,程序會(huì)出現(xiàn)異常。
這時(shí)我們會(huì)想到使用線程來(lái)完成以上工作,即當(dāng)按鈕被按下的時(shí)候新開(kāi)啟一個(gè)線程來(lái)完成網(wǎng)絡(luò)連接工作,并把得到的結(jié)果更新到UI上面。但是,這時(shí)候又會(huì) 出現(xiàn)另一個(gè)問(wèn)題,在Android中,主線程是非線程安全的,也就是說(shuō)UI的更新只能在本線程中完成,其他線程無(wú)法直接對(duì)主線程進(jìn)行操作。
為了解決以上問(wèn)題,Android設(shè)計(jì)了Handler機(jī)制,由Handler來(lái)負(fù)責(zé)與子線程進(jìn)行通訊,從而讓子線程與主線程之間建立起協(xié)作的橋梁,使Android的UI更新的問(wèn)題得到完美的解決。接下來(lái)ATAAW.COM舉例來(lái)詮釋Handler的基本使用方法。
A、Handler的工作原理
一般情況下,在主線程中我們綁定了Handler,并在事件觸發(fā)上面創(chuàng)建新的線程用于完成某些耗時(shí)的操作,當(dāng)子線程中的工作完成之后,會(huì)對(duì)Handler發(fā)送一個(gè)完成的信號(hào),而Handler接收到信號(hào)后,就進(jìn)行主UI界面的更新操作。
B、Handler與子線程協(xié)作實(shí)例
1、創(chuàng)建Handler實(shí)現(xiàn)類,在主UI所在類中的內(nèi)部類
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper L) {
super(L);
}
// 重寫handleMessage方法,接受數(shù)據(jù)并更新UI
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//此處根據(jù)msg內(nèi)容進(jìn)行UI操作
}
}
2、子線程的實(shí)現(xiàn)
class MyThread implements Runnable {
public void run() {
Message msg = new Message();
Bundle b = new Bundle();
b.putString("cmd", "update");
msg.setData(b);
MainActivity.this.myHandler.sendMessage(msg);//通知Handler更新UI
}
}
通過(guò)以上的兩個(gè)實(shí)現(xiàn),我們只需要在MainActivity中聲明MyHandler實(shí)例對(duì)象就可以完成線程之間的通訊和界面的更新操作。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android Handler消息派發(fā)機(jī)制源碼分析
- Android使用Handler和Message更新UI
- 深入理解Android中的Handler異步通信機(jī)制
- Android中Handler消息傳遞機(jī)制
- Android handler 詳解(面試必問(wèn))
- 淺談Android應(yīng)用的內(nèi)存優(yōu)化及Handler的內(nèi)存泄漏問(wèn)題
- 實(shí)例講解Android多線程應(yīng)用開(kāi)發(fā)中Handler的使用
- Android編程開(kāi)發(fā)之seekBar采用handler消息處理操作的方法
- 詳解Android中Handler的內(nèi)部實(shí)現(xiàn)原理
- 詳解Android中Handler的使用方法
- Android Handler 機(jī)制實(shí)現(xiàn)原理分析
相關(guān)文章
Android開(kāi)發(fā)之Animations動(dòng)畫用法實(shí)例詳解
這篇文章主要介紹了Android開(kāi)發(fā)之Animations動(dòng)畫用法,結(jié)合實(shí)例形式詳細(xì)分析了Animations動(dòng)畫的類型、組成、模式及對(duì)應(yīng)的使用技巧,需要的朋友可以參考下2016-02-02
詳解Android應(yīng)用中ListView列表選項(xiàng)欄的編寫方法
這篇文章主要介紹了Android應(yīng)用中ListView列表選項(xiàng)欄的編寫方法,講解了使用安卓自帶的ListView與自定義multiple ListView的方法,需要的朋友可以參考下2016-03-03
Android OpenGL ES 實(shí)現(xiàn)抖音傳送帶特效(原理解析)
這篇文章主要介紹了Android OpenGL ES 實(shí)現(xiàn)抖音傳送帶特效,抖音傳送帶特效推出已經(jīng)很長(zhǎng)一段時(shí)間了,前面也實(shí)現(xiàn)了下,最近把它整理出來(lái)了,如果你有仔細(xì)觀測(cè)傳送帶特效,就會(huì)發(fā)現(xiàn)它的實(shí)現(xiàn)原理其實(shí)很簡(jiǎn)單,需要的朋友可以參考下2022-07-07
深入理解Android熱修復(fù)技術(shù)原理之代碼熱修復(fù)技術(shù)
在各種 Android 熱修復(fù)方案中,Andfix的即時(shí)生效令人印象深刻,它稍顯另類, 并不需要重新啟動(dòng),而是在加載補(bǔ)丁后直接對(duì)方法進(jìn)行替換就可以完成修復(fù),然而它的使用限制也遭遇到更多的質(zhì)疑2021-06-06
Jetpack Compose自定義動(dòng)畫與Animatable詳解
在今年的Google/IO大會(huì)上,亮相了一個(gè)全新的 Android 原生 UI 開(kāi)發(fā)框架-Jetpack Compose, 與蘋果的SwiftIUI一樣,Jetpack Compose是一個(gè)聲明式的UI框架,這篇文章主要介紹了Jetpack Compose自定義動(dòng)畫與Animatable2022-10-10
Android開(kāi)發(fā)adb.exe'' and can be executed.錯(cuò)誤解決方法
這篇文章主要介紹了Android開(kāi)發(fā)adb.exe' and can be executed.錯(cuò)誤解決方法,本文分析了問(wèn)題的可能原因并給出了排查步驟,需要的朋友可以參考下2015-06-06
android基礎(chǔ)教程之夜間模式實(shí)現(xiàn)示例
這篇文章主要介紹了android的夜間模式實(shí)現(xiàn)示例,需要的朋友可以參考下2014-02-02

