Activity A 启动 Activity B ,那么这两个Activity生命周期执行的顺序是什么呢?
onPause(A)---- onCreat(B) ---- onStart(B)---- onResume(B)--- onStop(A)
在整个启动过程中,A的onPause执行完成之后B的onResume才能执行,这意味着我们在启动新的acitivity的时候,onPause()和 onStop()方法中都不能执行重量级操作,尤其是在 onPause()方法中,应当尽量将操作放在onStop()方法中,从而使新的Activity尽快显示出来并切换到前台。
另外,如果我们新启动的acitivity是,那么原acitivity的onstop()方法是不会被执行的.
现在我们从B返回A的时候呢?
下面的是log日志,其中MainActivity为A,SecondActivity为B
D/SecondActivity: onPause:
D/MainActivity: onRestart:
D/MainActivity: onStart:
D/MainActivity: onResume:
D/SecondActivity: onStop:
D/SecondActivity: onDestroy:
可以看见是先执行B的onPause()方法
由此可以总结:
当activity切换的时候,都是先执行栈顶activity的onPause()方法,然后执行将要到达栈顶的activity的生命周期方法,当新的activity执行完onResum()方法的时候,再去执行原栈顶activity的生命周期方法。
另外一个问题:如果我们使用startAcitivityForResult()方法,那么回退的时候生命周期方法又是怎么执行的?
D/SecondActivity: onPause:
D/MainActivity: onActivityResult:
D/MainActivity: onRestart:
D/MainActivity: onStart:
D/MainActivity: onResume:
D/SecondActivity: onStop:
D/SecondActivity: onDestroy:
可以看见还是先执行栈顶activity的onPause()方法,然后才是将要到达栈顶的activity的onActivityResult()方法,并且onActivityResult()执行在onRestart()方法之前。
网友评论