在Android应用程序中,所有的Android组件都有它自己的生命周期,表示从这一组件的创建到销毁的整个过程。在这一过程中,组件会在活动、非活动以及可见或不可见等状态中不断因应用场景的改变而进行切换。
一.Activity的七个生命周期函数
1.onCreate():当Activity被首次创建的时候调用,作用是设置布局文件,绑定监听器等等。
2.onStart():当Activity可被用户看见的时候调用。
3.onResume():获取用户焦点时调用。
4.onRestart():Activity调用时非第一次创建。
5.onPause():当启动另一个Activity时,当前Activity会调用,作用通常是保存当前数据以便之后恢复。
6.onStop():当Activity对用户不可见时调用,通常是被另一个Activity遮挡,而且必须是完全遮挡。
7.onDestroy():通常有两种情况会调用onDestroy:(1)在Activity中调用了finish().(2)系统资源不够
这七个函数都是回调函数,由系统自己调用。
方法 |
描述 |
可被杀死 |
下一个 |
onCreate() |
在Activity第一次被创建的时候调用。可在此处做初始化设置──创建视图、绑定数据至列表等。如果曾经有状态记录,则调用此方法时会传入一个表示Activity以前状态的包对象做为参数,继以onStart() |
否 |
onStart() |
onRestart() |
在Activity停止后,再次启动前被调用, 继以onStart() |
否 |
onStart() |
onStart() |
当Activity正要变得为用户所见时被调用 当Activity转向前台时继以onResume(); 当Activity变为隐藏时继以onStop()。 |
否 |
onResume() or onStop() |
onResume() |
在Activity开始与用户进行交互之前被调用。此时Activity位于堆栈顶部,用户可见。继以onPause()。 |
否 |
onPause() |
方法 |
描述 |
可被杀死 |
下一个 |
onPause() |
当系统将要启动另一个Activity或者弹出对话框时调用。此方法主要用于将所有持久性数据写入存储之中,这一切动作应该在短时间内完成,因为下一个Activity必须等到此方法返回后才会继续。 当Activity重新回到前台时继以onResume(); 当Activity变为用户不可见时继以onStop()。 |
是 |
onResume() or onStop() |
onStop() |
当Activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个Activity(可能是现存的或者是新的)回到运行状态并覆盖它时。 如果Activity再次回到前台跟用户交互则继以onRestart();如果关闭Activity则继以onDestroy()。 |
是 |
onRestart() or onDestroy() |
onDestroy() |
在Activity销毁前调用,这可能发生在Activity结束(调用了它的 finish() 方法)或者因为系统需要临时空间而销毁该Activity实例时。可以用isFinishing()方法来区分这两种情况。 |
是 |
无 |
二.Activity与task
1.Activity是由task组织的,task是一个Activity的栈,后进先出。
2.task可以把不同文件的Activity组织在一起,对用户而言,会觉得这些Activity都是同一个应用程序的。
3.task只有两个动作:弹或压,所以不能改变Activity的顺序。
4.当执行finish(),会执行onDestroy,这时Activity就不会进栈了。
5.当打开多个Activity,点击手机上的“返回”,就会弹栈,弹栈时会执行onDestroy。
三.窗口型Activity
1.窗口型Activity本身的代码与普通Activity没有区别,只是在AndroidManifest.xml中需要配置:
android:theme="@android:style/Theme.Dialog"
2.窗口型Activity属于不完全遮挡,所以当启动窗口型Activity时,之前的Activity不会调用onStop。
四.生命周期
1.当调用Activity时:
第一次调用:onCreate()—>onStart()—>onResume()
非第一次调用:onRestart()—>onStart()—>onResume()
2.启动另一个Activity:
(firstActivity)onPause()—>(secondActivity)onCreate()—>(secondActivity)onStart()—>(secondActivity)onResume()
—>(firstActivity)onStop()
五.KILL
当系统资源不够时,会选择杀死一些Activity,执行onPause()、onStop()、onDestroy()的Activity就有可能被杀死。