两个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--->onStop
        B===onStart--->onResume
B界面退出,A界面显示,此时 
        B===onPause--->onStop
        A===onRestart--->onStart--->onResume

问:但是,是执行A的生命周期执行完再执行B的生命周期吗?或者B的执行完再执行A的吗?
答:不。   实际是
当A界面点击进入B界面时,此时       
        onPause(A)--->onStart(B)--->onResume(B)--->onStop(A)
B界面退出,A界面显示,此时        
        onPause(B)---> onRestart(A)---> onStart(A)--->onResume(A)--->onStop(B) 

问:有什么实际应用呢?
答:举个例子。A界面需要从数据库请求数据,展示在界面上。B界面的操作会影响A界面的数据。从B界面返回到A界面需要重新请求数据,进行界面展示。
    此时,B界面应该在哪里进行数据的提交。A界面在哪里进行数据的读取。
    在B界面的onPause进行数据的存储。
    在A界面的onRestart进行数据的读取渲染

下面是我实际打印的log。
NoteMainActivity进入
技术分享
NoteMainActivity屏暗
技术分享
NoteMainActivity屏亮:
技术分享

NoteMainActivity------>NoteListActivity(点击跳转)
技术分享

退出NoteListActivity,显示NoteMainActivity

技术分享

退出NoteMainActivity
技术分享

附一张avtivity的生命周期图:

技术分享



























以上是关于两个Activity启动时候执行的顺序的主要内容,如果未能解决你的问题,请参考以下文章

安卓activity生命周期

原创菜鸟版Android 笔记2- Activity

activity生命周期分析(两个activity之间跳转的生命周期执行顺序)

AMS和Activity启动过程

Android 启动过程Activity 启动源码分析 ( ActivityThread -> Activity主线程阶段 一 )

如何从一个activity中跳转到一个fragment