84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
View.post()这个方法一般用来做什么?
闭关修行中......
我体会最深的有两个作用: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
View
Handler
mainLooper
View.post
Handler.post
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线程的队列中去执行
我体会最深的有两个作用:
1.大家都知道在onCreate()方法中调用view.getHeight()会返回0,但是你可以在
来获取他的高度。
2.用View.postDelayed()方法来防止段时间内多次点击view而触发多次不必要的点击事件:
post带一个Runnable,表示Runnable的工作在UI线程执行,可直接在Runnable内对UI进行更新操作,但要注意这里的Runnable不是新开了线程,不要进行太复杂耗时的工作,以免阻塞导致ANR。
View
默认带一个Handler
,属于mainLooper
的,View.post
相当于这个Handler.post
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线程的队列中去执行