完成儿童活动后父母活动的异常行为

时间:2013-03-29 19:42:09

标签: android android-activity activity-lifecycle

我有Activity A,我使用Activity BActivity A拨打setResultForActivity

现在在Activity B当我按下Done按钮时,我正在解雇finish()并返回 Activity A并返回onActivityResult。现在问题发生在我finish() Activity B Activity A onCreate ListView {{1}}之后{{1}}未被调用,这就是为什么

我的{{1}}中的一些自定义侦听器无法正常工作,似乎它们没有绑定。

所以整个活动反应非常奇怪,任何人都可以解决这个问题吗?

5 个答案:

答案 0 :(得分:2)

为什么第四个答案?因为在我看来,其他人并不完全正确。

事实是,在此期间,活动A 可能已被销毁。这取决于Android是否需要内存。因此 可能会调用Activity A的{​​{1}}(以及其他生命周期回调)。在后一种情况下,onCreate()之前会调用onActivityResult()

对于配置更改,保留活动状态的最有效方法是通过onResume(),如果您想要在销毁活动后重新启动活动,可以使用{{1}机制,因为当Android破坏你的活动nonConfigurationState时,它将保持其意图并保存实例状态以重新创建它。

这强调了将初始化完全放在它所属的回调中的绝对必要性。

要测试您的Activity逻辑是否有效,无论Android是否销毁它,您都可以使用DevTools设置“开发设置” - > “立即摧毁活动”。 DevTools应用程序可在AVD上使用,也可以从Google Play下载。

答案 1 :(得分:1)

只需将onCreate()内容放在Activity A的onResume()中,setContentView()除外。

答案 2 :(得分:0)

请阅读Android活动生命周期:http://developer.android.com/training/basics/activity-lifecycle/stopping.html。 onCreate()仅在首次创建活动时调用。您可以在onResume()方法中执行列表操作。

答案 3 :(得分:0)

活动A的onCreate将不会被调用,因为活动尚未被销毁。当一个Activity重新获得另一个活动的焦点时,它会被onStartonResume调用,所以我会将你的绑定侦听器放入其中。通常在调用onCreate时也会调用它们。

答案 4 :(得分:0)

在你的子活动完成之后(),它返回执行onActivityResult,这是你在活动A中的情况。在杀死你的子活动,即活动B时,不应该使用onCreate方法,也不会被调用。

请发布一些源代码供我们使用,我会改进我的答案! :)