美文网首页
Activity - 处理状态变更

Activity - 处理状态变更

作者: 行走中的3卡 | 来源:发表于2022-12-16 20:15 被阅读0次

    用户触发系统触发的不同事件会导致 Activity 从一个状态转换到另一个状态.

    1. 配置发生了更改

    横屏和竖屏之间的屏幕方向变化;
    语言或输入设备的改变等

    当配置发生更改时,Activity 会被销毁并重新创建。
    原始 Activity 实例将触发 onPause()、onStop() 和 onDestroy() 回调。
    系统将创建新的 Activity 实例,
    并触发 onCreate()、onStart() 和 onResume() 回调。

    结合使用 ViewModels、onSaveInstanceState() 方法和/或持久性本地存储,
    可使 Activity 的界面状态在配置发生更改后保持不变

    1.1 处理多窗口模式的情况

    在多窗口模式下,虽然用户可以看到两个应用,
    但只有与用户交互的应用位于前台且具有焦点
    该 Activity 处于“已恢复”状态,而另一个窗口中的应用则处于“已暂停”状态。

    2. Activity 或对话框显示在前台

    (1)如果有的 Activity 或对话框出现在前台,并且局部覆盖了正在进行的 Activity,
    则被覆盖的 Activity 会失去焦点并进入“已暂停”状态。
    然后,系统会调用 onPause()。

    当被覆盖的 Activity 返回到前台并重新获得焦点时,会调用 onResume()。

    (2)如果有新的 Activity 或对话框出现在前台,夺取了焦点且完全覆盖了正在进行的 Activity,
    则被覆盖的 Activity 会失去焦点并进入“已停止”状态。
    然后,系统会快速地接连调用 onPause() 和 onStop()。

    3.用户点按“返回”按钮

    如果 Activity 位于前台,并且用户点按了返回按钮,Activity 将依次经历 onPause()、onStop() 和 onDestroy() 回调。
    活动不仅会被销毁,还会从返回堆栈移除

    需要注意的是,在这种情况下,默认不会触发 onSaveInstanceState() 回调。
    此行为基于的假设是,用户点按返回按钮时不期望返回 Activity 的同一实例。
    不过,可以通过替换 onBackPressed() 方法实现某种自定义行为,例如“确认退出”对话框。
    如果替换 onBackPressed() 方法,我们仍然强烈建议您从被替换的方法调用 super.onBackPressed()
    否则,返回按钮的行为可能会让用户感觉突兀。

    4. 系统终止应用进程

    如果某个应用处于后台 并且系统需要为前台应用 释放额外的内存
    则系统可能会 终止后台应用 以释放 更多内存

    参考:
    https://developer.android.google.cn/guide/components/activities/state-changes#cco

    相关文章

      网友评论

          本文标题:Activity - 处理状态变更

          本文链接:https://www.haomeiwen.com/subject/yxbfqdtx.html