Android7.0 分屏 Activity 与 Fragment 生命周期(二)

      小菜前段时间整理过一些关于 Activity 与 Fragment 生命周期的小博文:Android7.0 分屏下 Activity 与 Fragment 生命周期(一)我们真的了解 Activity 与 Fragment 的生命周期吗?今天继续这个话题,稍稍整理一下,在 Android7.0 分屏情况下,两个 Activity 的生命周期之间的执行顺序,且同样暂不研究横竖屏切换时的过程。
      小菜根据输出的两个 Demo 生命周期简单整理一下交互间的执行顺序。


小菜操作步骤如下:

  1. 首次启动初始化 ACE09_1,其执行生命周期为:onCreate -> onStart -> onResume;

  2. 点击手机的【任务键】, ACE09_1 其执行生命周期为:onPause -> onStop;

  3. ACE09_1 进行分屏操作,占据屏幕一半,其执行生命周期为:onDestroy -> onCreate -> onStart -> onResume -> onPause;

  4. 操作屏幕未挡住的下半部分,首次启动初始化 ACE09_2,其执行生命周期为:onCreate -> onStart -> onResume;若 ACE09_2 已启动处于后台,则此时生命周期为:onDestroy -> onCreate -> onStart -> onResume;


  5. 此时点击 ACE09_2 不会执行任何生命周期,因为此时 ACE09_2 是最新的操作页面;但若点击 ACE09_1 屏幕时,执行的生命周期为:ACE09_2 onPause -> ACE09_1 onResume;此时 ACE09_1 处于 onResume 状态,ACE09_2 处于 onPause 状态,若再点击 ACE09_2 屏幕时,执行生命周期为:ACE09_1 onPause -> ACE09_2 onResume


  6. 此时 ACE09_1ACE09_2 分别占据屏幕的一半,调整屏幕比例,ACE09_1 屏幕范围超过手机屏幕一半,此时响应的 ACE09_2 占据剩余不足半个手机屏幕范围,此时生命周期:ACE09_1 (onPause ->) onStop -> onDestroy -> onCreate -> onStart -> onResume -> onPause;若调整的是 ACE09_2 屏幕范围超过手机屏幕一半,执行的则是 ACE09_2 的生命周期,与刚才一致。重点是 onPause 是否执行,则需要看哪个 Activity 的当前状态,若处于 onResume 状态则先执行 onPause,若正好处于 onPause 状态则不再执行 onPause 状态。

  7. 此时两个 Activity 处于一个大于手机屏幕一半,另一个占据另一部分,若调整屏幕范围,使两个 Activity 各占据手机屏幕一半,其执行生命周期为:(onPause ->) onStop -> onDestroy -> onCreate -> onStart -> onResume;执行的生命周期是屏幕范围占据超过手机屏幕一半的 Activity,同样 onPause 是否执行则需要看哪个 Activity 的当前状态,若处于 onResume 状态则先执行 onPause,若正好处于 onPause 状态则不再执行 onPause 状态

  8. 由第 6 步后,调整屏幕分割线,使占据屏幕超过一半的 Activity 与少于屏幕一半的 Activity 对调,Demo 测试 ACE09_1 占据屏幕由大到小,其执行顺序为:ACE09_2
    onPause -> onStop -> ACE09_1 onStop -> ACE09_2 onDestroy -> ACE09_1 onDestroy -> ACE09_2 onCreate -> onStart -> onResume -> ACE09_1 onCreate -> onStart -> onResume -> onPause

    Tips:
    <1> 此时的生命周期的执行顺序并不是绝对的,优先执行哪个 Activity 生命周期需要看这个 Activity 是否处于 onResume 状态;
    <2> 两个 Activity 都需要先销毁完成后,再重新绘制;而在销毁和创建过程中,两个 Activity 的生命周期是交互进行的,并非先执行完一个以后在执行另一个 Activity 的生命周期。

  9. 测试 ACE09_1 在屏幕上半部分,ACE09_2 处于屏幕下半部分,调整屏幕分割线,将处于下半部分的 Activity 划到底部,只留下上半部分 Activity,此时生命周期为:ACE09_1 onStop -> onDestroy -> onCreate -> onStart -> onResume -> onPause -> ACE09_2 onPause -> onStop -> ACE09_1 onResume,其生命周期并不绝对,是两个 Activity 交互执行;调整屏幕分割线,将处于上半部分 Activity 划到顶部,只留下下半部分 Activity,此时生命周期为:ACE09_2 onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume -> ACE09_1 onStop

  1. 点击手机【分屏】按键,会将处于屏幕下半部分的 Activity 关闭,执行周期为:onPause -> onStop;


  2. ACE09_2 处于屏幕下半部分,且处于 onResume 状态,此时点击屏幕【返回】按键,此时 ACE09_2 会销毁,而 ACE09_1 不变,不会占据整个屏幕,此时生命周期为:ACE09_2 onPause -> onStop -> onDestroy;若 ACE09_2 处于屏幕下半部分,且 ACE09_1 处于 onResume 状态,此时点击屏幕【返回】按键,此时 ACE09_1 会销毁,且 ACE09_2 会占据整个屏幕范围,其执行周期为:ACE09_1 onPause -> ACE09_2 onResume -> ACE09_1 onStop -> onDestroy -> ACE09_2 onPause -> onStop -> onDestroy -> onStart -> onResume

来源: 阿策小和尚

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android的开发中我们大部分都是和Activity打交道,而想很好的运用Activity首先必须要清楚Acti...
    云天随笔阅读 1,237评论 0 1
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    安卓Boy阅读 1,789评论 3 5
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    mouekz阅读 658评论 0 0
  • 1.正常情况下的生命周期 1.onCreate: 与onDestory配对,表示Activity被创建,这是生命...
    S_ZY阅读 719评论 0 6
  • 故事发生在一对兄弟身上……有为银行家有两个孙子,银行家很疼爱他们。哥哥经常陪祖父去听法,后来就出家为僧了,后来,他...
    云峰寺小和尚阅读 390评论 0 0