【问题标题】:Android main activity destroy(finish) automaticallyAndroid主要活动销毁(完成)自动
【发布时间】:2013-03-01 13:47:19
【问题描述】:

在我的应用程序中有三个活动:A、B 和 C。活动 A 是主要活动。

当我使用 Intent 从 A 启动 Activity B 时,A 会自动销毁。但是,当我启动 B 时,我还没有完成 A。然后,当我按下设备中的后退按钮时,A 使用 onCreate 启动并且我丢失了所有数据,因为我没有使用 Intent 来回去吧。

从 B 打开 C 时也会发生同样的情况。

button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startActivity(new Intent(ActivityA.this,
                        ActivityB.class));
            }
        });

发生了什么事?我该如何解决这个问题?

【问题讨论】:

  • 我们能有代码吗?
  • 你可能在开始你的Activity B之后给finish()
  • 是的,我更新了我的问题
  • 不,我没有在 Intent 中调用 finish()
  • 你必须调用 finish() 来销毁你的活动。

标签: android android-activity


【解决方案1】:

这是我的错误,因为活动会自动销毁。我检查了Setting=>Developer Option=>Don't Keep Activities 下的选项。由于一旦用户离开它就会破坏每个活动。

通过取消选中此选项,我的应用程序运行良好。

【讨论】:

    【解决方案2】:

    如果您使用“活动 B”来获得某种一次性结果,那么听起来您需要使用 startActivityForResult 构造。请参阅[文档](http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int))

    然而,要维护有关“活动 A”的状态信息,而不是将其保存在您希望将所有信息(用户填写的字段等)捆绑到传递的 Intent 捆绑包中的任何位置到“活动 B”。此捆绑包被传递到“活动 B”onCreate(以及其他一些生命周期点),您可以在其中继续填充“活动 B”中的任何相关信息并将该信息写回意图包,然后再使用 modd 重新启动“活动 A”完成“活动 B”后,就可以进行捆绑。但这里有龙。我们的应用程序采用了这种特定的机制,对后台堆栈有严格的(错误的?)控制。具体来说,我们的“活动 A”具有 android:noHistory="true" 的特殊清单声明。这意味着我们还可以通过在每个活动上覆盖 onBackPressed() 并将同一个包发送到我们刚刚来自的活动的 新实例 来控制按下后退按钮时发生的情况。它看起来像一个普通的后台堆栈,但由于我们想要记住用户输入而不是在任何地方持久化该信息,所以它是一个可用的解决方案。

    这允许类似向导的输入,向导输入的每个阶段都是它自己的活动,并且只有经过验证和正确的信息才会在最后持久化。

    另一种方法是将“Activity A”的数据临时存储在 SharedPreferences 区域中,以便在重新启动 Activity A 时,您可以在离开时取出适当的位重新组装“Activity A”的原始状态。请放心,当 Android 想要杀死您的 Activity A 时,您几乎无能为力,但您可以使用此处概述的方法来适应它非常合理的杀死。

    【讨论】:

      【解决方案3】:

      也许不是你在破坏你的活动。

      来自关于Activity Life cycle的页面:(强调我的)

      如果某个活动被暂停或停止,系统可以删除该活动 通过要求它完成或简单地杀死它来从内存中提取 过程。当它再次显示给用户时,它必须是完整的 重新启动并恢复到之前的状态。

      里面明确说系统可以杀死你的activity进程。

      有些可能是您的设备内存不足,或者您的活动内存不足,导致系统将其杀死。

      编辑

      为了维护您的数据,即使在活动之间被破坏。一种方法是使用 Application 类,在Using the Android Application class to persist data 上查看这个答案,也许这就是你要找的。​​p>

      【讨论】:

      • 是否有任何解决方案可以避免这种情况或停止销毁活动?
      猜你喜欢
      • 2015-11-21
      • 2012-01-14
      • 2018-03-27
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多