首先我们来一张神图介绍一下基础:
-
onCreate
:表示activity正在创建,可以做一些初始化的工作,比如加载界面布局资源。 -
onRestart
:表示activity正在重新启动,一般情况下当当前Activity从不可见到可以见的时候,该方法会被调用。 -
onStart
:表示Activity正在被启动,activity可见但是没有出现在前台,不可以操作。 -
onResume
:表示activity已经可见了,并且出现在前台活动,可以做一些储存数据的操作,但不能做太耗时操作。 -
onPause
:表示activity正在停止,处于可见但是不可以操作。 -
onStop
:表示Activity即将停止,activity变得不可以见,可以做稍微重点的回收工作。 -
onDestory
:表示activty即将被销毁,我们可以做一些回收工作和资源的最终释放。
下面要介绍几个冷知识
当前Activity A启动一个Activity B的时候一般会调用A的
onPause
->onStop
,但是onStop
不是必然的 ,当B采用了透明主题的时候,A是不会调用onStop
的(这也是是侧滑退出的实现原理)当前Activity A启动一个Activity B的时候,只有当A的
onPause
方法执行完毕的时候B的onCreate
方法才会执行,但是A的onStop
就不一定了,可能会在B的onResume
之后。当前Activity A启动一个Activity B的时候,但是又切换回A的时候一般会调用A的
onNewIntent
->onRestart
->onStart
->onResume
。(目前针对只在同一个堆栈中的情况)但是A如果被系统回收的情况,调用如下onCreate
->onStart
->onResume
当用户从任务栏杀进程的时候是不会走接下来的
onDestory
等生命周期的,但是home出去的时候会走onPause
->onStop
当使用
System.exit(0)
来退出当前进程的时候,不会走当前Activity A任何生命周期,同时上一个Activity B(不在同一进程)的onActivityResult
不会有正确回调结果,但是在System.exit(0)
前面加一个finish()
之后B的onActivityResult
就会有正确结果,但是A的生命周期不会被调用,finish
方法中的Log不会被打印出来。