android fragment 生命周期引起的错误及思考

今天调试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


点击进入其他活动时logcat数据

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


活动初始化时调用啥,后台运行时调用啥,返回时调用啥已经很明显了,不多解释了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值