Activity.onWindowFocusChanged()方法的测试用

onWindowFocusChanged()：当Activity的当前Window获得或推动焦点时会被回调此方法。当回调了这个方法时表示Activity是完全对用户可见的(只是可见，还一片黑呼呼的，有待draw..)。当对话框弹起/消失及Activity新创建及回退等都会调用此方法。

相比之下，onResume()方法更多的是指Activity进入了可见的状态，但只是状态，并不是真正的界面构建完成了。

眼见为实，动手实践。

写了个简单的demo，一个Activity只显示一个TestImageView,并重写TestImageView下的onMeasure()、onLayout()、onDraw()方法，并对其设置onGlobalLayout()监听，观察这几个方法与Activity的onResume()、onWindowFocusChanged()的调用顺序，如下：

ClipDrawableActivity onCreate() time=1376920332125
ClipDrawableActivity onResume() TestImageView.width=0 time=1376920332149
MainActivity onWindowFocusChanged hasFocus=false
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onLayout()
ClipDrawableActivity onGlobalLayout() TestImageView.width=736
time=1376920332185
ClipDrawableActivity onWindowFocusChanged() hasFocus=true
TestImageView.width=736 time=1376920332187
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onMeasure()
ClipDrawableActivity TestImageView onLayout()
ClipDrawableActivity onGlobalLayout() TestImageView.width=736
time=1376920332194
ClipDrawableActivity TestImageView onDraw()

其调用顺序为Activity.oncreate()→Activity.onResume()→

→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→
→Activity.onWidnowFocusChanged()→.....→
→TextImageView.onDraw()

至此,如果需要获取某个View的宽高，可以在onWindowFocusChanged()处直接获取即可，这比对某个view设置onGlobalLayoutListener的方式来获取方便了许此。