編輯:關於Android編程
本文實例講述了Android編程中Handler用法。分享給大家供大家參考,具體如下:
在Android的UI開發中,我們經常會使用Handler來控制主UI程序的界面變化。有關Handler的作用,我們總結為:與其他線程協同工作,接收其他線程的消息並通過接收到的消息更新主UI線程的內容。
我們假設在一個UI界面上面,有一個按鈕,當點擊這個按鈕的時候,會進行網絡連接,並把網絡上的一個字符串拿下來顯示到界面上的一個 TextView上面,這時就出現了一個問題,如果這個網絡連接的延遲過大,可能是10秒鐘甚至更長,那我們的界面將處於一直假死狀態,而如果這段時間超 過5秒鐘的話,程序會出現異常。
這時我們會想到使用線程來完成以上工作,即當按鈕被按下的時候新開啟一個線程來完成網絡連接工作,並把得到的結果更新到UI上面。但是,這時候又會 出現另一個問題,在Android中,主線程是非線程安全的,也就是說UI的更新只能在本線程中完成,其他線程無法直接對主線程進行操作。
為了解決以上問題,Android設計了Handler機制,由Handler來負責與子線程進行通訊,從而讓子線程與主線程之間建立起協作的橋梁,使Android的UI更新的問題得到完美的解決。接下來ATAAW.COM舉例來诠釋Handler的基本使用方法。
A、Handler的工作原理
一般情況下,在主線程中我們綁定了Handler,並在事件觸發上面創建新的線程用於完成某些耗時的操作,當子線程中的工作完成之後,會對Handler發送一個完成的信號,而Handler接收到信號後,就進行主UI界面的更新操作。
B、Handler與子線程協作實例
1、創建Handler實現類,在主UI所在類中的內部類
class MyHandler extends Handler { public MyHandler() { } public MyHandler(Looper L) { super(L); } // 重寫handleMessage方法,接受數據並更新UI @Override public void handleMessage(Message msg) { super.handleMessage(msg); //此處根據msg內容進行UI操作 } }
2、子線程的實現
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 } }
通過以上的兩個實現,我們只需要在MainActivity中聲明MyHandler實例對象就可以完成線程之間的通訊和界面的更新操作。
復制代碼 代碼如下:MyHandler myHandler = new MyHandler();
希望本文所述對大家Android程序設計有所幫助。
Win10系統下配JDK環境變量問題電腦系統win10jdk版本jdk1.8.0_102Jdk安裝在了c盤下 配的環境變量為JAVA_HOME CLA
今天咱們看看android studio的jar打包,但是jar包裡面呢res文件是用不了的,那想用圖片文件怎麼辦呢,這裡可以把圖片文件放進assets文件裡面打進jar
①下載Git工具,配置到Android studio中http://git-scm.com/downloads------------------------------
1. 什麼是SEAndroid SEAndroid(Security-Enhanced Android)是有美國國家安全局(NSA)開發的開源安全項目,是在