管理Activity的生命周期
管理Activity的生命周期
当一个用户导航通过、退出或回到你的app,你的app中的Activity实例在它们生命周期的不同状态之间进行转换。例如,当你的Activity第一次被启动,它来系统的前台并接受用户的关注。在这个过程,Android系统在Activity上调用了一系列的生命周期方法,在这个Activity中你设置好用户界面和其他组件。如果用户执行动作启动了另一个Activity或切换到另一个app,Android在你的Activity上调用另一组生命周期方法,因为它移到了后台(在这里Activity不再可见,但是实例和它的状态仍然是完整的)。
在生命周期回调函数中,你可以声明在用户离开和重新进入时你的Activity是如何行动的。举个例子,如果你正在构建一个流媒体视频播放器,当用户切换到另一个app时,你可能会暂停这个视频并终结网络连接。当用户回来时,你能重新连接网络并允许你的用户从同样的点重新开始播放。
这个课程介绍每个Activity实例接收到的重要的生命周期方法,以及你该如何使用它们,使你的Activity做用户所期望它做的,当你的应用程序不需要系统资源时不会消耗系统资源。
启动一个Activity
不像其他的编程范例,app通过main()方法进行加载,对应于Activity的生命周期的不同阶段,Android系统调用特定的回调方法来启动Activity实例的代码。这里有一系列的回调方法来启动一个activity,也有一系列的回调方法来效果一个Activity。
这一课提供一个最重要的生命周期方法的概况,当创建一个你的Activity的实例是,告诉你如何应对第一个生命周期方法。
理解生命周期回调方法
在Activity的整个生命周期中,系统会按顺序调用一系列核心的生命周期方法,就像一个阶梯金字塔。也就是,Activity生命周期的每一个阶段就是金字塔的一个阶梯。当系统创建一个Activity实例,每一个回调方法将Activity的状态向顶端移动一步。金字塔的顶端就是Activity在前端运行并且能够和用户进行交互的点。
当用户开始离开这个Activity,系统调用另外的方法,将Activity的状态向下移到金字塔的底端,从而可以取消这个Activity。在某些情况下,Activity会只向下移动金字塔的一部分并等待(例如用户切换到其他的App),从这个点Activity可以重新移回顶端(如果用户返回到这个Activity),从用户离开的地方重新开始。
根据你的Activity的复杂程度,你可能并不一定需要实现所有的生命周期方法。但是,有一点很重要,你要理解每个方法并实现它们,你的app的表现方式和用户期待的一样。恰当的实现你的Activity的生命周期方法,可以确保在以下几方面表现良好,包括:
- 当使用你的app时接到了一个电话或切换到另一个app时不会崩溃。
- 当用户实际没有在使用它时不会占用宝贵的系统资源。
- 当用户离开你的App并在一段时间后又回来时,不会丢失用户的进度。
- 当屏幕在横摆和直摆之间旋转时不会崩溃或丢失用户的进度。
正如你在后面课程中将学习到的,导致一个Activity在上图所示的不同状态之间转变的情况有很多。然而这其中只有三个状态是可以静止的。也就是说,一个Activity只能在这三个状态中的某一个存在一段时间。
- Resumed:在这个状态下,Activity在前台运行并且用户可以与其交互。(有时也称为运行状态)
- Paused:在这个状态下,Activity被一个另一个Activity部分掩盖——另一个在前台运行的Activity是半透明的或者没有覆盖整个屏幕。Paused状态的Activity不能接收用户输入,也不能执行任何代码。
- Stopped:在这个状态下,Activity被完全隐藏了,用户看不到它;这时它被认为在后台。当停止时,Activity实例和它的状态信息例如成员变量还是被保留着的,但是它不能执行任何代码。