一、 生命周期
1.1 Dialog 弹出时
1、如果是单纯是创建的 dialog ,Activity 并不会执行生命周期的方法
2、但是如果是跳转到一个不是全屏的 Activity 的话, 当然就是按照正常的生命周期来执行了
3、即 onPasue() -> onPause() ( 不会执行原 Activity 的 onStop() , 否则上个页面就不显示了 )
1.2 横竖屏切换时

1、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置 Activity 的 android:configChanges="orientation" 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置 Activity 的 android:configChanges="orientation|keyboardHidden" 时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法
注意:还有一点,非常重要,一个 Android 的变更细节!当 API >12 时,需要加入 screenSize 属性,否则屏幕切换时即使你设置了 orientation 系统也会重建 Activity !
1.3 不同场景下 Activity 生命周期的变化过程

1、启动 Activity : onCreate() ---> onStart() ---> onResume() ,Activity 进入运行状态。
2、锁屏时会执行 onPause() 和 onStop() , 而开屏时则应该执行 onStart() onResume()

3、Activity 退居后台: 当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏: onPause() ---> onStop() ,进入停滞状态。
4、Activity 返回前台: onRestart() ---> onStart() ---> onResume() ,再次回到运行状态。
5、Activity 退居后台: 且系统内存不足, 系统会杀死这个后台状态的 Activity ,若再次回到这个 Activity ,则会走 onCreate()--> onStart() ---> onResume()
1.4 将一个 Activity 设置成窗口的样式

只需要给我们的 Activity 配置如下属性即可。
android:theme="@android:style/Theme.Dialog"
1.5 退出已调用多个 Activity 的 Application
1、通常情况用户退出一个 Activity 只需按返回键,我们写代码想退出 activity 直接调用 finish() 方法就行。

2、发送特定广播:
(1)在需要结束应用时, 发送一个特定的广播,每个 Activity 收到广播后,关闭 即可。
(2)给某个 activity 注册接受接受广播的意图 registerReceiver(receiver, filter)
(3)如果过接受到的是 关闭 activity 的广播 activity finish() 掉
3、递归退出
(1)就调用 finish() 方法 把当前的 Activity 退出
(2)在打开新的 Activity 时使用 startActivityForResult , 然后自己加标志, 在 onActivityResult 中处理, 递归关闭。
4、其实
(1)也可以通过 intent 的 flag 来实现 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 激活一个新的 activity。
(2)此时如果该任务栈中已经有该 Activity , 那么系统会把这个 Activity 上面的所有 Activity 干掉。
(3)其实相当于给 Activity 配置的启动模式为 SingleTop 。
5、记录打开的 Activity
(1)每打开一个 Activity , 就记录下来。
(2)在需要退出时 , 关闭每一个 Activity
1.6 锁定屏与解锁屏幕,Activity 如何执行生命周期

1、锁屏时会执行 onPause() 和 onStop() , 而开屏时则应该执行 onStart() onResume()
1.7 修改 Activity 进入和退出动画

2、可以通过两种方式 , 一是通过定义 Activity 的主题 ,二是通过覆写 Activity 的 overridePendingTransition 方法。
3、通过设置主题样式在 styles.xml 中编辑代码 , 添加 themes.xml 文件:在 AndroidManifest.xml 中给指定的 Activity 指定 theme。
4、覆写 overridePendingTransition 方法:overridePendingTransition(R.anim.fade, R.anim.hold);
1.8 Activity 的四种状态

1、runnig :用户可以点击,activity 处于栈顶状态。
2、paused :activity 失去焦点的时候,被一个非全屏的 activity 占据或者被一个透明的 activity 覆盖,这个状态的 activity并没有销毁,它所有的状态信息和成员变量仍然存在,只是不能够被点击。(内存紧张的情况,这个 activity 有可能被回收)

3、stopped :这个 activity 被另外一个 activity 完全覆盖,但是这个 activity 的所有状态信息和成员变量仍然存在(除了内存紧张)
4、killed :这个 activity 已经被销毁,其所有的状态信息和成员变量已经不存在了。
1.9 如何处理异常退出

1、Activity 异常退出的时候 --> onPause() --> onSaveInstanceState() --> onStop() --> onDestory()
2、需要注意的是 onSaveInstanceState() 方法与 onPause 并没有严格的先后关系,有可能在 onPause 之前,也有可能在其后面调用,但会在 onStop() 方法之前调用
3、异常退出后又重新启动该 Activity --> onCreate() --> onStart() --> onRestoreInstanceState() --> onResume()

4、搞懂这个生命周期的执行后就可以回答了,首先要知道面试官的意思:是要重新启动并恢复这个 Activity 还是说直接退出整个 app
5、如果要恢复则要在 onSaveInstanceState() 中进行保存数据并在 onRestoreInstanceState() 中进行恢复
6、如果是要退出 app 的话就要捕获全局的异常信息,并退出 app
7、当然个人建议是使用 UncaughtExceotionHandler 来捕获全局异常进行退出 app 的操作,这样会减少之前崩溃所造成的后遗症!
1.10 什么是 onNewIntent

1、如果 IntentActivity 处于任务栈的顶端,也就是说之前打开过的 Activity ,现在处于 onPause 、 onStop 状态的话,其他应用再发送 Intent 的话
2、执行顺序为:onNewIntent,onRestart,onStart,onResume。










