Android 开发之 View.post() 的作用

来源:互联网 发布:江西省公务员待遇知乎 编辑:程序博客网 时间:2024/04/29 06:14

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

原创粉丝点击