FragmentManager后台保存机制

FragmentManager后台保存机制

众所周知Android系统会在内存吃紧的时候释放后台应用,但是这样的释放有别于主动退出,例如按下回退键或者调用finish。
这两者的一个很大的区别就是onSaveInstanceState这个生命周期函数会不会被调用。

背景

讲到这个就不得不讲一下设计者的初衷。移动应用对内存的管理比桌面应用要严苛得多,因此设计者在应用程序的各个阶段都会加一些hook帮助开发者在管理好自己的App,使其不会占用过多资源,同时又能够让用户得到更好的体验。
onSaveInstanceStateonPause之后和onStop之前调用,它的目的就是在内存吃紧的时候就算系统不得不销毁Activity,但是提供一个方法给开发者保存当前的数据,以便用户再次打开时可以将之前的内容重新呈现出来。

为什么不用onPause?

onPause确实也会在系统内存吃紧的时候调用,但是它也同时会在其他时候调用,例如App失去焦点或者App退入后台。通常在这个时候我们应当释放掉一些资源,但是不应当每次都去保存一下状态,因为这个生命周期发生得太频繁了。

应用

开发过的大部分App一般不会用到这个生命周期,直到有一天收到了大量的Fragment already added异常。
我们使用的MainActivity是继承于AppCompatActivity,它加载了一个MainFragment是程序的主导航界面。

onCreate Before

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ...
    getSupportFragmentManager()
                .beginTransaction()
                .add(android.R.id.content, patient
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值