为啥活动通过 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() 执行之后加载?
android 开发中 使用Application类 为啥OnCreate()方法没被调用?