今天调试app时,发现了一个bug,即自己的app中有一个控件是隐藏的,点击按钮后展开,而我在这个fragment 的onstart 函数中加入了对这个控件的长度的测量,
代码如下:
int w1 = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h1 = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
rl_detail1.measure(w1,h1);
rl_detail1MeasuredHeight =rl_detail1.getMeasuredHeight();
rl_detail1MeasuredHeight= DpPxUtil.dip2px(getActivity().getApplicationContext(),rl_detail1MeasuredHeight);
Log.e("长度", String.valueOf(rl_detail1MeasuredHeight));
一开始展开长度即为预设的长度,然而当我点击其他界面之后,再返回这个界面时,再点击展开,这里的控件长度延长了近一倍
E/长度: 531
E/长度: 1569
也就是说,在返回这个界面时,又一次调用了onstrat函数,这个时候我才想起来,mmp,原来是生命周期搞混了,
于是将onstart 改为 onActivitycreate ,即将原本每返回该界面就调用一次测量长度函数,改为只在活动初始化时测量,最终问题解决,长度不再出问题
这里为了彻底记住fragment的生命周期
于是在原代码添加了以下几行进行测试
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_main, container, false);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("onCreate","onCreate");
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.e("onResume", "onResume");
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.e("onStart", "onStart");
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e("onStop", "onStop");
}
@Override
public void onPause() {
super.onPause();
Log.e("onPause", "onPause");
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
Log.e("onActivityCreated", "onActivityCreated");
打开app时logcat数据
05-17 10:14:13.507 6167-6167/doge.healthcare E/onCreate: onCreate
05-17 10:14:13.639 6167-6167/doge.healthcare E/onActivityCreated: onActivityCreated
05-17 10:14:13.732 6167-6167/doge.healthcare E/onStart: onStart
05-17 10:14:13.734 6167-6167/doge.healthcare E/onResume: onResume
按下home 键logcat数据
05-17 10:17:08.020 9404-9404/doge.healthcare E/onPause: onPause
05-17 10:17:08.280 9404-9404/doge.healthcare E/onStop: onStop
按下home键后再打开app时logcat的数据
5-17 10:17:55.514 9404-9404/doge.healthcare E/onStart: onStart
05-17 10:17:55.515 9404-9404/doge.healthcare E/onResume: onResume
05-17 10:19:04.456 9404-9404/doge.healthcare E/onPause: onPause
05-17 10:19:05.681 9404-9404/doge.healthcare E/onStop: onStop
返回圆界面时logcat数据
05-17 10:20:15.231 9404-9404/doge.healthcare E/onStart: onStart
05-17 10:20:15.232 9404-9404/doge.healthcare E/onResume: onResume
活动初始化时调用啥,后台运行时调用啥,返回时调用啥已经很明显了,不多解释了