Android复习(六)核心组件—>Activity 简介、生命周期、状态变更
1. 可以在activity上声明权限,来保证只在进入某个activity是否有某种权限
<manifest> <activity android:name="...." android:permission=”com.google.socialapp.permission.SHARE_POST” />
2.生命周期流程图
系统终止进程的可能性 | 进程状态 | Activity 状态 |
---|---|---|
小 | 前台(拥有或即将获得焦点) | 已创建 已开始 已恢复 |
中 | 后台(失去焦点) | 已暂停 |
大 | 后台(不可见) | 已停止 |
空 | 已销毁 |
当配置发生更改时,Activity 会被销毁并重新创建。原始 Activity 实例将触发 onPause()
、onStop()
和 onDestroy()
回调。系统将创建新的 Activity 实例,并触发 onCreate()
、onStart()
和 onResume()
回调。
结合使用 ViewModels、onSaveInstanceState() 方法和/或持久性本地存储,可使 Activity 的界面状态在配置发生更改后保持不变。在决定这些选项的组合方式时,需要考虑界面数据的复杂程度、应用的用例以及检索速度与内存使用的权衡。有关保存 Activity 界面状态的详情,请参阅保存界面状态。
5.2 处理多窗口的情况
一旦应用进入多窗口模式(适用于 Android 7.0(API 级别 24)及更高级别),系统会向当前运行的 Activity 发送配置更改通知,从而完成上述生命周期转换。如果已经处于多窗口模式的应用调整了大小,也会出现这种行为。您的 Activity 可以自行处理配置更改,也可以让系统销毁 Activity 并使用新维度重新创建一个。
有关多窗口模式生命周期的详情,请参阅多窗口模式支持页的多窗口模式生命周期部分。
在多窗口模式下,虽然用户可以看到两个应用,但只有与用户交互的应用位于前台且具有焦点。该 Activity 处于“已恢复”状态,而另一个窗口中的应用则处于“已暂停”状态。
当用户从应用 A 切换到应用 B 时,系统会对应用 A 调用 onPause()
,对应用 B 调用 onResume()
。每当用户在应用之间切换时,系统就会在这两种方法之间切换。
有关多窗口模式的详情,请参阅多窗口模式支持。
5.3 Activity或对话框显示在前台
如果有新的 Activity 或对话框出现在前台,并且局部覆盖了正在进行的 Activity,则被覆盖的 Activity 会失去焦点并进入“已暂停”状态。然后,系统会调用 onPause()
。
当被覆盖的 Activity 返回到前台并重新获得焦点时,会调用 onResume()
。
如果有新的 Activity 或对话框出现在前台,夺取了焦点且完全覆盖了正在进行的 Activity,则被覆盖的 Activity 会失去焦点并进入“已停止”状态。然后,系统会快速地接连调用 onPause()
和 onStop()
。
当被覆盖的 Activity 的同一实例返回到前台时,系统会对该 Activity 调用 onRestart()
、onStart()
和 onResume()
。如果被覆盖的 Activity 的新实例进入后台,则系统不会调用 onRestart(),而只会调用 onStart()
和 onResume()
。
注意:当用户点按“概览”或主屏幕按钮时,系统的行为就好像当前 Activity 已被完全覆盖一样。
5.4 用户点击返回按钮
如果 Activity 位于前台,并且用户点按了返回按钮,Activity 将依次经历 onPause()
、onStop()
和 onDestroy()
回调。活动不仅会被销毁,还会从返回堆栈中移除。
需要注意的是,在这种情况下,默认不会触发 onSaveInstanceState()
回调。此行为基于的假设是,用户点按返回按钮时不期望返回 Activity 的同一实例。不过,您可以通过替换 onBackPressed()
方法实现某种自定义行为,例如“confirm-quit”对话框。
如果您替换 onBackPressed()
方法,我们仍然强烈建议您从被替换的方法调用 super.onBackPressed()
。否则,返回按钮的行为可能会让用户感觉突兀。
5.5 系统终止应用程序
6.