handler訊息機制
優點:
寫法:
1.主線程中建立乙個handler物件
handler handler = new handler(){};
2.複寫handler物件的handlermessage方法
public void handlemessage(android.os.message msg)
3.在子執行緒中建立乙個message物件
message msg = message.obtain();
4.將結果繫結給message
msg.obj = bitmap;
5.使用主線程中的handler物件將message傳送給主線程處理
handler.sendmessage(msg);
6.主線程中的handlermessage方法接受子執行緒發來的message物件;獲取結果,處理ui.
bitmap bitmap = (bitmap) msg.obj;
iv_pic.setimagebitmap(bitmap);
例子:主線程:
//☆☆1.在主線程建立乙個handler物件
//☆☆2.複寫handler物件的handlermessage方法
private handler handler = new handler(); };
子執行緒:
//☆☆3.在子執行緒中建立乙個message物件
message msg = new message();
//☆☆4.將網路訪問獲取的結果繫結到message物件上
msg.obj = result;
//☆☆5.使用主線程中建立的handler物件,傳送乙個message物件到主線程
handler.sendmessage(msg);
原理:
涉及物件:
handler: 主要在子執行緒中將message傳送給主線程,在主線程中接受message並處理。
每乙個handler例項,都有乙個單獨的執行緒與之配合。
message:乙個訊息物件,主要在子執行緒中繫結結果,攜帶到主線程。
messagequeue:位於主線程,是乙個訊息佇列,接受子執行緒中發來的乙個message物件。
looper: 訊息迴圈器,不斷的從messagequeue中取出乙個個message物件。
常見訊息處理api
1. 面試題:子執行緒不能夠更新ui嗎?
1.審計機制:
activity完全展示之後,審計機制才會工作去檢測子執行緒是否更新ui,如果更新就報錯
;
activity沒有完全顯示之前(oncreate方法沒執行完畢),審計機制不會工作,就不會檢測子執行緒中做的事情,
所以即使更新ui也不會報錯。
2.android中,與進度條相關的控制項 也可以在子執行緒中更新ui.
3.su***ceview 也可在子執行緒中更新ui.
方法中的runnable都會被傳送到主線程中執行。
runonuithread(new runnable()
});3. handler.post方法,
將執行的動作傳送到主線程中執行
handler.post(new runnable()
});ps:主線程中需要建立handler物件 handler handler = new handler( );
4.handler.postdelayed方法,
將執行的動作延時多長時間後傳送到主線程中執行
; delaymillis:延時時間
handler.postdelayed(new runnable()
}, 5000);
子執行緒相關
第四種方式有乙個應用場景:展示廣告多少秒後,跳轉主介面。
Android Handler 工作原理
handler message messagequeue looper 1.looper.prepare public static void prepare private static void prepare boolean quitallowed 這裡建立的looper sthreadloc...
Android Handler相關問題
1 handler是什麼?答 handler是更新ui介面的機制,也是訊息處理的機制,我們可以傳送訊息,也可以處理訊息 2 為什麼要有handler?答 android在設計的時候,封裝了一套訊息建立 傳遞 處理機制,如果不遵循這樣的機制就沒辦法更新ui資訊,就會丟擲異常。3 handler怎麼用?...
android handler呼叫post方法阻塞
1.試下用postdelayed runnable a,int time 因為post把訊息放到looper中就返回,但looper中沒有其他訊息又會被立刻取出來執行,這樣就有可能做了run中的操作,而沒有及時重新整理按鈕.2.另外,這種做法耗時操作仍然是由ui執行緒去做了。而不是你想的另起了執行緒...