一般的情况下,activity会经历7个生命周期:
(1) onCreate: 这个方法是生命周期的第一个方法,在这里做一些初始化的工作,比如调用setContentView去加载一些界面布局的资源,初始化所需要的数据等.
(2) onRestart: 这个表示Activity正在启动.一般情况下,当当前的Activity由不可见变重新变为可见状态,onRestart方法就会调用,这种情形一般是用户自己的操作,比如用户将从当前的Activity_A 直接返回到了Home或者重新启动了一个Activity_B (这个过程和会调用 onPuase -> onStop),然后再次回到Activity_A(onRestart -> onStart -> onResume),此时就会调用onRestart.
(3) onStart: 表示Activity正在被启动,即将开始,这时Activity已经可见(不是对用户来说的), 但是还没有出现在前台,还无法和用户交互.
(4) onResume: 当前Activity已经处于可见可交互状态,这里和onStart中的可见对比,onStart可见在后台,onResume可见在前台.
(5) onPause: 表示Activity正在停止, 正常情况下, 紧接着onStop就会被调用. 在特殊的情况下, 如果这个时候快速地再回到当前的Activity,那么此时onResume就会被调用(这里强调一下onPause和onResume是成对的), 这个属于极端情况,从用户的角度是很难重现这种现象的, 在这个方法中可以做一些数据存储, 停止动画等工作,但是不能做耗时太长的事情,因为会影响到新的Activity的显示,onPause必须先执行万,新的Activity的onResume才会显示.
(6) onStop: 表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时.
(7) onDestory: 表示Activity即将被销毁,这是Activity生命周期中的最后的一个回调,在这里,我们可以做一些回收的工作和最终的资源释放.
以上是正常情况下的7个时期的回调.图如下
列举一下几种列子方便理解:
(1) 针对一个特定的Activity,第一次启动都要经过 onCreate -> onStart -> onResume.
(2) 在当前Activity_A 上打开新的Activity_B 回调过程: Activity_A onPause, Activity_B 首次执行 onCreate -> onStart -> onResume , 如果不是首次执行且没有被系统回收 onRestart -> onStart -> onResume. 然后Activity_A onStop,
(3) 当用户按下Back键彻底退出Activity时, 执行onPause -> onStop -> onResume
(4) 从整个生命周期来说, onCreate 和 onDestory是配对存在的,分别表示Activity的创建和销毁, 并且只可能有一次调用. 从Activity是否可见来说(想对于后台), onStart和onStop是配对的, 随着用户的操作或者屏幕的点亮和熄灭,这两个方法可能被多次调用. 从Activity是否可见在前台来说, onResume和onPause是配对的,随着用户的操作或者屏幕的点亮和熄灭,这两个方法可能被多次调用.