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

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

      小菜前段时间整理过一些关于 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

      下面的是小菜的公众号,欢迎闲来吐槽哦~


公众号.jpg
目录
相关文章
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
81 6
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
27 3
|
2月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
19 3
|
5月前
|
Android开发
Android面试题之Activity的启动模式和flag
Android Activity的四种启动模式:standard(默认,每次启动创建新实例),singleTop(栈顶复用,不走onCreate,调用onNewIntent),singleTask(栈内唯一,清除上方Activity)和singleInstance(单独栈内唯一)。启动模式在AndroidManifest.xml中配置,Intent Flags如FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP可实现类似功能。了解这些对于处理Activity栈管理至关重要。
52 0
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
18 0
|
3月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
50 4
|
4月前
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
87 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
3月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
53 0
|
4月前
|
开发工具 Android开发
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
87 1
|
5月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
121 12