Android复习(六)核心组件—>Activity 简介、生命周期、状态变更

1. 可以在activity上声明权限,来保证只在进入某个activity是否有某种权限

 <manifest>
    <activity android:name="...."
       android:permission=”com.google.socialapp.permission.SHARE_POST”

    />

  

2.生命周期流程图 

 

 

3.activity状态和内存中弹出

  系统永远不会直接终止 Activity 以释放内存,而是会终止 Activity 所在的进程。系统不仅会销毁 Activity,还会销毁在该进程中运行的所有其他内容。

 

系统终止进程的可能性进程状态Activity 状态
前台(拥有或即将获得焦点) 已创建
已开始
已恢复
后台(失去焦点) 已暂停
后台(不可见) 已停止
已销毁

 

4. 保存数据和回复数据

   当activity销毁时,应该调用 onSaveInstanceState()

   当需要恢复数据时,应该调用 onRestoreInstanceState() 而不要在onCreat中处理这些事情,虽然得到的bundle对象是相同的

 

5. Activity状态变更

   5.1 配置发生了改变

      有很多事件会触发配置更改。最显著的例子或许是横屏和竖屏之间的屏幕方向变化。其他情况,如语言或输入设备的改变等,也可能导致配置更改。

    当配置发生更改时,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.

  

posted @ 2020-04-21 14:48  王世桢  阅读(218)  评论(0编辑  收藏  举报