为啥活动通过 onCreate 而不是 onRestart 回到前面?

Posted

技术标签:

【中文标题】为啥活动通过 onCreate 而不是 onRestart 回到前面?【英文标题】:Why activity come back to front via onCreate rather than onRestart?为什么活动通过 onCreate 而不是 onRestart 回到前面? 【发布时间】:2018-08-23 00:54:00 【问题描述】:

我想要做的是在设备重新启动时通过在 BroadCastReceiver 监听 BOOT_COMPLETED 事件中发送意图来启动 Activity。 Activity 在其 onCreate 事件处理程序中有一个条件 moveTaskToBack。 Activity 是可启动的,是 App 的唯一 Activity。

    当我重新启动设备时,应用程序正在运行,我可以看出 Activity 已从屏幕隐藏。从 logcat 打印一条“onCreate”消息以指示 onCreate 事件发生。然后我单击屏幕中的应用程序图标,期望 Activity 从后面显示 onCreate 应该被省略并且 moveTaskToBack 应该不会运行。但 onCreate 事件处理程序仍然执行,Activity 再次隐藏。 以另一种方式,我从 BroadCastReceiver 中删除启动 Activity,只需通过单击屏幕中的图标打开应用程序。首先点击应用程序开始运行并且活动隐藏,当我再次点击图标时,活动显示。从 logcat 来看,第一个事件是 onRestart,这是预期的。

我不确定两种带回 Activity 的方式有什么不同?为什么 onCreate 在第一种情况下会发生两次应用 BroadcastReceiver?

干杯!

【问题讨论】:

在onDestroy()中添加一条日志语句,看是否被调用。如果是这样,必须再次调用 onCreate()。此外,一些代码会有所帮助。 没有 onDestroy() 被调用,因为我使用 logcat 检查。 如此图所示 (developer.android.com/guide/components/activities/…) 如果您的应用被系统杀死,也会调用 onCreate。您的应用是否会因某种原因被终止? 您可能想要检查活动堆栈。也许您有多个活动实例(每个实例都是由onCreate() 创建的),如下所述:***.com/questions/2442713/… 这很奇怪。我没有看到 onDestroy()。对于这个简单的应用程序,系统资源就足够了。该应用程序只有一个活动。让我困惑的是第一次隐藏 Activity 的方式。如果我使用发送 Intent 从 BroadCastReceiver 中启动 Activity,我将在点击 App 图标时再次重新运行 onCreate。但是如果我先点击 App Icon 启动 Activity,然后再点击,onCreate 将不会再次运行。 【参考方案1】:

我现在知道广播接收器启动的活动在一个堆栈中,而启动器启动的同一个类的活动在另一个堆栈中。因此,为什么当我点击 App 图标桌面时再次发生 onCreate 事件,为 App 创建一个新的堆栈和全新的活动。

感谢 xvlcw 的大力帮助...

【讨论】:

以上是关于为啥活动通过 onCreate 而不是 onRestart 回到前面?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用片段,以及何时使用片段而不是活动?

为啥在 setContentView() 之后 UI 不加载,而是在 onCreate() 执行之后加载?

是否可以检查是否由于方向更改而调用了 onCreate?

android 开发中 使用Application类 为啥OnCreate()方法没被调用?

在 Eclipse 中使用 aar - 为啥第 3 方活动在构建时解决而不是运行时解决?

为啥说安卓activity的onCreate()方法 只调用一次