【问题标题】:Which method is called after an intent starts an Activity?Intent 启动 Activity 后调用哪个方法?
【发布时间】:2017-01-07 14:25:35
【问题描述】:

我知道当一个活动第一次被创建时,它的 onCreate() 方法就会发挥作用。

假设有一个主要活动通过一个意图启动另一个活动(secondActivity.java),然后第二个活动通过一个意图再次启动主要活动。我的问题是在收到意图后是否调用主要活动的onRestart()方法或调用onCreate()方法?

提前致谢!

【问题讨论】:

  • 为什么不试试呢?只需覆盖方法,调用 super.... 并记录方法名
  • 我做了,并且 onCreate 方法被调用了,我不应该感到困惑,因为 onCreate 在整个生命周期中只被调用一次。
  • 但是 CommonsWare 的回答让一切都​​清楚了。

标签: android android-intent oncreate


【解决方案1】:

我的问题是onRestart()方法是在收到intent后调用main Activity还是调用onCreate()方法?

这取决于是否会创建主活动的新实例。

默认情况下,一个会。在这种情况下,将使用onCreate() 调用主活动的新实例。主要活动的原始实例被单独保留。

但是,通过Intent 标志(例如FLAG_ACTIVITY_REORDER_TO_FRONT)或清单设置,您可以安排将主要活动的原始实例带回前台。在这种情况下,将使用onNewIntent() 调用原始实例(为您提供与startActivity() 一起使用的Intent,将活动带回前台)。作为返回前台的一部分,还应该使用 onRestart()、onStart() 和 onResume() 调用它。

【讨论】:

  • 谢谢!那么,如果我将我的原始 main 实例放到前台会更好,还是让我创建另一个 main 实例是否可以?
  • @RohanBhatia:这取决于你。重复使用活动可以节省内存。但是,在某种程度上,这取决于您如何设置导航。如果您创建一个新实例,您的活动顺序是 M -> S -> M2(M=main,S=second,M2=main 的第二个实例)。因此,当用户从 M2 按下 BACK 时,他们会转到 S,当他们从 S 按下 BACK 时,他们会转到 M。如果您重新排序堆栈并重用 M,当用户从 M 按下 BACK 时,他们会转到 S,并且当他们从 S 按 BACK 时,他们会退出您的应用程序。
【解决方案2】:

这是来自文档的 Android 生命周期的图片:

当您启动第二个活动时,onPause() 等将在第一个活动上调用,然后onCreate() 等将在第二个活动上调用。正如您在上图中看到的,当您按下返回时,应该在第一个活动上调用 onRestart()。

【讨论】:

  • 我同时添加了更多细节。
【解决方案3】:

如果您开始一个新的意图,则会调用 onCreate() 方法。

【讨论】:

  • 你确定吗,因为 android 开发者网站说 - 活动的整个生命周期发生在第一次调用 onCreate(Bundle) 到最后一次调用 onDestroy() 之间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多