美文网首页
两个Activity启动时候执行的顺序

两个Activity启动时候执行的顺序

作者: 王魔王 | 来源:发表于2019-01-10 10:08 被阅读0次

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是\color{red}{透明主题的话},那么原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()方法之前。

相关文章

网友评论

      本文标题:两个Activity启动时候执行的顺序

      本文链接:https://www.haomeiwen.com/subject/ibjorqtx.html