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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android——Handler总结

發布時間:2025/7/14 Android 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android——Handler总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、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實例
????? (1) 子類需要繼承Handler類,并重寫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
?
???????? }
???? }

?

引自:http://www.open-open.com/lib/view/open1335967054421.html

轉載于:https://www.cnblogs.com/Defry/p/4384626.html

總結

以上是生活随笔為你收集整理的Android——Handler总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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