Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。Acitivity一般意义上有四种状态:
1.当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态;
2.当Activity失去了焦点但仍然对用于可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态;
3.当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态;
4.当Activity由于人为或系统原因(如低内存等)被销毁,此时处于销毁状态;
在每个不同的状态阶段,Adnroid系统对Activity内相应的方法进行了回调。因此,我们在程序中写Activity时,一般都是继承Activity类并重写相应的回调方法。
扒张图过来
1.onCreate()
这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
2.onStart()
这个方法在Activity由不可见变为可见时调用。
3.onResume()
这个方法在Activity准备好和用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。
5.onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
6.onDestory()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
7.onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
接下来做一个试验,创建两个Activity活动页面,A页面和B页面。由A跳转B,然后回传到A。看Log日志的具体打印结果。
好吧,顺序一目了然。
1.开启A页面时了。执行了onCreate(),onStart(),onResume()三个方法;
2.当我跳转B页面时,执行A的onPause()暂停方法,然后再去启动BActivity的onCreate(), onStart(), onResume()方法;
最后执行A页面的onStop()方法。
3.最后当我回传A页面,执行BActivity的onPause(),之后执行A页面的onRestart()、onStart()、onResume()方法,最后再执行B的onStop()、onDestory(),值得注意的是A回传接收方法onActivityResult()方法执行调用在onRestart()生命周期方法之前。
此时如果按下Back键,系统返回到桌面,并依次执行A:onPause -> A:onStop -> A:onDestroy。
此时如果按下Home键(非长按),系统返回到桌面,并依次执行A:onPause -> A:onStop。由此可见,Back键和Home键主要区别在于是否会执行onDestroy。
切换横竖屏生命周期
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调
用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法