写点什么

想搞懂 Jetpack 架构可以不搞懂生命周期知识吗?,阿里 Android 面试必问

用户头像
Android架构
关注
发布于: 18 小时前
  • Activity 被完全销毁掉,但是状态会被保存,


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


而且会在新的 Activity 中恢复该状态


  • onCreate 和 onRestoreInstanceState 方法中的 bundle 是一样的


[](


)5. 单 Activity 弹出 Dialog


========================================================================================


触发步骤:


  • 在 API 24+上开启多窗口模式失去焦点时

  • 其它应用部分遮盖当前 APP,比如弹出权限授权 dialog

  • 弹出 intent 选择器时,比如弹出系统的分享 dialog



该场景不适用于以下情况:


  • 相同 APP 中弹 dialog,比如弹出 AlertDialog 或者 DialogFragment 不会导致 Activity onPause 发生调用

  • 系统通知。当用户下拉系统通知栏时,不会导致下面的 Activity onPause 发生调用。


[](


)6. 多个 Activity 跳转


===================================================================================


触发步骤:


  • activity1 跳转到 activity2

  • 按返回按钮



注意:activity1 跳转到 activity2 正确的调用顺序是


->activity1.onPause



->activity2.onCreate



->activity2.onStart



->activity2.onResume



->activity1.onStop



->activity1.onSaveInstanceState


在该场景下,当新的 activity 启动时,activity1 处于 STOPPED 状态下(但是没有被销毁),这与用户按 Home 键有点类似。当用户按返回按钮时,activity2 被销毁掉。


状态管理:


  • onSaveInstanceState 会被调用,但是 onRestoreInstanceState 不会。当 activity2 展示在前台时,如果发生了旋转屏幕,当 activity1 再次获得焦点时,它将会被销毁并且重建,这就是为什么 activity1 在失去焦点时为什么需要保存状态。

  • 如果系统杀死了 app 进程,该场景后面会介绍到


[](


)7. 多个 Activity 跳转,并且旋转屏幕


==========================================================================================


  • activity1 跳转到 activity2

  • 在 activity2 上旋转屏幕

  • 按返回按钮



注意: 当返回 activity1 时,必须保证屏幕是保持旋转后的状态,否则并不会调用 onDestroy 方法。而且是在 activity1 回到前台时才会主动掉 onDestroy


状态管理:


保存状态对所有的 activity 都非常重要,不仅仅是对前台 activity。所有在后台栈中的 activity 在 configuration 发生改变时重建 UI 时都需要将保存的状态恢复回来。


[](


)8. 多个 Activity 跳转,被系统 kill 掉 app


===============================================================================================


  • activity1 跳转到 activity2

  • 在 activity2 上按 Home 键

  • 系统资源不足 kill app



[](


)9. 总结


=========================================================================


本文主要是从 Google 大佬 Jose Alcérreca 的文章翻译过来。他假设的这 7 个关于 activity 的生命周期场景,对了解 Lifecycle 有非常大的帮助。甚至对于面试都是有非常大的帮助。


后续我会写一系列关于 Jetpack 的文章。文风将会延续我的一贯风格,深入浅出,坚持走高质量创作路线。本文是我讲解 Lifecycle 的开篇之作。生命周期是 Lifecycle、LiveDa、ViewModel 等组件的基础。在对生命周期知识掌握不牢靠的情况,去研究那些组件,无异于空中楼阁。


so,关注我,带你一步一步解锁 Jetpack 相关知识,绝对不让你走弯路,不让你吃暗亏。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
想搞懂Jetpack架构可以不搞懂生命周期知识吗?,阿里Android面试必问