Activity切换中生命周期的交互

翻译 2015年07月09日 15:28:57

       参考google文档:http://developer.android.com/guide/components/activities.html
       当一个Activity启动另一个Activity时,它们都经历了生命周期的切换。第一个Activity被暂停和终止时,另一个Activity被创建。这时,第二个Activity被创建之前,第一个Activity是不能完全被终止的。下面具体来看一下Activity生命周期的交互情况。

       当Activity A启动Activity B时,生命周期回调的顺序是固定的,具体执行顺序如下:

  1. Activity A的onPause()方法被执行;

  2. Activity B的onCreate()、onStart()、和onResume()被顺序执行;

  3. 如果B是不透明的,A将会完全被隐藏,A的onStop()方法就会被执行。

看到这里,我们来思考两个问题:
为什么要先执行A的onPause方法,再执行B的生命周期方法?
为什么不是执行完A的onStop方法之后再执行B的生命周期方法?

       首先来看第一个问题,假如A正在播放一段音乐,如果先执行B的生命周期,再执行A的onPause方法,就会出现B已经显示出来,A中的音乐还在播放的异常情况。而如果先执行了A的onPause方法,我们就可以在其中执行一些操作来暂停音乐的播放。原本onPause方法的设计职责即使如此。
       对于第二个问题,由于Activity的可见生命周期是onStart()到onStop(),假如先执行A的onPause()和onStop(),再执行B的生命周期,每次切换的时候就会出现黑屏的情况,这种切换效果显然是不优雅的。
       生命周期回调的确定的顺序允许管理两个Activity之间的切换信息。例如,当第一个Activity终止时你必须把数据写到数据库中以便下一个Activity能够读取它,那么你就应该在onPause()方法执行期间把数据写入数据库,而不是在onStop()方法执行期间。
       我们注意到Activity B是在Activity A的onPause()方法执行完之后才执行自己的生命周期的,如果A的onPause()中有非常耗时的代码,那么将会影响到B的启动速度。因此,我们要在onPause()中做尽可能少的工作来提高页面的切换速度。
       说完了启动页面的情况,再来看下退出页面时生命周期是怎样运行的。Activity A启动B后,点击返回按钮,B退出,A切换到前台,这时生命周期的执行顺序是这样的:
1、B执行onPause()方法;
2、A执行onStart()和onResume()方法切到前台;
3、B执行onStop()和onDestroy()方法退出。
       可以看出,B也是要等到A完全创建好之后才退出,否则会出现切换中黑屏的现象。

Android 中Activity生命周期分析:从AActivity 到BActivity过程分析

A启动B  A生命周期全过程 1.启动A 生命周期:Activity--A: onCreate---->调用成功 生命周期:Activity--A: onStart---->调用成功 生命周期...
  • u014651216
  • u014651216
  • 2016年01月28日 17:18
  • 699

activity生命周期 A启动B,B返回A, A,B的全生命周期

A启动B  A生命周期全过程 1.启动A       Activity的初始化了,A第一步创建onCreate(20569): -------->成功!      Activity被激活A,on...
  • mengweiqi33
  • mengweiqi33
  • 2014年05月13日 16:25
  • 5933

ActivityA打开ActivityB再回到A再退出,activity执行的生命周期

必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示 (1)父Activity启动子Activity,子Actvity退出,父Activit...
  • spt_dream
  • spt_dream
  • 2016年06月25日 11:21
  • 764

Activity销毁与重建

Activity在以下几种情况下由于正常的应用操作会被销毁,例如:当用户按下后退键或者是Activity本身调用了finish()方法。此外,如果你的Activity生命周期处于stop状态而且一段时...
  • llp1992
  • llp1992
  • 2014年11月04日 22:34
  • 3729

Android屏幕横竖屏切换和生命周期管理的详细总结

Android屏幕横竖屏切换和生命周期管理的详细总结       一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置。        今天想...
  • wenzhi20102321
  • wenzhi20102321
  • 2017年04月01日 09:46
  • 2925

Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Fragment生命周期图解,fragment和activity生命周期对比 1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,...
  • robertcpp
  • robertcpp
  • 2016年06月11日 10:04
  • 3321

如何让手机横竖屏切换不重走Activity生命周期

在Manifest里加上android:configChanges="keyboardHidden|orientation|screenSize";   扩展补充: 一: Activity中还...
  • Chen_Tw
  • Chen_Tw
  • 2015年07月03日 15:44
  • 1319

android-----横竖屏切换对Activity生命周期的影响

前面我们分析过Activity的生命周期(见:android-----Activity生命周期),但是在现实应用中我们可能会对手 机进行横竖屏切换,那么这样的切换对Activity的生命周期有什么影响...
  • hzw19920329
  • hzw19920329
  • 2016年05月08日 19:31
  • 2224

横竖屏切换等各种情况下Activity生命周期的变化。

对不同切换状态下Activity的生命周期做一个记录,一来作为之前的总结,二来方便查询和总结,三呢还可以和大家交流下,一举多得。...
  • u011257905
  • u011257905
  • 2017年07月05日 10:54
  • 215

横竖屏切换时Activity生命周期的变化

一、不设置Activity的android:configChanges属性 正常竖屏启动 E/Main10Activity: onCreate: E/Main10Activity:...
  • panyzyw
  • panyzyw
  • 2017年03月28日 16:32
  • 169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity切换中生命周期的交互
举报原因:
原因补充:

(最多只允许输入30个字)