专栏首页阿策小和尚Android7.0 分屏 Activity 与 Fragment 生命周期(二)

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

和尚我前段时间整理过一些关于 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。

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

本文分享自微信公众号 - 阿策小和尚(gh_8297e718c166),作者:阿策小和尚

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Flutter 专题】92 图解 Dart 单线程实现异步处理之 Isolate (一)

    和尚刚尝试了 Future 和 async-await 实现的简单异步操作,但对于耗时较长的异步该如何处理呢?对于 Android 来说可以新开一个线程单独处理...

    阿策
  • 【Flutter 专题】88 初识状态管理 Bloc (三)

    和尚刚学习了 FlutterBloc 的基本用法,使用的场景还很简单,主要是单一 Bloc 的应用,今天和尚继续尝试多个 Bloc 共用的场景;

    阿策
  • 初识 RxPermissions

    和尚曾经在面试 Demo 中处理过权限方面的问题,当时的权限判断都是自己来处理的,不够灵活方便,封装的还远远不够,这次和尚初步尝试一下 RxPerm...

    阿策
  • python pynput监听键盘

    py3study
  • 教育SaaS工具:从不同赛道出发,在同一赛道相遇

    ? 来源: 本文已获授权,内容转载自 黑板洞察(公众号ID:heibandongcha) 作者: 刘征 ---- ? 导语 随着轰轰烈烈的资本大潮退去,近些年...

    腾讯SaaS加速器
  • String - 344. Reverse String

    Write a function that reverses a string. The input string is given as an array o...

    用户5705150
  • Codeforces Round #526 (Div. 2) B. Kvass and the Fair Nut(思维)

    题目链接:http://codeforces.com/contest/1084/problem/B

    Ch_Zaqdt
  • ZSTU 4245 KI的斐波那契(dfs)

    题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4245

    Ch_Zaqdt
  • 0536-5.15.0-如何使用Hue集成RDBMS数据库

    Hue是一个以Hadoop平台为基础的Web客户端工具,Hue不仅可以集成大数据平台的Hive、Impala、HBase、Solr等组件,提供易于操作的Web界...

    Fayson
  • 原始语料库

    明天依旧可好

扫码关注云+社区

领取腾讯云代金券