【问题标题】:onActivityResult for killed activityonActivityResult 被杀死的活动
【发布时间】:2012-11-07 09:58:32
【问题描述】:

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

我有 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()。问题是我应该如何在这两种方法之间共享逻辑以按正确的顺序创建\更新我的元素列表?

【问题讨论】:

  • 您找到解决方案了吗?我也面临同样的问题!

标签: android activity-lifecycle


【解决方案1】:

您应该看看将活动状态保存在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

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多