典型情况下的生命周期
onCreate
表示创建Acticity,在这个方法中可以做一些初始化的操作,如加载界面布局资源,初始化Activity所需的数据
onRestart
表示重新启动Activity,正常情况下,当前Activity从不见到可见,就会调用此方法。
onStart
表示启动Acticity,这个时候Activity可见,但是不能进行UI交互。
onResume
表示Activity出现到前台,可与之交互。
onPause
表示Activity正在暂停,接着会执行onStop。这个方法中可以做一些数据存储,停止动画,但不能耗时操作,不然Activity之间的切换会有卡顿,不自然。
onStop
表示Activity马上就会停止,可以做一些稍微耗时的回收工作。
onDestroy
表示Activity即将销毁,在这个方法中做一些回收工作和资源的释放。
两个Acticity之间切换的生命周期:第一个Activity执行onPause后,第二个Activity执行onCreate -> onStart ->onResume,第一个Activity再执行onStop。
异常情况下的生命周期
1、资源相关的系统配置发生改变导致Activity被杀死并重新创建:
正常周期依旧会被调用,但是会调用onSaveInstanceState,当重新创建后会调用onRestoreInstanceState,我们可以利用这个特性来保存恢复数据。
2、资源不足导致低优先级的Activity被杀死:
- 前台Activty -- 正在和用户交互的Activity,优先级最高
- 可见但非前台Activity
- 后台Activity -- 已经被暂停的Activity,比如执行的onStop,优先级最低。
为了防止被系统杀死,后台工作一般放在Service中执行,防止系统轻易杀死。
Activity启动模式
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置。
1.Standard模式(默认)
我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。
2.SingleTop模式
这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。
3.SingleTask模式
如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。
4.SingleInstance模式
当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。