【问题标题】:Android - While switching between two activities, the calling order of lifecycle methods of ActivityAndroid - 在两个Activity之间切换时,Activity生命周期方法的调用顺序
【发布时间】:2013-05-18 05:35:43
【问题描述】:

我想通过调用startActivity(intent) 从另一个活动(第一个活动)启动一个活动(第二个活动)。在我真正做之前,我发现人们说生命周期方法是按以下顺序调用的:

FIRST Activity onCreate
FIRST Activity onStart
FIRST Activity onResume
FIRST Activity onPause
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop

SECOND Activity onResume 总是在FIRST Acitivity onStop 之前调用吗?我以为

FIRST Activity onPause
FIRST Activity onStop
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume

将被调用,但似乎没有。

另外,如果我只是在两个活动之间切换,

FIRST Activity onPause
SECOND Activity onRestart
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop

方法总是按这个顺序调用吗?

【问题讨论】:

    标签: android android-activity android-lifecycle


    【解决方案1】:

    根据文档, SECOND.onResume() 应该在 FIRST.onStop() 之前调用 https://developer.android.com/guide/components/activities/activity-lifecycle.html#soafa协调活动部分)

    【讨论】:

    • 但请记住,有些方法可能永远不会像onStop() 那样被调用。在实现您的代码之前,请仔细阅读每种方法的文档。
    • @OneWorld 你有这方面的资料吗?我找不到任何地方说onStop() 可能永远不会被调用。我知道如果进程在后台并且系统决定在不调用所有方法的情况下将其杀死,则不会调用onDestroy(),但找不到任何关于onStop()的此类陈述。
    • @Thorbear FIRST.onStop 不会被调用,如果SECOND 没有覆盖整个屏幕,所以FIRST 保持暂停并且永远不会进入停止状态。此外,链接似乎已失效。
    【解决方案2】:

    假设有两个活动FirstActivitySecondActivity

    那么这个顺序每次都会保持不变。

    //当你启动FirstActivity时

    (1) OnCreate() -> OnStart() -> FirstActivity 的 OnResume() 将被调用

    当您使用启动 SecondActivity 时 startActivity(new Intent(FirstActivity.this, SecondActivity.class))

    (2) FirstActivity 的 OnPause() 会被调用,然后

    (3) OnCreate() -> OnStart() -> SecondActivity 的 OnResume() 会被调用

    (4) FirstActivity 的 OnStop() 将被调用

    // 当你按下 SecondActivity

    上的返回按钮时

    (5) SecondActivity 的 OnPause() 将被调用

    (6) OnRestart() -> OnStart() -> FirstActivity 的 OnResume() 会被调用

    (7) onStop() -> SecondActivity 的 onDestroy() 将被调用

     Note: 
    
     (1) OnPause() will be called first when you navigate to any other activity.
     
     (2) OnStop() will be called when activity is no longer Visible on screen.
    

    【讨论】:

      【解决方案3】:

      首先打开 Activity: onCreate(),OnStart(),onResume()

      用户点击 backButton(): onPause(),onStop(),onDestroy()

      导航到另一个屏幕:

      第一屏::onPause(),onStop()

      第二屏: onCreate(),OnStart(),onResume()

      在 Activity2 中按下返回按钮:

      第二屏: onPause(),onStop() ,onDestroy()

      第一屏: onRestart(), onStart(), onResume()

      用户锁定设备: onPause(),onStop()

      再次打开锁: onRestart()、onStart()、onResume()

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        相关资源
        最近更新 更多