日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

handler总结-转载自http://mobile.51cto.com/aprogram-442833.htm (侵删)

發布時間:2023/12/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 handler总结-转载自http://mobile.51cto.com/aprogram-442833.htm (侵删) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android開發中Handler的經典總結

當應用程序啟動時,Android首先會開啟一個主線程(也就是UI線程),主線程為管理界面中的UI控件,進行事件分發。

作者:佚名來源:pin5i|2014-06-18 14:41
收藏分享

技術沙龍 | 4月21日多位區塊鏈專家進行區塊鏈技術應用場景解讀!


一、Handler的定義:

主要接受子線程發送的數據, 并用此數據配合主線程更新UI。

解釋:當應用程序啟動時,Android首先會開啟一個主線程 (也就是UI線程) , 主線程為管理界面中的UI控件, 進行事件分發, 比如說, 你要是點擊一個 Button ,Android會分發事件到Button上,來響應你的操作。? 如果此時需要一個耗時的操作,例如: 聯網讀取數據,? ? 或者讀取本地較大的一個文件的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會出現假死現象, 如果5秒鐘還沒有完成的話,會收到Android系統的一個錯誤提示? "強制關閉"。? 這個時候我們需要把這些耗時的操作,放在一個子線程中,因為子線程涉及到UI更新,,Android主線程是線程不安全的, 也就是說,更新UI只能在主線程中更新,子線程中操作是危險的。 這個時候,Handler就出現了。,來解決這個復雜的問題 ,由于Handler運行在主線程中(UI線程中),? 它與子線程可以通過Message對象來傳遞數據, 這個時候,Handler就承擔著接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象,(里面包含數據)? , 把這些消息放入主線程隊列中,配合主線程進行更新UI。

二、Handler一些特點

handler可以分發Message對象和Runnable對象到主線程中, 每個Handler實例,都會綁定到創建他的線程中(一般是位于主線程),它有兩個作用:

(1)安排消息或Runnable 在某個主線程中某個地方執行;

(2)安排一個動作在不同的線程中執行。

Handler中分發消息的一些方法

post(Runnable)

postAtTime(Runnable,long)

postDelayed(Runnable long)

sendEmptyMessage(int)

sendMessage(Message)

sendMessageAtTime(Message,long)

sendMessageDelayed(Message,long)

以上post類方法允許你排列一個Runnable對象到主線程隊列中,

sendMessage類方法, 允許你安排一個帶數據的Message對象到隊列中,等待更新。

三、Handler實例

子類需要繼承Hendler類,并重寫handleMessage(Message msg) 方法, 用于接受線程數據。

以下為一個實例,它實現的功能為:通過線程修改界面Button的內容

  • public?class?MyHandlerActivity?extends?Activity?{?
  • ????Button?button;?
  • ????MyHandler?myHandler;?
  • ?
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{?
  • ????????super。onCreate(savedInstanceState);?
  • ????????setContentView(R。layout。handlertest);?
  • ?
  • ????????button?=?(Button)?findViewById(R。id。button);?
  • ????????myHandler?=?new?MyHandler();?
  • ????????//?當創建一個新的Handler實例時,?它會綁定到當前線程和消息的隊列中,開始分發數據?
  • ????????//?Handler有兩個作用,?(1)?:?定時執行Message和Runnalbe?對象?
  • ????????//?(2):?讓一個動作,在不同的線程中執行。?
  • ?
  • ????????//?它安排消息,用以下方法?
  • ????????//?post(Runnable)?
  • ????????//?postAtTime(Runnable,long)?
  • ????????//?postDelayed(Runnable,long)?
  • ????????//?sendEmptyMessage(int)?
  • ????????//?sendMessage(Message);?
  • ????????//?sendMessageAtTime(Message,long)?
  • ????????//?sendMessageDelayed(Message,long)?
  • ??????
  • ????????//?以上方法以?post開頭的允許你處理Runnable對象?
  • ????????//sendMessage()允許你處理Message對象(Message里可以包含數據,)?
  • ?
  • ????????MyThread?m?=?new?MyThread();?
  • ????????new?Thread(m)。start();?
  • ????}?
  • ?
  • ????/**?
  • ????*?接受消息,處理消息?,此Handler會與當前主線程一塊運行?
  • ????*?*/?
  • ?
  • ????class?MyHandler?extends?Handler?{?
  • ????????public?MyHandler()?{?
  • ????????}?
  • ?
  • ????????public?MyHandler(Looper?L)?{?
  • ????????????super(L);?
  • ????????}?
  • ?
  • ????????//?子類必須重寫此方法,接受數據?
  • ????????@Override?
  • ????????public?void?handleMessage(Message?msg)?{?
  • ????????????//?TODO?Auto-generated?method?stub?
  • ????????????Log。d("MyHandler",?"handleMessage。。。。。。");?
  • ????????????super。handleMessage(msg);?
  • ????????????//?此處可以更新UI?
  • ????????????Bundle?b?=?msg。getData();?
  • ????????????String?color?=?b。getString("color");?
  • ????????????MyHandlerActivity。this。button。append(color);?
  • ?
  • ????????}?
  • ????}?
  • ?
  • ????class?MyThread?implements?Runnable?{?
  • ????????public?void?run()?{?
  • ?
  • ????????????try?{?
  • ????????????????Thread。sleep(10000);?
  • ????????????}?catch?(InterruptedException?e)?{?
  • ????????????????//?TODO?Auto-generated?catch?block?
  • ????????????????e。printStackTrace();?
  • ????????????}?
  • ?
  • ????????????Log。d("thread。。。。。。。",?"mThread。。。。。。。。");?
  • ????????????Message?msg?=?new?Message();?
  • ????????????Bundle?b?=?new?Bundle();//?存放數據?
  • ????????????b。putString("color",?"我的");?
  • ????????????msg。setData(b);?
  • ?
  • ????????????MyHandlerActivity。this。myHandler。sendMessage(msg);?//?向Handler發送消息,更新UI?
  • ?
  • ????????}?
  • ????}?
  • }?
  • 總結

    以上是生活随笔為你收集整理的handler总结-转载自http://mobile.51cto.com/aprogram-442833.htm (侵删)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。