Android編程中Handler原理及用法實例分析
本文實例講述了Android編程中Handler用法。分享給大家供大家參考,具體如下:
在Android的UI開發(fā)中,我們經常會使用Handler來控制主UI程序的界面變化。有關Handler的作用,我們總結為:與其他線程協(xié)同工作,接收其他線程的消息并通過接收到的消息更新主UI線程的內容。
我們假設在一個UI界面上面,有一個按鈕,當點擊這個按鈕的時候,會進行網(wǎng)絡連接,并把網(wǎng)絡上的一個字符串拿下來顯示到界面上的一個 TextView上面,這時就出現(xiàn)了一個問題,如果這個網(wǎng)絡連接的延遲過大,可能是10秒鐘甚至更長,那我們的界面將處于一直假死狀態(tài),而如果這段時間超 過5秒鐘的話,程序會出現(xiàn)異常。
這時我們會想到使用線程來完成以上工作,即當按鈕被按下的時候新開啟一個線程來完成網(wǎng)絡連接工作,并把得到的結果更新到UI上面。但是,這時候又會 出現(xiàn)另一個問題,在Android中,主線程是非線程安全的,也就是說UI的更新只能在本線程中完成,其他線程無法直接對主線程進行操作。
為了解決以上問題,Android設計了Handler機制,由Handler來負責與子線程進行通訊,從而讓子線程與主線程之間建立起協(xié)作的橋梁,使Android的UI更新的問題得到完美的解決。接下來ATAAW.COM舉例來詮釋Handler的基本使用方法。
A、Handler的工作原理
一般情況下,在主線程中我們綁定了Handler,并在事件觸發(fā)上面創(chuàng)建新的線程用于完成某些耗時的操作,當子線程中的工作完成之后,會對Handler發(fā)送一個完成的信號,而Handler接收到信號后,就進行主UI界面的更新操作。
B、Handler與子線程協(xié)作實例
1、創(chuàng)建Handler實現(xiàn)類,在主UI所在類中的內部類
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內容進行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程序設計有所幫助。
- Android Handler消息派發(fā)機制源碼分析
- Android使用Handler和Message更新UI
- 深入理解Android中的Handler異步通信機制
- Android中Handler消息傳遞機制
- Android handler 詳解(面試必問)
- 淺談Android應用的內存優(yōu)化及Handler的內存泄漏問題
- 實例講解Android多線程應用開發(fā)中Handler的使用
- Android編程開發(fā)之seekBar采用handler消息處理操作的方法
- 詳解Android中Handler的內部實現(xiàn)原理
- 詳解Android中Handler的使用方法
- Android Handler 機制實現(xiàn)原理分析
相關文章
Android 自定義SeekBar 實現(xiàn)分段顯示不同背景顏色的示例代碼
這篇文章主要介紹了Android 自定義SeekBar 實現(xiàn)分段顯示不同背景顏色,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
android自定義ListView實現(xiàn)底部View自動隱藏和消失的功能
本篇文章主要介紹了android自定義ListView實現(xiàn)底部View自動隱藏和消失的功能 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Android開發(fā)使用UncaughtExceptionHandler捕獲全局異常
本文主要介紹在Android開發(fā)中使用UncaughtExceptionHandler捕獲全局異常,需要的朋友可以參考下。2016-06-06
Android為應用添加數(shù)字角標的簡單實現(xiàn)
應用的角標是用來標記有多少條提醒沒讀,本篇文章主要介紹了Android為應用添加角標的簡單實現(xiàn),有興趣的可以了解一下。2017-04-04
Android實現(xiàn)文件按時間先后順序排列顯示的示例代碼
在很多Android應用中,需要管理和展示本地文件,對文件按最后修改時間排序展示,能讓用戶直觀地了解文件的創(chuàng)建或修改順序,從而更方便地查找最新或最舊的文件,本文將介紹如何在Android平臺上獲取指定目錄下的文件列表,并按照時間先后排序,需要的朋友可以參考下2025-04-04
Android8.1 源碼修改之插入SIM卡默認啟用Volte功能
這篇文章主要介紹了Android8.1 源碼修改之插入SIM卡默認啟用Volte功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
Android編程使用光線傳感器獲取光線強弱的方法【LightSensorManager封裝類】
這篇文章主要介紹了Android編程使用光線傳感器獲取光線強弱的方法,結合實例形式分析了Android光線傳感器管理封裝類LightSensorManager的具體實現(xiàn)技巧,需要的朋友可以參考下2017-11-11

