0
点赞
收藏
分享

微信扫一扫

Android之Activity 总结


一、 生命周期

1.1 Dialog 弹出时

1、如果是单纯是创建的 ​​dialog​​​ ,​​Activity​​ 并不会执行生命周期的方法

2、但是如果是跳转到一个不是全屏的 ​​Activity​​ 的话, 当然就是按照正常的生命周期来执行了

3、即 ​​onPasue()​​​ -> ​​onPause()​​​ ( 不会执行原 ​​Activity​​​ 的 ​​onStop()​​ , 否则上个页面就不显示了 )

1.2 横竖屏切换时

Android之Activity 总结_生命周期

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 生命周期的变化过程

Android之Activity 总结_android_02

1、启动 ​​Activity​​​ : ​​onCreate()​​​ ---> ​​onStart()​​​ ---> ​​onResume()​​​ ,​​Activity​​ 进入运行状态。

2、锁屏时会执行 ​​onPause()​​​ 和 ​​onStop()​​​ , 而开屏时则应该执行 ​​onStart()​​​ ​​onResume()​

Android之Activity 总结_activty生命周期_03

​3、Activity​​​ 退居后台: 当前 ​​Activity​​​ 转到新的 ​​Activity​​​ 界面或按 ​​Home​​​ 键回到主屏: ​​onPause()​​​ ---> ​​onStop()​​ ,进入停滞状态。

​4、Activity​​​ 返回前台: ​​onRestart()​​​ ---> ​​onStart()​​​ ---> ​​onResume()​​ ,再次回到运行状态。

​5、Activity​​​ 退居后台: 且系统内存不足, 系统会杀死这个后台状态的 ​​Activity​​​ ,若再次回到这个 ​​Activity​​​ ,则会走 ​​onCreate()​​​--> ​​onStart()​​​ ---> ​​onResume()​

1.4 将一个 Activity 设置成窗口的样式

Android之Activity 总结_ide_04

只需要给我们的 ​​Activity​​ 配置如下属性即可。

​android:theme="@android:style/Theme.Dialog"​

1.5 退出已调用多个 Activity 的 Application

1、通常情况用户退出一个 ​​Activity​​​ 只需按返回键,我们写代码想退出 ​​activity​​​ 直接调用 ​​finish()​​ 方法就行。

Android之Activity 总结_activty生命周期_05

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 如何执行生命周期

Android之Activity 总结_activty生命周期_06

1、锁屏时会执行 ​​onPause()​​​ 和 ​​onStop()​​​ , 而开屏时则应该执行 ​​onStart()​​​ ​​onResume()​

1.7 修改 Activity 进入和退出动画

Android之Activity 总结_ide_07

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 的四种状态

Android之Activity 总结_activty生命周期_08

​1、runnig​​​ :用户可以点击,​​activity​​ 处于栈顶状态。

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

Android之Activity 总结_android_09

​3、stopped​​​ :这个 ​​activity​​​ 被另外一个 ​​activity​​​ 完全覆盖,但是这个 ​​activity​​ 的所有状态信息和成员变量仍然存在(除了内存紧张)

​4、killed​​​ :这个 ​​activity​​ 已经被销毁,其所有的状态信息和成员变量已经不存在了。

1.9 如何处理异常退出

Android之Activity 总结_activty生命周期_10

​1、Activity​​​ 异常退出的时候 --> ​​onPause()​​​ --> ​​onSaveInstanceState()​​​ --> ​​onStop()​​​ --> ​​onDestory()​

2、需要注意的是 ​​onSaveInstanceState()​​​ 方法与 ​​onPause​​​ 并没有严格的先后关系,有可能在 ​​onPause​​​ 之前,也有可能在其后面调用,但会在 ​​onStop()​​ 方法之前调用

3、异常退出后又重新启动该 ​​Activity​​​ --> ​​onCreate()​​​ --> ​​onStart()​​​ --> ​​onRestoreInstanceState()​​​ --> ​​onResume()​

Android之Activity 总结_ide_11

4、搞懂这个生命周期的执行后就可以回答了,首先要知道面试官的意思:是要重新启动并恢复这个 ​​Activity​​​ 还是说直接退出整个 ​​app​

5、如果要恢复则要在 ​​onSaveInstanceState()​​​ 中进行保存数据并在 ​​onRestoreInstanceState()​​ 中进行恢复

6、如果是要退出 ​​app​​​ 的话就要捕获全局的异常信息,并退出 ​​app​

7、当然个人建议是使用 ​​UncaughtExceotionHandler​​​ 来捕获全局异常进行退出 ​​app​​ 的操作,这样会减少之前崩溃所造成的后遗症!

1.10 什么是 onNewIntent

Android之Activity 总结_activty生命周期_12

1、如果 ​​IntentActivity​​​ 处于任务栈的顶端,也就是说之前打开过的 ​​Activity​​​ ,现在处于 ​​onPause​​​ 、 ​​onStop​​​ 状态的话,其他应用再发送 ​​Intent​​ 的话

2、执行顺序为:​​onNewIntent​​​,​​onRestart​​​,​​onStart​​​,​​onResume​​。


举报

相关推荐

0 条评论