onActivityResult用于杀死活动

时间:2012-11-07 09:58:33

标签: android activity-lifecycle

你能帮我解决问题吗?

我有Activity1,Activity2。 Activity1在onCreate()中创建UI,然后在某个时刻用户使用startActivityForResult()

启动Activity2

内存情况似乎非常罕见,但我曾经面对过一次,所以我想在将来阻止它。我甚至可以通过运行一些“硬”应用程序或游戏来重复这种情况。结果是 - 当我返回我的应用程序时,重新创建了Activity2。然后,当我按“返回”按钮返回到Activity1时,它也会重新创建。我在这里遇到了逻辑冲突。 Activity1 UI在onCreate中从零开始创建,同时在onActivityResult中更新!

我该如何解决这个问题?在onCreate中触发一些标记并在onActivityResult中查看?这对我有用,但我认为它不应该如此。

我的手机有Stock ROM,Android 2.3.5

更新:好的,具体问题,我有一个元素列表。它内置于onCreate()。离开Activity2我需要记住被点击的元素的ID,以便稍后在onActivityResult()中更新它。在onSaveInstanceState()中将其保存在捆绑包中不是问题。但!在onCreate()中从捆绑中获取它是个坏主意,因为我没有更新任何内容!这里说清楚是伪代码:

onCreate()
{
     elementId = getIdFromBundle();
     if (elementId == null) 
         createNewListFromZero();
}

onSaveInstanceState()
{
     putIdToBundle(elementId);
}

onActivityResult()
{
     updateOnlyOneListElement(elementId);
}

所以我无法通过它的id来更新元素,因为活动实际上被系统破坏了。我需要重建它。我连续打电话给onCreate(), onActivityResult()。问题是如何在这两种方法之间共享逻辑以正确的顺序创建\更新我的元素列表?

1 个答案:

答案 0 :(得分:0)

您应该看看在onSaveInstanceState中保存活动状态。当活动重新启动时,将在onCreate中返回此捆绑包。 看一下Activity的生命周期

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

活动类javadoc:

注意" Killable"上表中的列 - 对于那些被标记为可填充的方法,在该方法返回之后,托管该活动的进程可能在任何时候被系统杀死而不执行其代码的另一行。因此,您应该使用onPause()方法将任何持久性数据(例如用户编辑)写入存储。

In addition, the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created