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