Android主要活动销毁(完成)自动

Posted

技术标签:

【中文标题】Android主要活动销毁(完成)自动【英文标题】:Android main activity destroy(finish) automatically 【发布时间】: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() 来销毁你的活动。 【参考方案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>

【讨论】:

是否有任何解决方案可以避免这种情况或停止销毁活动?

以上是关于Android主要活动销毁(完成)自动的主要内容,如果未能解决你的问题,请参考以下文章

如何检查android是不是要重新创建活动或销毁?

使用完成按钮单击关闭 android 活动(完全,甚至不在后台)

android - 从活动调用完成会破坏托管片段吗?

android service 自动解绑并销毁

Android销毁活动,杀死进程

Android:当应用程序被销毁和重新创建时总是启动启动活动