之前被人问到Activity的生命周期函数onStart中能做些什么操作,我想了想,可以请求网络,难道在onCreate中就不能请求网路,难道在onResume中就不能请求网路,也是既然在这些方法中都可以请求网路,那onStart方法中我们能做什么比较恰当呢?
在《Android开发技术探索》一书中发现了一段代码
protected void onStart() {
super.onStart();
ViewTreeObserver observer = view.getViewTreeObserver();
observer.adddOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = view.gerMeasureWidth();
int height = view.getMeasureHeight();
}
});
}
复制代码
这段代码实现的功能是获取View的宽高,详解如下:
ViewTreeObserver类
使用ViewTreeObserver的众多回调可以完成这个功能。View中有ViewTreeObserver类的实例,获取该对象然后添加OnGlobalLayoutListener监听,当View树的状态发生改变或者View树内部的View的可见性发生变化时,onGlobalLayout()方法将被回调,因此这是获取View的宽高的一个好的时机。
得出的结论是设置View的监听器。