android - View.post()
阿神
阿神 2017-04-17 15:32:23
0
5
858

View.post()这个方法一般用来做什么?

阿神
阿神

闭关修行中......

全部回覆(5)
Peter_Zhu

我體會最深的有兩個作用:
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

Ty80

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執行緒的佇列中去執行

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板