天天看点

关于Activity 生命周期,在页面切换时方法的执行顺序

     Activity生命周期是学习安卓开发要掌握的最基本知识.那么在页面创建到显示出来,页面切换至后台,或者页面以窗体形式可见不可交换状态,都执行了生命周期的那些方法,顺序是怎样的你是否都了解清楚呢?设置了不同的启动模式之后又走了哪些方法?这也是面试中必问的问题.这篇文章通将过demo的方式将默认启动模式的每个生命周期方法都打印出来.

    创建了三个activity.每个Activity页面只有一个按钮,点击顺序Main->Two->Three.

关于Activity 生命周期,在页面切换时方法的执行顺序

      因为这里的启动模式是默认(standard),每启动一个Activity,就会创建一个实例放在栈顶,顺序启动三个activity : main -> Two -> Three, 而正常的返回也是根据打开顺序,从栈顶依次移除出栈.activity栈中实例图简单如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

启动时:

关于Activity 生命周期,在页面切换时方法的执行顺序

点击跳转Two:

关于Activity 生命周期,在页面切换时方法的执行顺序

ThreeActivity 这里在manifest中添加了下面的一行代码,设置为窗体模式

   android:theme="@android:style/Theme.Dialog"

点击跳转Three 效果图制作如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

生命周期方法执行顺序如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

  可以看到TwoActivity此时处于可见但不可交互状态.启动ThreeActivity时正常的执行了onCreate() -> onStart() -> onResume(),但TwoActivity相比少了onStop() 方法的执行.

点击上图中遮罩部分,使第二个页面获得焦点

关于Activity 生命周期,在页面切换时方法的执行顺序

生命周期调用如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

可以看到第二个页面只调用了onResume()方法.而且执行顺序是: 第三个页面onPause()->第二个页面onResume()->第三个页面onStop()->第三个页面onDestroy().接下来我们再点击返回按钮,应该是从第二个页面返回第一个页面(main),看一下生命周期会调用哪些方法

关于Activity 生命周期,在页面切换时方法的执行顺序

这里第一个页面(main)调用了onRestart()->onStart(),而没有onCreate(),是因为activity栈中有当前要显示(main)的activity实例.

在Main页面,直接点击HOME键,返回桌面,生命周期方法执行如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

在桌面点击应用程序,如下:

关于Activity 生命周期,在页面切换时方法的执行顺序

点击返回键,正常退出应用程序:

关于Activity 生命周期,在页面切换时方法的执行顺序

可以总结一下:

  在我们页面交互中,界面总是非A即B的状态.所以A跳转B,在A执行到onPause()之后,B页面没有实例,就onCreate()->onStart()->onResume();有则调用onRestart()->onResume(),一定是在B的onResume()执行后A才执行onStop() .  页面处于可见不可交互状态时,调用onPause().

下一篇文章将会分析设置了不同的启动模式之后,页面跳转过程中调用了哪些方法?

继续阅读