还是上一节的文档中,我们找到
Activity部分的介绍,这里给出地址
选择部分摘要。
简介
Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。
一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈现给用户的那个 Activity。 而且每个 Activity 均可启动另一个 Activity,以便执行不同的操作。 每次新 Activity 启动时,前一 Activity 便会停止,但系统会在堆栈(“返回栈”)中保留该 Activity。 当新 Activity 启动时,系统会将其推送到返回栈上,并取得用户焦点。 返回栈遵循基本的“后进先出”堆栈机制,因此,当用户完成当前 Activity 并按“返回”按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一 Activity。
当一个 Activity 因某个新 Activity 启动而停止时,系统会通过该 Activity 的生命周期回调方法通知其这一状态变化。Activity 因状态变化—系统是创建 Activity、停止 Activity、恢复 Activity 还是销毁 Activity— 而收到的回调方法可能有若干种,每一种回调都会为您提供执行与该状态变化相应的特定操作的机会。
Activity 生命周期
Activity 基本上以三种状态存在:
- 继续
此Activity位于屏幕前台并具有用户焦点。(有时也将此状态称作“运行中”。) - 暂停
另一个Activity位于屏幕前台并具有用户焦点,但此Activity仍可见。也就是说,另一个Activity显示在此Activity上方,并且该Activity部分透明或未覆盖整个屏幕。 暂停的Activity处于完全活动状态(Activity对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。 - 停止
该Activity被另一个Activity完全遮盖(该Activity目前位于“后台”)。 已停止的Activity同样仍处于活动状态(Activity对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。 不过,它对用户不再可见,在他处需要内存时可能会被系统终止。
如果 Activity 处于暂停或停止状态,系统可通过要求其结束(调用其 finish() 方法)或直接终止其进程,将其从内存中删除。(将其结束或终止后)再次打开 Activity 时,必须重建。
对应的生命周期方法:
onCreate(Bundle savedInstanceState)
必须实现此方法。系统会在创建您的Activity时调用此方法。您应该在实现内初始化Activity的必需组件。 最重要的是,您必须在此方法内调用setContentView(),以定义Activity用户界面的布局。始终后接onStart()。onStart()
在Activity即将对用户可见之前调用。
如果Activity转入前台,则后接onResume(),如果Activity转入隐藏状态,则后接onStop()。onRestart()
在Activity已停止并即将再次启动前调用。
始终后接onStart()onResume()
在Activity即将开始与用户进行交互之前调用。 此时,Activity处于Activity堆栈的顶层,并具有用户输入焦点。
始终后接onPause()。onPause()
系统将此方法作为用户离开Activity的第一个信号(但并不总是意味着Activity会被销毁)进行调用。 您通常应该在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。当系统即将开始继续另一个Activity时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个Activity才能继续执行。
如果Activity返回前台,则后接onResume(),如果Activity转入对用户不可见状态,则后接onStop()。onStop()
在Activity对用户不再可见时调用。如果Activity被销毁,或另一个Activity(一个现有Activity或新Activity)继续执行并将其覆盖,就可能发生这种情况。
如果Activity恢复与用户的交互,则后接onRestart(),如果Activity被销毁,则后接onDestroy()。onDestroy()
在Activity被销毁前调用。这是Activity将收到的最后调用。 当Activity结束(有人对Activity调用了finish()),或系统为节省空间而暂时销毁该Activity实例时,可能会调用它。 您可以通过isFinishing()方法区分这两种情形。
三种说法需要了解
- 整个生命周期
Activity的整个生命周期发生在onCreate()调用与onDestroy()调用之间。您的Activity应在onCreate()中执行“全局”状态设置(例如定义布局),并释放onDestroy()中的所有其余资源。例如,如果您的Activity有一个在后台运行的线程,用于从网络上下载数据,它可能会在onCreate()中创建该线程,然后在onDestroy()中停止该线程。 - 可见生命周期
Activity的可见生命周期发生在onStart()调用与onStop()调用之间。在这段时间,用户可以在屏幕上看到Activity并与其交互。 例如,当一个新Activity启动,并且此Activity不再可见时,系统会调用onStop()。您可以在调用这两个方法之间保留向用户显示Activity所需的资源。 例如,您可以在onStart()中注册一个 BroadcastReceiver 以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在onStop()中将其取消注册。在Activity的整个生命周期,当Activity在对用户可见和隐藏两种状态中交替变化时,系统可能会多次调用onStart()和onStop()。 - 前台生命周期
Activity的前台生命周期发生在onResume()调用与onPause()调用之间。在这段时间,Activity位于屏幕上的所有其他Activity之前,并具有用户输入焦点。Activity可频繁转入和转出前台 — 例如,当设备转入休眠状态或出现对话框时,系统会调用onPause()。 由于此状态可能经常发生转变,因此这两个方法中应采用适度轻量级的代码,以避免因转变速度慢而让用户等待。

协调 Activity
当Activity A 启动Activity B时一系列操作的发生顺序:Activity A的 onPause() 方法执行。Activity B 的 onCreate()、onStart()和 onResume()方法依次执行。(Activity B 现在具有用户焦点。)
然后,如果Activity A 在屏幕上不再可见,则其 onStop() 方法执行。
您可以利用这种可预测的生命周期回调顺序管理从一个 Activity 到另一个Activity 的信息转变。 例如,如果您必须在第一个 Activity 停止时向数据库写入数据,以便下一个Activity 能够读取该数据,则应在onPause() 而不是 onStop() 执行期间向数据库写入数据。
需要注意的地方
如果 Activity 转入对用户不可见状态,则后接 onStop()。
即onStop()在 Activity对用户不再可见时调用。
也就是没有完全遮盖的时候,第一个Activity是不会调用 onStop()