新东西011--Android Fragment常见错误分析

       Fragment的onResume和onHiddenChanged差异解析

             OnHiddenChanged:它是onResume的辅助工具,它在第一次进入Fragment和销毁Fragment的时候不会调用。这也意味着使用replace方法切换Fragment的时候它不会得到调用(因为使用replace(id,fragmentB)切换的时候,目标fragmentB会重建,会重走FramentB的生命周期)。但在同一个Activity下通过hide/show方法切换Fragment的时候就会触发这个方法。通过一个boolean hidden的参数,对同一Activity下的Fragment隐藏显示变化做区分。

            OnResume:跟activity生命周期相似,在new Fragment,并将该Fragmentd加载到界面的时候,重走Fragment的生命周期函数,onCreateView-onresume(只列举部分)。同时,它也跟activity的生命周期相关,比如ActivityA下有一个FragmentA,当从ActivityA跳转到ActivityB,然后从ActivityB返回ActivityA的时候,会调用FragmentA的onResume方法。这也说明Fragment的onResume是依赖于Activity的onResume存在的,只要这个Fragment对象不变(因为一新建就会走自己的生命周期函数,自然会走onResume),那么只有当Activity调用onResume的时候才会调用其下Fragment的onResume方法。

           这里也顺便提一下,“onResume只会调用一次的问题”,有很多朋友在开发过程中复用Fragment,使用hiden/show切换Fragment,同时又没有切换Activity显示,那么除了第一次走Fragment周期函数的时候会调用onResume,其余都不会调用,因为Fragment对象不变,Activity也没有调用onResume方法。

Fragment的commit()方法和cmmitAllowingStateLose()的区别

在说这个之前需要普及一点Activity的onSaveInstanceState的调用时机,onSaveInstanceState调用时机是指当前activity在当前activety队列的最上层的时候,这个时候旋转屏幕肯定会引起onSaveInstanceState的调用。其次,在显示在最上层的情况下,用户按下Home键或者切换应用,切换activity的时候都会引起onsaveInstance的调用。

cmmitAllowingStateLose:在Activity的onSaveInstanceState之后调用增减Fragment的操作并commit会出现IllegalStateException错误,原因是因为Activity的commit方法一定要在onSaveInstancestate方法之前调用。如果要在之后调用就要使用commitAllowingStateLose来确保使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值