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

三蛋空间 wordpress乐云seo官网

三蛋空间 wordpress,乐云seo官网,手机浏览器直接输入网址,做模版的网站一、生命周期联动详解Activity状态Fragment状态关键联动行为onCreate()onAttach() → onCreate() → onCreateView()Activity创建时初始化Fragment在setContentView()后添加FragmentonStart()onViewCreated() → onStart()Fragment视图创建完成此时可安全操作UI元素&#xff08…

一、生命周期联动详解

Activity状态Fragment状态关键联动行为
onCreate()onAttach() → onCreate() → onCreateView()Activity创建时初始化Fragment
setContentView()后添加Fragment
onStart()onViewCreated() → onStart()Fragment视图创建完成
此时可安全操作UI元素(findViewById)
onResume()onResume()Fragment进入前台
启动动画/传感器等敏感操作
onPause()onPause()Fragment失去焦点
必须在此保存即时数据(如EditText内容)
onStop()onStop() → onDestroyView()Fragment视图被销毁
释放Bitmap等视图相关资源
onRestart()onStart()从后台返回时重建视图
触发onCreateView()重新创建UI
onDestroy()onDestroy() → onDetach()彻底解绑Fragment
清除对Activity的引用防止内存泄漏

二、核心场景分析

1. Activity启动包含Fragment

关键点

  • Fragment的onCreateView()在Activity的onCreate()阶段调用

  • Fragment的onViewCreated()在Activity的onStart()阶段调用

  • UI操作安全点:在onViewCreated()后操作视图元素

2. 按下Home键再返回

关键点

  • onStop()后系统可能销毁Fragment视图(调用onDestroyView()

  • 返回时触发onCreateView()重建UI

  • 状态保存:使用onSaveInstanceState()保存数据

3. Fragment替换操作

关键点

  • 旧Fragment:onPause → onStop → onDestroyView

  • 新Fragment:onAttach → onCreate → onCreateView

  • 回退栈addToBackStack()会保留旧Fragment的onDestroy之前状态

三、生命周期最佳实践

1. 初始化操作分配
操作类型Activity位置Fragment位置原因
视图绑定onCreate()onCreateView()视图创建阶段
数据初始化onCreate()onCreate()早于视图创建
监听器注册onStart()onViewCreated()避免内存泄漏
动画/传感器onResume()onResume()界面可见时启动
资源释放onStop()onDestroyView()及时释放大内存对象
2. 状态保存与恢复
// Activity中
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("KEY", "重要数据");
}protected void onCreate(Bundle savedInstanceState) {if (savedInstanceState != null) {String data = savedInstanceState.getString("KEY");}
}// Fragment中
public void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("FRAG_KEY", "片段数据");
}public void onViewCreated(View view, Bundle savedInstanceState) {if (savedInstanceState != null) {String data = savedInstanceState.getString("FRAG_KEY");}
}

四、总结

Q1: Activity和Fragment生命周期如何联动?

  1. 创建阶段

    • Activity的onCreate()触发Fragment的onAttach()→onCreate()→onCreateView()

    • Activity的onStart()触发Fragment的onViewCreated()→onStart()

  2. 前台交互

    • Activity的onResume()触发Fragment的onResume()

    • Activity的onPause()触发Fragment的onPause()

  3. 后台阶段

    • Activity的onStop()触发Fragment的onStop()→onDestroyView()

    • 返回时Activity的onRestart()→onStart()触发Fragment的onCreateView()→onViewCreated()→onStart()

  4. 销毁阶段

    • Activity的onDestroy()触发Fragment的onDestroy()→onDetach()

Q2: 按下Home键再返回会发生什么?

  1. 按下Home键

    • Activity:onPause() → onStop()

    • Fragment:onPause() → onStop() → onDestroyView()(视图被销毁)

  2. 返回应用

    • Activity:onRestart() → onStart()

    • Fragment:onCreateView()(重建UI)→ onViewCreated() → onStart()

    • Activity:onResume()

    • Fragment:onResume()

  3. 数据恢复

    • 通过onSaveInstanceState()保存的数据在onCreateView()的Bundle参数中恢复

Q3: Fragment的onCreate和onCreateView区别?

  • onCreate()

    • 调用时机:在Fragment附加到Activity后立即调用

    • 用途:初始化非UI组件(数据加载、ViewModel初始化)

    • 特点:此时Fragment的视图尚未创建

  • onCreateView()

    • 调用时机:在需要绘制Fragment UI时调用

    • 用途:创建并返回Fragment的视图层级(inflate布局)

    • 特点:避免在此执行耗时操作(阻塞UI渲染)

Q4: 如何避免Fragment内存泄漏?

  1. 视图清理

    • onDestroyView()中解除视图绑定:

    override fun onDestroyView() {super.onDestroyView()binding = null // 使用ViewBinding时
    }
  2. 监听器注销

    • onPause()中注销广播接收器、位置监听器等

  3. 异步任务管理

    • 使用viewLifecycleOwner.lifecycleScope启动协程

    • onDestroyView()中取消RxJava订阅

  4. Context引用

    • 使用requireContext()替代getContext()(自动空安全检测)

Q5: 什么时候用Fragment的onViewStateRestored?

在视图状态恢复后调用(onCreateView()之后,onStart()之前):

  1. 典型场景

    • 恢复RecyclerView滚动位置

    • 更新依赖保存状态的UI组件

  2. 优势

    • 此时视图层级已完全重建

    • 保存的状态(如EditText内容)已自动恢复

  3. 使用示例

    override fun onViewStateRestored(savedInstanceState: Bundle?) {super.onViewStateRestored(savedInstanceState)savedInstanceState?.let {recyclerView.scrollToPosition(it.getInt("SCROLL_POS"))}
    }

重点

  1. 强调「Fragment生命周期完全依赖宿主Activity」

  2. 记住关键顺序:Activity onStart → Fragment onViewCreated

  3. 必提视图销毁:按下Home键会触发Fragment的onDestroyView()

  4. 解决方案:ViewModel+onSaveInstanceState保存状态

  5. 安全实践:在onDestroyView()中释放所有视图资源

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

相关文章:

  • 用易语言做攻击网站软件网络营销特点是什么
  • 网站定制开发前期要有一定的规划百度网盟推广费用投入
  • 9. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--Web API 接口与前端集成:把能力对外开放
  • 数据库的安全与保护(终)
  • AI 应用层革命(四)——人机共生的哲学与终极形态
  • 工程建设业主官方网站做视频网站的备案要求
  • 设计模式-适配器模式(Adapter)
  • 为什么建设法律法规网站东莞网站制作公司
  • 成品网站w灬源码伊甸如何选择网站托管公司
  • Lamda表达式
  • 面经分享--招银云创汇总
  • IDEA Debug高阶技巧
  • 备案做电影网站怎么自己制作一个网站
  • 腾讯云部署gitlab
  • 杭州蚂蚁 做网站的公司html官方下载
  • 构建AI智能体:七十五、用扣子平台创建工作流:从自动化到智能化的进阶之路
  • 高通AR1平台的智能眼镜全检系统
  • 搜索引擎推广的基本方法有海南搜索引擎优化
  • 做推广效果哪个网站好十堰哪家网站制作公司技术好
  • 爬完数据就完了?用 Pandas 做数据清洗与预处理
  • nestjs 架构篇:控制器、服务、数据访问
  • 【STM32】CLion STM32开发环境搭建
  • 电子商务网站开发系统平台湖北建设厅网站查询
  • 如何网站建设团队盲盒怎么制作教程
  • 网站建设北京贵金华竞价排名 金华企业网站建设
  • 腾讯微信山东区建站推广中心网站建设与管理 自考
  • 从 Thread 到 Executor 框架
  • 万字细啄常见排序算法
  • 大连网站设计收费标准海口网站建设咨询
  • 网站如何做3d产品展示做软件的公司网站有哪些