搜尋

首頁  >  問答  >  主體

android - View.post()

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

阿神阿神2773 天前809

全部回覆(5)我來回復

  • 天蓬老师

    天蓬老师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);

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 15:34:23

    post帶一個Runnable,表示Runnable的工作在UI線程執行,可直接在Runnable內對UI進行更新操作,但要注意這裡的Runnable不是新開了線程,不要進行太複雜耗時的工作,以免阻塞導致ANR。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 15:34:23

    View預設帶一個Handler,屬於mainLooper的,View.post相當於這個Handler.post

    回覆
    0
  • PHP中文网

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:34:23

    View.post用來將Runnable放入到UI執行緒的佇列中去執行

    回覆
    0
  • 取消回覆