当前位置: 首页 > news >正文

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只会销毁视图,保留实例状态

http://www.dtcms.com/a/310477.html

相关文章:

  • 多人命题系统
  • Qt 开发自动化测试框架搭建
  • 【Open3D】基础操作之三维变换
  • Nginx跨域问题与 MIME 类型错误深度排错指南:解决 MIME type of “application/octet-stream“ 报错
  • 【LeetCode刷题指南】--单值二叉树,相同的树
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:柔性驱动革命之液压人工肌肉
  • python中appium
  • 在PyCharm中将现有Gitee项目重新上传为全新项目
  • WordPress 前端显示英文,后台显示中文的设置
  • CH7216A USB Type C上的 DisplayPort 转 HDMI 2.0 转换器【CH7216A-BF】
  • JSON 对象在浏览器中顺序与后端接口返回不一致的问题
  • 基于cygwin或msmy的windows环境下的jupyterlab的C内核搭建
  • Lipschitz连续函数
  • Flutter 替换镜像源
  • 牛客——接头密匙
  • .net依赖注入框架 Autofac和MEF的对比
  • 如何在企业微信中打开外部网页或者自己开发的本地网页
  • vue+ts 基础面试题 (四)
  • 『React』 组件通信全攻略
  • 工业环境中无人叉车安全标准深度解析
  • django的数据库原生操作sql
  • 洛谷做题3:P5711 【深基3.例3】闰年判断
  • 浪潮信息PMO负责人时军受邀为PMO大会主持人
  • 如何最简单、通俗地理解线性回归算法? 线性回归模型在非线性数据上拟合效果不佳,如何在保持模型简单性的同时改进拟合能力?
  • 【C++】类和对象 上
  • JP3-3-MyClub后台后端(二)
  • JavaScript 深拷贝:从基础到完美实现
  • 使用Jeecg低代码平台实现计划管控系统建设方案--1项目前后端搭建
  • 《义龙棒球科普》棒球是韩国的国球吗·棒球1号位
  • 德国威乐集团亚太中东非洲PMO负责人和继明受邀为PMO大会主持人