【问题标题】:Android activity lifecycle: state order when new activity startsAndroid活动生命周期:新活动开始时的状态顺序
【发布时间】:2012-04-15 08:14:11
【问题描述】:

如果我通过这种方式从 Activity1 启动 Activity2:startActivity(Activity2); 首先执行的是:onStop() (Activity1) 还是 onStart() (Activity2)?

它们是同时工作还是轮流工作?如果一个接一个,什么是第一个?

所以一般来说:当第一个活动第二个开始时,活动的状态顺序是什么,如果这个顺序存在?

【问题讨论】:

标签: android android-activity lifecycle


【解决方案1】:

假设 Activity A 正在通过调用 StartActivity(Intent) 方法启动 Activity B,然后生命周期调用如下所示:-

  • 一个 onCreate()
  • 一个 onStart()
  • 一个 onResume()

现在按钮点击 startActivity(intent)

  • 一个 onPause()

  • B onCreate()

  • B onStart()

  • B onResume()

  • 一个 onStop()

.....如果您在活动 B 中按下返回按钮,那么 lifeCycle 调用将是.....

  • B onPause()

  • 一个 onRestart()

  • 一个 onStart()

  • 一个 onResume()

  • B onStop()
  • B onDestory()

现在还有一个场景“从 Activity A 启动 Activity B,方法是在单击按钮时调用 StartActivity(Intent) 并在 Activity B 的 onstart() 方法中使用 finish() 方法”

  • 一个 onPause()

  • B onCreate()

  • B onStart()

  • 一个 onResume()

  • B onStop()

  • B onDestory()

【讨论】:

  • 如果您从 Activity B 按下返回按钮,那么 lifeCycle 调用将是......在为 Activity B 调用 onDestroy() 之前您没有提到 onSop()
  • 假设在 Activity A 中,您进行了改造调用并等待响应,作为响应,您对 Activity B 有 startactivity 意图。现在用户按下主页按钮,Activiy A onstop 被调用,并且在改造之后响应来了,因为有一个意图 Activity B 现在会发生什么? Activity B 会不会开放?我已经看到它被打开并在没有带来它的情况下出现在前台。它的行为就像我的应用程序中的错误。发生了什么事?
  • 为什么在按下返回键的时候Activity B会调用onDestroy,而离开Activity A并启动Activity B时却没有销毁?这是因为您可能在 Android Manifest 文件中将 Activity A 声明为 Main Activity?
【解决方案2】:

根据文档,Activity2 上的 onStart 在 Activity1 上的 onStop 之前被调用(或者,如果您愿意,操作系统在 Activity1 上调用 onStop 之前等待 Activity2 上的 onStart 完成)。

来自http://developer.android.com/guide/topics/fundamentals/activities.html

生命周期回调的顺序是明确定义的,特别是当两个活动在同一个进程中并且一个正在启动另一个时。以下是 Activity A 启动 Activity B 时发生的操作顺序:

Activity A 的 onPause() 方法执行。 Activity B 的 onCreate()、onStart() 和 onResume() 方法依次执行。 (活动 B 现在具有用户焦点。) 然后,如果 Activity A 在屏幕上不再可见,则执行其 onStop() 方法。

【讨论】:

  • Android 开发者网站已更新,coordinating activities 部分位于developer.android.com/guide/components/activities/…
  • 假设在 Activity A 中,您进行了改造调用并等待响应,作为响应,您对 Activity B 有 startactivity 意图。现在用户按下主页按钮,Activiy A onstop 被调用,并且在改造之后响应来了,因为有一个意图 Activity B 现在会发生什么? Activity B 会不会开放?我已经看到它被打开并在没有带来它的情况下出现在前台。它的行为就像我的应用程序中的错误。发生了什么事?
【解决方案3】:

假设 Activity A 正在通过 Calling StartActivity(Intent) 方法启动 Activity B 然后生命周期调用是这样的:-

  • A onCreate(), A onStart(), A onResume()

现在按钮点击startActivity(intent)

  • A onPause(), B onCreate(), B onStart(), B onResume(), A onStop()

如果您从 Activity B 按下返回按钮,那么 lifeCycle 调用将......

  • B onPause(), A onRestart(), A onStart(), A onResume(), B onStop(), B53


现在还有一个场景“从 Activity A 开始 Activity B,通过在按钮单击上调用 StartActivity(Intent) 并在 onstart() Activity B 上使用 finish() 方法”

  • AonPause(),BonCreate(),BonStart(),AonResume(),BonStop(),B3

【讨论】:

    【解决方案4】:

    当我以编程方式检查它时,它遵循所有步骤并且易于理解

    【讨论】:

      【解决方案5】:

      下面是 Activity A 启动 Activity B 时发生的操作顺序:

      Activity A 的 onPause() 方法执行。

      Activity B 的 onCreate()、onStart() 和 onResume() 方法依次执行。 (活动 B 现在具有用户焦点。)

      然后,如果 Activity A 在屏幕上不再可见,则执行其 onStop() 方法。

      1

      【讨论】:

      【解决方案6】:

      关键是了解活动是如何开始的。当您在 startActivity() 方法中发布 Intent 时,您只需 要求 系统启动此活动。下一个系统尝试启动 Activity2 并向 Activity1 发送消息。顺序是不确定的,在不同的情况下可能会有所不同。

      当两个活动在同一个进程中工作时,我的回答似乎是错误的(应用程序) 正如 Daniil Popov 所指出的:https://developer.android.com/guide/components/activities/activity-lifecycle.html(协调活动部分)

      【讨论】:

      • Android 开发者网站已更新,coordinating activities 部分位于developer.android.com/guide/components/activities/…
      • 假设在 Activity A 中,您进行了改造调用并等待响应,作为响应,您对 Activity B 有 startactivity 意图。现在用户按下主页按钮,Activiy A onstop 被调用,并且在改造之后响应来了,因为有一个意图 Activity B 现在会发生什么? Activity B 会不会开放?我已经看到它被打开并在没有带来它的情况下出现在前台。它的行为就像我的应用程序中的错误。发生了什么事?
      【解决方案7】:

      当我们从第一个活动导航到第二个活动时 调用 onPause() 方法,然后调用 onStop(),然后调用第二个活动的方法 onCreate(),然后调用 onStart(),然后调用 onResume()。

      当按返回键导航回第一个活动时

      调用第二个活动的onPause()方法,然后调用onStop(),然后调用第一个活动的onRestart()方法,然后调用onStart(),然后调用onResume()。

      【讨论】:

      • 我刚刚在我的应用程序中添加了一些日志记录代码,但我看到了不同的画面:1) Activity1 onPause() 2) Activity2 onStart 3) activity2 onResume() 4) Activity1 onStop()。
      【解决方案8】:

      使用 Log 将日志发布到 Logcat。

      Log.v("STATE", "Pause...and so on");
      

      【讨论】:

        【解决方案9】:

        生命周期回调的顺序是明确定义的,特别是当两个活动在同一个进程中并且一个正在启动另一个时。以下是 Activity A 启动 Activity B 时发生的操作顺序:

        Activity A 的 onPause() 方法执行。 Activity B 的 onCreate()、onStart() 和 onResume() 方法依次执行。 (Activity B 现在拥有用户焦点。)然后,如果 Activity A 在屏幕上不再可见,则执行其 onStop() 方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-13
          • 2011-12-18
          • 1970-01-01
          • 2014-09-26
          • 1970-01-01
          相关资源
          最近更新 更多