1 activity的生命周期简单说明
首先上官网图片:
//activity不同状态有不同的回调:
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// activity 开始创建 ,利用setContentView设置视图
}
@Override
protected void onStart() {
super.onStart();
// activity 变得可见,用户可见之前调用
}
@Override
protected void onResume() {
super.onResume();
// activity 已经可见,此时activity处于 Activity 堆栈的顶层,并具有用户输入焦点
}
@Override
protected void onPause() {
super.onPause();
// 当前activity的焦点被抢占
// 当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。这句话深层的意思就是,你可以在这里保存数据,但是时间不能过长否则会影响下一个activity的启动
}
@Override
protected void onStop() {
super.onStop();
// activity已经不可见
//如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。
}
@Override
protected void onRestart(){
super.onRestart();
//activity停止后再次启动,在 Activity 已停止并即将再次启动前调用。
//始终后接 onStart()
}
@Override
protected void onDestroy() {
super.onDestroy();
//在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。
//isFinishing() 检查是否activity的进程已经结束, 可能是因为你调用了 finish()或者其他情况. 通常被使用在onPause() 中去判断
}
}
2 一些情况activity状态改变
启动activity
oncreate ⇒ onstart ⇒ onresume activity处于运行状态。
activity被覆盖一部分(类似dialog),然后activity全部显示
执行onPause,之后执行onResume
** Home键,隐藏之后重新显示**
onPause ⇒ onStop ⇒ 重新显示 ⇒ onRestart ⇒ onStart () ⇒ onResume
被其他activity覆盖,然后关闭其他activity
onPause ⇒ onStop ⇒ 重新显示 ⇒ onRestart ⇒ onStart () ⇒ onResume
用户退出activity
先调用onPause ⇒ onStop ⇒ onDestroy 退出
activity崩溃后重新启动
oncreate ⇒ onstart ⇒ onresume
3 一些情况分析
1 home键后再次回来onRestart执行吗
会执行onRestart方法。
执行onRestart()方法的场景:
- home键,然后回来,
- 打开其他activity然后回来
- 切换其他应用,然后回来。
2 被dialog和透明主题Activity覆盖情况一样吗
都会只执行onPause,不会执行onStop,activity完全显示会执行onresume
3 一般在哪个函数保存数据:
onPause
4 如何把activity放后台
moveTaskToBack()方法:在activity中调用 moveTaskToBack (boolean nonRoot)方法即可将activity 退到后台
5 onNewIntent 调用时机,参数Intent和onCreate中getIntent是一个吗。