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

猜你喜欢

转载自blog.csdn.net/hust_twj/article/details/78580106
今日推荐