Activity切换中生命周期的交互

       参考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完全创建好之后才退出,否则会出现切换中黑屏的现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值