0

你能帮我解决我的问题吗?

我有活动1,活动2。Activity1 在 中创建 UI onCreate(),然后在某个时刻用户启动 Activity2startActivityForResult()

内存不足的情况似乎很少见,但我遇到过一次,所以我想在以后防止它。我什至可以通过运行一些“硬”应用程序或游戏来重复这种情况。结果是 - 当我返回我的应用程序时,Activity2 被重新创建。然后当我按返回按钮返回 Activity1 时,它也会重新创建。我在这里有逻辑冲突。Activity1 UI 从零开始创建,onCreate同时在onActivityResult!

我该如何解决这个问题?触发一些标志onCreate并检查它onActivityResult?这对我有用,但我认为它不应该是这样。

我的手机有 Stock ROM,Android 2.3.5

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

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

onSaveInstanceState()
{
     putIdToBundle(elementId);
}

onActivityResult()
{
     updateOnlyOneListElement(elementId);
}

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

4

1 回答 1

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

于 2012-11-07T10:03:40.387 回答