1.activity的4种状态
Running:拥有焦点,可以与用户交互。
一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端。
Paused:失去焦点,但是依然可见。
当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,它仍然可见,但它已经失去了焦点,故不可与用户交互。
Stopped:失去焦点,不可见。
当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。
Killed:Activity被杀掉以后或者被启动以前。
这时Activity已从Activity堆栈中移除,需要重新启动才可以显示和使用。
2. activity生命周期
2.1 图
2.2 各方法说明
void onCreate(Bundle savedInstanceState)
void onStart() activity变为在屏幕上对用户可见时调用。
void onResume() activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onStart事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体时,窗体还没有被销毁,也没有执行过onStop事件(窗体还继续存在于Task中),则会跳过窗体的onCreate和onStart事件,直接执行onResume事件。
4. void onPause() activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场。窗体被交换到后台时执行。
//有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据
5. void onStop() activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onPause事件之后执行。如果一段时间内用户还没有重新查看该窗体,则该窗体的onStop事件将会被执行;或者用户直接按了Back键,将该窗体从当前Task中移除,也会执行该窗体的onStop事件。
6. void onRestart() 重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onStop事件执行后,如果窗体和其所在的进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart事件,onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。
7. void onDestroy() activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源!
2.3 生命周期中的方法在什么情况下调用
开启一个activty:onCreate() -> onStart() -> onResume()
另外一个B activity覆盖当前A activity: onPause() -> onSaveInstanceState() -> onStop()
-
上述情况按返回键返回A activity:
B activity:onPause() -> -> onStop() -> onDestroy()
A activity:onRestart() -> onStart() -> onResume()
A activity开启B activity,同时finish掉自己:onPause() -> -> onStop() -> onDestroy()
锁屏: onPause() -> onSaveInstanceState() -> onStop()
解锁:onRestart() -> onStart() -> onResume()
按home键:onPause() -> onSaveInstanceState() -> onStop()
从home键回到当前activity:onRestart() -> onStart() -> onResume()
-
按返回键退出该activity:onPause() -> -> onStop() -> onDestroy()
3. onSaveInstanceState(Bundle outState)的调用
1. Activity被系统杀死时被调用
<1> 屏幕方向改变时,Activity被销毁再重建
<2> 当前Activity处于后台,系统资源紧张将其杀死
2. 跳转到其他Activity
3. 按Home键回到主屏
4. onRestoreInstanceState(Bundle saveInstanceState)的调用
Activity被系统杀死时被调用
<1> 屏幕方向改变时,Activity被销毁再重建
<2> 当前Activity处于后台,系统资源紧张将其杀死
转载于:https://my.oschina.net/u/2421076/blog/669301