activity学习笔记
理解:
activity 是 android 的四大组件之一,可以说是 app 程序的门面,是用户与程序及进行交互的地方。理解 activity 的生命周期,和熟悉其中的重要方法,是学习 android 的基础。
生命周期:
一个 activity 有四种状态,分别是运行状态,暂停状态,停止状态,销毁状态。
状态 | 描述 | 对应的生命周期方法 |
---|---|---|
运行状态 | 处于栈顶,可见可交互 | onStart(),onResume() |
暂停状态 | 非栈顶,可见不可交互 | onPause() |
停止状态 | 非栈顶,不可见,不可交互 | onStop() |
销毁状态 | 移除出返回栈 | onDestroy() |
注意: 系统是最不愿意回收处于运行状态的 activity 的内存,在内存吃紧的时候系统有保留回收暂停状态以下的 activity 的权利,即有可能会在 onPause() 调用结束后,不再调用 onStop(),onDestroy() 直接回收 activivty 内存,因此一些关键数据应该再 onPause() 得到持久化保存。
我们来看看 activity 的生命周期回调方法(google官网下的):
方法 | 调用时刻 |
---|---|
onCreate | activity 被创建时 |
onStart | activity 由不见变可见时 |
onResume | activity 准备好和用户进行交互时 |
onPause | activity 在屏幕上可见,但是失去了可交互时 |
onStop | activity 完全不可见时 |
onDestroy | activity 被销毁,移除返回栈时 |
我们可以走一下代码看看各个方法的调用顺序:
1.创建两个 activity 分别是 FirstActivity 和 SecondActivity,然后在两个 activity 中各添加一个按钮,用来启动下一个 activity 和返回上一个 activity,效果如下:
2.然后分别重写两个 activity 中的生命回调方法,打印一下输出日记,查看执行情况。
3.执行结果分析:
运行 app 日记打印输出如下
点击START_SECOND_ACTIVITY,日记输出如下
点击BACK_FIRST_ACTIVITY,日记输出如下
退出程序,日记输出如下
从上面的结果可以知道,activity 由创建到可见会连续调用onCreate->onStart->onResume,当启动另外一个 activity 时,会先暂停然后停止,onPause->onStop,当从再次返回这个 activity 会调用 onRestart->onStart->onResume,退出程序会暂停到停止再到销毁。
这只是 FirstActivity 的日记输出,现在我们看看两个 activity 的日记输出
请仔细看看输出顺序,会得到如下结论:
(一个 activity 启动后在启动另外一个 activity,然后返回上一 activity,最后退出程序)
当在一个 activity 启动另外一个或者返回上一个 activity 时,当前的 activity 中的 onPause 会得到执行,使当前 activity 进入暂停状态,完后才会调用另一个 activity 的回调方法,当另一个 activity 可见并且可交互时,才会继续调用执行原来 activity 中的 onStop 等回调方法。因此,我们不太很适合在 onPause 中执行过于耗时的方法,这样会影响其他 activity 的工作。
通过 google 生命周期图片,我们知道这些方法都是两两相对的,据此可以划分三个生命期:完成生命期(onCreate-onDestroy)、可见生命期(onStart-onStop)、前台生命期(onResume-onPause)。
activity 中的一些方法:
重写 activity 中的 onCreateOptionsMenu 方法可以使用系统提供的菜单栏,使用如下。
1.在 xml 文件中创建对应的菜单栏,android 讲究视图与逻辑分离,一般视图都是通过 xml 文件来描述,当然也可以通过代码直接创建
2.重写方法
(也可以在 onCreateOptionsMenu 方法中直接代用 menu.add 方法,通过代码形式添加 item 项)
3.效果