1. 程式人生 > >Android 開發之 View.post() 的作用

Android 開發之 View.post() 的作用

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 的高度。