说到Activity,就不得不提起他的四种状态和七个回调方法了
四种状态:
active:运行状态,可见可交互
paused:可见不可交互
stopped:存在但不可见(任务键这种界面也叫的是不可见)
kill:销毁状态
其中容易被系统回收的容易程度是依次增加的
七种回调方法:
onCreate:第一次创建时调用,一般用于初始化操作
onStart:由不可见变为可见时调用
onResume:准备好和用户进行交互时调用
onPause:这个是在启用别的界面时调用的,是发生在新的界面加载之前,所以这个方法执行速度必须要快速
onStop:在界面完全不可见时调用,也就是在新的界面加载完成遮挡之后
onDestroy:调用这个方法之后页面变为kill状态
onRestart:在Activity被重新启动时候调用
这里直接盗用两张百度百科的图片
Activity的生命周期
Activity栈:Activity也拥有自己的回退栈,新建的Activity一般位于栈顶,先进后出
这里举个例子介绍一下两个Activity的 加载过程
Activity A ,B,Dialog C
打开A:A ( onCreate --> onStart -->onResume)
再打开B: A(onPause)-->B(onCreate --> onStart -->onResume) -->A(onStop)
回退到A: B(onPause)-->A(onRestart --> onStart -->onResume) -->B(onStop-->onDestroy)
再打开C:A(onPause)-->C(onCreate --> onStart -->onResume)
再回到A:C(onPause)-->A(onResume) -->C(onStop-->onDestroy)
由此可见,除了onRestart方法之外的六个方法都是两两相对应的
除此之外,还会有onSaveInstanceState方法和onRestoreInstanceState方法,是在Activity异常情况下才会被调用的(例如屏幕的旋转),用于保存在异常情况发生时保存用户数据的,onSaveInstanceState是在Activity被异常销毁时一定会调用的方法。在新的activity重建恢复数据时,onRestoreInstanceState方法是在onStart方法之后onResume之前的,且可以不用判空,因为如果为空的bundle是不会调用此方法的