两个Activity启动时候执行的顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个Activity启动时候执行的顺序相关的知识,希望对你有一定的参考价值。
参考技术A 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()方法之前。
activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
NoteMainActivity点击跳转至NoteListActivity当A界面点击进入B界面时,此时A===onPause--->onStopB===onStart--->onResumeB界面退出,A界面显示,此时B===onPause--->onStopA===onRestart--->onStart--->onResume
当A界面点击进入B界面时,此时onPause(A)--->onStart(B)--->onResume(B)--->onStop(A)B界面退出,A界面显示,此时onPause(B)---> onRestart(A)---> onStart(A)--->onResume(A)--->onStop(B)
以上是关于两个Activity启动时候执行的顺序的主要内容,如果未能解决你的问题,请参考以下文章
activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
Android 启动过程Activity 启动源码分析 ( ActivityThread -> Activity主线程阶段 一 )