Android 開發之 View.post() 的作用
阿新 • • 發佈:2019-01-26
1、在 onCreate() 方法中直接呼叫 view.getHeight() 會返回 0,但是可以在 view.post() 中獲取控制元件的寬高:
view.post(new Runnable() {
@Override
public void run() {
showToast("" + view.getHeight());
}
});
2、用 View.postDelayed() 方法來防止一段時間內多次點選 view 而頻繁觸發點選事件:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view.setEnabled(false);
//進行其他操作
view.postDelayed(new Runnable() {
@Override
public void run() {
view.setEnabled(true );
}
}, 500);//500ms內只能點選一次
}
});
PS:post 帶一個 Runnable,表示 Runnable 的工作在 UI 執行緒執行,可直接在 Runnable 內對UI進行更新操作,但要注意這裡的 Runnable 不是新開了執行緒,因此不要進行復雜耗時的工作,以免阻塞導致 ANR。
3、從其它執行緒訪問主執行緒主要有以下幾種方式:
- Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable, long)
- Handler
View.post 背後的執行過程可以參考下面的資料:
一種DelayLoad的實現和原理(下篇)
看完這篇分析,你就會明白為什麼在 onCreate() 中要呼叫 View.post() 才可以獲取一個 View 的高度。