-
HandlerThread 1. Handler在創建的時候可以指定Looper,這樣通過Handler的sendMessage()方法發送出去的消息就會添加到指定Looper里面的MessageQueue里面去。在不指定Looper的情況下,Handler綁定的是創建它的線程的Looper。 如果這個線程的Looper不存在,程序將拋出"Can't create handler inside thread that has not called Looper.prepare()"。 2. HandlerThread繼承于Thread,所以它本質就是個Thread。與普通Thread的差別就在于,它有個Looper成員變量。 在其run()方法中,調用Looper.myLooper()獲得一個looper對象。 synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); 在創建handler時使用getLooper()方法,其實現其實是一直等待looper對象的獲得。 while (isAlive() && mLooper == null) { try { wait(); } } 3. HandlerThread的用處 創建Handler的時指定的looper,可以是別的線程創建的。所以Handler中MessageQueue的輪詢不一定非要是創建Handler的線程進行,還可以在別的線程中進行。 這個時候我們就需要使用HandlerThread這個類來創建這個Looper了,這樣消息的處理就在新創建的HandlerThread中進行。(如圖) mThread = new HandlerThread("Handler Thread"); mHandler = new Handler(mThread.getLooper()){ public void handleMessage(android.os.Message msg) { ... }; };查看全部
-
主線程和子線程之間如何相互通信: 1. 子線程向主線程發送消息,是通過調用主線程的Handler,發送信息給主線程的Looper,該Hnadler綁定了主線程的Looper。 2. 主線程向子線程發送消息,是通過調用子線程的Handler,發送信息給子線程的Looper,因此必須有子線程的Looper,為了防止Looper沒有初始化,所以通過HandlerThread類,來保證子線程的Looper再被主線程調用時已經初始化。查看全部
-
子線程與主線程之間的相互通信 1.子線程通過 HandlerThread的thread.getLooper()綁定, 2.在主線程的handler的handlerMessage中調用threadHandler.sendMessageDelay(msg,1000);向子線程發送消息。 3.在子線程中通過handler.sendMessageDelay(msg,1000);向主線程發送消息 4.在一個啟動點btn調用主線程的handler.sendEmptyMessage(int x); 5.在一個結束點btn調用handler.removeMessages(x);查看全部
-
1.handler是什么? (1)handler是android給我們提供用來更新UI的一套機制,也是一套消息處理的機制,我們可以發送消息,也可以通過它處理消息; (2)目的:更新UI,處理、發送消息。 2.為什么要用handler? 是因為android在設計的時候,就封裝了一套消息創建、傳遞、處理機制,如果不遵循這樣的機制就沒有辦法更新UI信息,就會拋出異常信息查看全部
-
handler:一套用來更新UI的機制,也是一套用來做消息處理的機制。查看全部
-
MVC框架解析handler: 會議中要小便<br> view: handler 小便需求人<br> Controller: looper 老板(messageQueue隱藏在其中)<br> model:message、(messageQueue隱藏在looper中咱們不能交互) android中更新UI的幾種方式:<br> 1; Activity runOnUiThread();<br> 2、3:Handler post();\sendMessage();<br> 4: View post(); (通過ViewRootImpl.getRunQueue().post(action);方法實現)查看全部
-
Handler與Looper、MessageQueue的關系(原理) 1. Handler機制? 只要遵循Android使用handler來更新UI的機制,我們就不用關心多線程的問題,所有的更新UI的操作都是在主線程的消息隊列中去輪詢處理的。(如圖) 2. Handler封裝了消息的發送 (1)handler獲取一個message handler.obtainMessage(); obtainMessage()的源碼: public final Message obtainMessage() { return Message.obtain(this); //這里this本身就是handler對象 } Message.obtain()的源碼: public static Message obtain(Handler h) { Message m = obtain(); m.target = h; //m.target就是Message的目的地,將handler本身賦給它,就說明目的地就是handler本身 return m; } 3. Looper (1)Looper作為一個消息封裝的載體,包含了一個消息隊列messageQueue,所有的Handler發送的消息都經過這個消息隊列——要發送的消息會往這個消息隊列中插入或移除。 (2)Looper.loop()方法是一個死循環,不斷輪詢messageQueue,如果有消息存在取出并發送給handler,然后handler處理消息,沒有就阻塞 4. Handler 內部會和Looper進行關聯,也就是說在Handler內部可以找到Looper,找到了Looper也就找到了MessageQueue。調用handler.sendMessage()就是向消息隊列中發送消息;然后Looper輪詢MessageQueue,將message發送給Handler本身進行處理。 5. MessageQueue 一個消息隊列,可以添加消息,并處理消息 6. 總結: handler負責發送消息,Looper負責接收Hnandler發送的消息,并直接把消息回傳給hanlder自己。MessageQueue是一個存儲消息的容器。查看全部
-
onCreate()中調用是為了可以開始換圖片,或者說為了開啟循環。run()里面調用,是為了自己不斷啟動,即循環查看全部
-
Handler與Looper、MessageQueue的關系(原理) 1. Handler機制? 只要遵循Android使用handler來更新UI的機制,我們就不用關心多線程的問題,所有的更新UI的操作都是在主線程的消息隊列中去輪詢處理的。(如圖) 2. Handler封裝了消息的發送 (1)handler獲取一個message handler.obtainMessage(); obtainMessage()的源碼: public final Message obtainMessage() { return Message.obtain(this); //這里this本身就是handler對象 } Message.obtain()的源碼: public static Message obtain(Handler h) { Message m = obtain(); m.target = h; //m.target就是Message的目的地,將handler本身賦給它,就說明目的地就是handler本身 return m; } 3. Looper (1)Looper作為一個消息封裝的載體,包含了一個消息隊列messageQueue,所有的Handler發送的消息都經過這個消息隊列——要發送的消息會往這個消息隊列中插入或移除。 (2)Looper.loop()方法是一個死循環,不斷輪詢messageQueue,如果有消息存在取出并發送給handler,然后handler處理消息,沒有就阻塞 4. Handler 內部會和Looper進行關聯,也就是說在Handler內部可以找到Looper,找到了Looper也就找到了MessageQueue。調用handler.sendMessage()就是向消息隊列中發送消息;然后Looper輪詢MessageQueue,將message發送給Handler本身進行處理。 5. MessageQueue 一個消息隊列,可以添加消息,并處理消息 6. 總結: handler負責發送消息,Looper負責接收Hnandler發送的消息,并直接把消息回傳給hanlder自己。MessageQueue是一個存儲消息的容器。查看全部
-
一、Handler基礎知識 1.handler是什么? (1)handler是android給我們提供用來更新UI的一套機制,也是一套消息處理的機制,我們可以發送消息,也可以通過它處理消息; (2)目的:更新UI,處理、發送消息。 2.為什么要用handler? 是因為android在設計的時候,就封裝了一套消息創建、傳遞、處理機制,如果不遵循這樣的機制就沒有辦法更新UI信息,就會拋出異常信息查看全部
-
http://www.2cto.com/kf/201401/272073.html查看全部
-
com.android.context 的上下文的情況,以及安卓系統機制。查看全部
-
handler代碼1查看全部
-
Handler常識: 1:handler是什么? (1)handler是android給我們提供用來更新UI的一套機制,也是一套消息處理的機制,我們可以發送消息,也可以通過它處理消息; (2)目的作用:更新UI,處理、發送消息 2.為什么要用handler 是因為android在設計的時候,就封裝了一套消息創建、傳遞、處理機制,如果不遵循這樣的機制就會拋出異常信息,沒有辦法更新UI信息。查看全部
-
handler postdelayed查看全部
舉報
0/150
提交
取消