View.post()这个方法一般用来做什么?
闭关修行中......
我體會最深的有兩個作用:1.大家都知道在onCreate()方法中呼叫view.getHeight()會回傳0,但你可以在
view.post(new Runnable() { @Override public void run() { MainApp.showToastMsg("" + view.getHeight()); } });
來取得他的高度。 2.用View.postDelayed()方法來防止一段時間內多次點擊view而觸發多次不必要的點擊事件:
view.setEnabled(false); view.postDelayed(new Runnable() { @Override public void run() { view.setEnabled(true); } },300);
post帶一個Runnable,表示Runnable的工作在UI線程執行,可直接在Runnable內對UI進行更新操作,但要注意這裡的Runnable不是新開了線程,不要進行太複雜耗時的工作,以免阻塞導致ANR。
View預設帶一個Handler,屬於mainLooper的,View.post相當於這個Handler.post
View
Handler
mainLooper
View.post
Handler.post
Android的APP在啟動後自動啟動了一個UIThread即主執行緒。這個執行緒主要用來分送使用者操作事件、介面繪製事件。所以為了保持較好的使用者體驗,耗時的操作都會放到其它執行緒執行,執行完成後再將結果傳回主執行緒並顯示出來。但是,從其它線程是不能直接操作UI的。這是一個就需要有個執行緒間傳遞訊息的機制,即Handler和訊息佇列以及Looper。
Android平台從其它執行緒存取主執行緒主要有以下幾種方式:Activity.runOnUiThread(Runnable)View.post(Runnable)View.postDelayed(Runnable, long) Handler
View.post背後的運作過程可以參考下面的資料:一種DelayLoad的實作與原則(下篇)看完這篇分析,你就會明白為什麼在onCreate中要呼叫View .post才可以取得一個View的高度
View.post用來將Runnable放入到UI執行緒的佇列中去執行
我體會最深的有兩個作用:
1.大家都知道在onCreate()方法中呼叫view.getHeight()會回傳0,但你可以在
來取得他的高度。
2.用View.postDelayed()方法來防止一段時間內多次點擊view而觸發多次不必要的點擊事件:
post帶一個Runnable,表示Runnable的工作在UI線程執行,可直接在Runnable內對UI進行更新操作,但要注意這裡的Runnable不是新開了線程,不要進行太複雜耗時的工作,以免阻塞導致ANR。
View
預設帶一個Handler
,屬於mainLooper
的,View.post
相當於這個Handler.post
Android的APP在啟動後自動啟動了一個UIThread即主執行緒。這個執行緒主要用來分送使用者操作事件、介面繪製事件。所以為了保持較好的使用者體驗,耗時的操作都會放到其它執行緒執行,執行完成後再將結果傳回主執行緒並顯示出來。但是,從其它線程是不能直接操作UI的。這是一個就需要有個執行緒間傳遞訊息的機制,即Handler和訊息佇列以及Looper。
Android平台從其它執行緒存取主執行緒主要有以下幾種方式:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
Handler
View.post背後的運作過程可以參考下面的資料:
一種DelayLoad的實作與原則(下篇)
看完這篇分析,你就會明白為什麼在onCreate中要呼叫View .post才可以取得一個View的高度
View.post用來將Runnable放入到UI執行緒的佇列中去執行