天蓬老师2017-04-17 15:34:23
我體會最深的有兩個作用:
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);
高洛峰2017-04-17 15:34:23
post帶一個Runnable,表示Runnable的工作在UI線程執行,可直接在Runnable內對UI進行更新操作,但要注意這裡的Runnable不是新開了線程,不要進行太複雜耗時的工作,以免阻塞導致ANR。
PHP中文网2017-04-17 15:34:23
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的高度