Android四大基本组件
Activity
生命周期
函数 | 意义 |
---|---|
onCreate() | 这是第一个回调,在活动第一次创建时调用。此时Activity还在后台,不可见,所以一些初始化不应该在这进行,因为看不到 |
onStart() | 这个回调在活动为用户可见时被调用,但是还没出现在前台,我们还看不到,无法与Activity交互。 |
onResume() | 这个回调在应用程序与用户开始可交互的时候调用,在这个阶段已经出现在前台并且可见了,可以打开独占设备。 |
onPause() | 被暂停的活动无法接受用户输入,不能执行任何代码。当前活动将要被暂停,上一个活动将要被恢复时调用 |
onStop() | 当活动不在可见时调用,但是Activity对象还在内存中,没有被销毁,这个阶段的主要工作也是做一些资源的回收工作。 |
onDestroy() | 当活动被系统销毁之前调用,将还没释放的资源释放,以及进行一些回收工作。 |
onRestart() | 当活动被停止以后重新打开时调用,Activity在这时可见,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。 |
- 可以由以下流程图展现:
各方法之间的区别
onCreate()和onStart()
- 可见与不可见的区别。前者不可见,后者可见。
- 执行次数的区别,
onCreate()
方法只在Activity创建时执行一次,而onStart()
在Activity的切换以及切换应用的过程中被多次调用。 onCreate()
能做的事onStart()
其实都能做,但是onstart能做的事onCreate()
却未必适合做。
onStart方法()和onResume()
- 是否在前台,
onStart()
中Activity可见但不在前台,不可交互,而onResume()在前台。 - 职责不同,
onStart()
中主要还是进行初始化工作,而onResume()
可以做开启动画和独占设备的操作。
onPause()和onStop()
- 是否可见,
onPause()
时Activity可见,onStop()
时Activity不可见,但Activity对象还在内存中。 - 在系统内存不足的时候可能不会执行
onStop()
,因此程序状态的保存、独占设备、动画的关闭以及一些数据的保存最好在onPause()
中进行,但要注意不能太耗时。
onStop()和onDestroy()
onStop()
阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,而onDestroy()
阶段Acivity被销毁
切换Activity时各方法的执行次序
- 是
(A)onPause()→(B)onCreate()→(B)onStart()→(B)onResume()→(A)onStop()
- 不是
(A)onPause()→(A)onStop()→(B)onCreate()→(B)onStart()→(B)onResume()
- 一个Activity或多或少会占有系统资源,而在官方的建议中,
onPause()
将会释放掉很多系统资源,为切换Activity提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。 - 按照生命周期图的表示,如果用户在切换Activity的过程中再次切回原Activity,是在
onPause()
后直接调用onResume()
的,这样比onPause()→onStop()→onRestart()→onStart()→onResume()
要快得多。