1.正常情况下的activity的生命周期
activity的基本生命周期的方法就不逐一介绍了,其中有两个方法需要说明下,原因是又一次遇到需要测量控件的宽度,测量方法写在onCreate()里边了,但是不管怎么做,测量结果都是0,当然也有一种测量方法可以使用 ,这里只分析activity的生命周期,其他的不做解说,有兴趣的可以百度自己试下。
(1). onStart()
该方法表示activity已经可见了,但是还没有出现在前台,还无法与用户交互,可以理解为,activity已经显示出来了,但是我们还无法看到activity的界面。
(2). onResume()
该方法表示activity已经可见了,用户也可以看到activity的界面了,activity出现在前台,可以和用户进行交互了。
如果用户从当前界面A跳转到一个新的activityB,那么B的onResume和A的onPause那个先执行?
废话:启动activity的请求有Instrumentation来处理,然后他通过Binder向AMS(AndroidManagerService)发请求,AMS内维护着一个ActivityStack并负责栈内的activity的状态同步,AMS通过ActivityStack去同步Activity的状态从而完成生命周期的调用。
源码分析去掉,有兴趣的可以去查看香相关资料,或者查看官方API对onPause()方法的说明,不能在onPause()中做重量级的操作,因为当onPause之后新的activity才会onResume()。
2.异常情况下activity的生命周期
竖屏销毁的情况下,会执行onSaveInstanceState*()进行保存数据,系统默认保存GroupView的子类的输入或者显示的内容之类的数据,然后在重新建立的activity中可以在onCreate()和onRestoreInstanceState()进行判断,在onRestoreInstanceState()中可以获取到保存的数据,onSaveInstanceState()执行可能在onPause()之前或者之后执行,onRestoreInstanceState执行是在onStart()之后onPause()之前执行。当然,如果设置了android:configChanges="orientation|screenSize"属性在会后(需要保证minSdkVersion或者targetSdkVersion有一个大于13),onRestoreInstanceState和onSaveInstanceState都不会执行,执行的是onConfigurationChanged。
PS:系统只会在activity异常终止的时候调用onSaveInstanceState和onRestoreInstanceState