首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android7.0 分屏 Activity 与 Fragment 生命周期(二)

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

作者头像
阿策小和尚
发布2019-08-12 14:45:53
9070
发布2019-08-12 14:45:53
举报
文章被收录于专栏:阿策小和尚阿策小和尚

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


和尚我操作步骤如下:

  1. 首次启动初始化 ACE09_1,其执行生命周期为:onCreate -> onStart -> onResume;
  1. 点击手机的【任务键】, ACE09_1 其执行生命周期为:onPause -> onStop;
  1. ACE09_1 进行分屏操作,占据屏幕一半,其执行生命周期为:onDestroy -> onCreate -> onStart -> onResume -> onPause;
  1. 操作屏幕未挡住的下半部分,首次启动初始化 ACE09_2,其执行生命周期为:onCreate -> onStart -> onResume;若 ACE09_2 已启动处于后台,则此时生命周期为:onDestroy -> onCreate -> onStart -> onResume;
  1. 此时点击 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
  1. 此时 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 状态。
  1. 此时两个 Activity 处于一个大于手机屏幕一半,另一个占据另一部分,若调整屏幕范围,使两个 Activity 各占据手机屏幕一半,其执行生命周期为:(onPause ->) onStop -> onDestroy -> onCreate -> onStart => onResume;执行的生命周期是屏幕范围占据超过手机屏幕一半的 Activity,同样 onPause 是否执行则需要看哪个 Activity 的当前状态,若处于 onResume 状态则先执行 onPause,若正好处于 onPause 状态则不再执行 onPause 状态
  1. 由第 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 -> onPauseTips: <1> 此时的生命周期的执行顺序并不是绝对的,优先执行哪个 Activity 生命周期需要看这个 Activity 是否处于 onResume 状态; <2> 两个 Activity 都需要先销毁完成后,再重新绘制;而在销毁和创建过程中,两个 Activity 的生命周期是交互进行的,并非先执行完一个以后在执行另一个 Activity 的生命周期。
  1. 测试 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;
  1. 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。

下面的是和尚我的公众号,欢迎闲来吐槽哦~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿策小和尚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档