【发布时间】: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()创建的),如下所述:stackoverflow.com/questions/2442713/… -
这很奇怪。我没有看到 onDestroy()。对于这个简单的应用程序,系统资源就足够了。该应用程序只有一个活动。让我困惑的是第一次隐藏 Activity 的方式。如果我使用发送 Intent 从 BroadCastReceiver 中启动 Activity,我将在点击 App 图标时再次重新运行 onCreate。但是如果我先点击 App Icon 启动 Activity,然后再点击,onCreate 将不会再次运行。
标签: android events android-activity broadcastreceiver lifecycle