Activity - 处理状态变更

2022-12-16  本文已影响0人  行走中的3卡

用户触发系统触发的不同事件会导致 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

上一篇下一篇

猜你喜欢

热点阅读