Android中页面生命周期变化

一、Activity切换的生命周期变化(A启动B)

1. 标准流程(B完全覆盖A)

完整生命周期路径:

  • Activity A

    1. onPause():失去焦点,仍部分可见

    2. onStop():完全不可见(当B完全覆盖后)

  • Activity B

    1. onCreate():初始化基础组件

    2. onStart():即将可见

    3. onResume():获得焦点,完全交互状态

关键关联关系:

  1. A必须先完成onPause(),B才能开始创建

  2. B必须完成onResume()后,A才会执行onStop()

  3. 系统保证:A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop

2. 透明主题(B是半透明/对话框)

特殊变化:

  • A只执行到onPause()(因为仍部分可见)

  • B正常执行完整生命周期:onCreate → onResume

  • 当B关闭时:A立即执行onResume()(无需重建)

二、Fragment切换的生命周期变化(以replace为例)

1. 无回退栈(FragmentA → FragmentB)

完整生命周期路径:

  • FragmentA

    1. onPause() → onStop():失去焦点和可见性

    2. onDestroyView():视图被销毁

    3. onDestroy() → onDetach():完全销毁并解绑

  • FragmentB

    1. onAttach():绑定到宿主Activity

    2. onCreate():初始化

    3. onCreateView() → onViewCreated():创建视图

    4. onStart() → onResume():变为可见和可交互

2. 有回退栈(addToBackStack)

关键区别:

  • FragmentA只执行到onDestroyView()(实例保留在内存)

  • 当返回时:

三、Activity与Fragment生命周期的联动

1. Activity状态变化对Fragment的影响

具体规则:

  • Activity的onPause()触发 → 所有Fragment执行onPause()

  • Activity的onStop()触发 → 所有Fragment执行onStop()

  • Activity的onDestroy()触发 → 所有Fragment执行onDestroy() → onDetach()

2. Fragment独立于Activity的生命周期
  • 当Activity已运行

    无Activity生命周期变化

  • 当Activity重建

四、常见问题

Q: Activity A启动Activity B的生命周期变化顺序?

A

  1. A先执行onPause()(失去焦点但部分可见)

  2. B依次执行:onCreate() → onStart() → onResume()(完全可见)

  3. A执行onStop()(完全不可见)

  4. 若B是透明主题:A不会执行onStop()

Q: Fragment替换时的生命周期变化?

A
无回退栈时:

  1. 旧Fragment:onPause() → onStop() → onDestroyView() → onDestroy() → onDetach()

  2. 新Fragment:onAttach() → onCreate() → onCreateView() → onViewCreated() → onStart() → onResume()

有回退栈时:

  1. 旧Fragment:onPause() → onStop() → onDestroyView()(实例保留)

  2. 新Fragment:完整初始化(同上)

  3. 返回时:新Fragment销毁 → 旧Fragment重建视图(onCreateView() → onResume()

Q: Activity生命周期如何影响Fragment?

  1. Activity的onPause()会触发所有Fragment的onPause()

  2. Activity的onStop()会触发所有Fragment的onStop()

  3. Activity的onDestroy()会触发所有Fragment的onDestroy()onDetach()

  4. Fragment无法脱离Activity存在,其生命周期由宿主Activity同步触发

关键原则

  • 前台Activity总是优先响应生命周期变化

  • Fragment的生命周期回调总是发生在宿主Activity的对应回调之间

  • 透明Activity会阻止底层Activity执行onStop()

  • 有回退栈的Fragment只会销毁视图,保留实例状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xzkyd outpaper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值